...Validate and update the properties and layout of this object and redraw it, if necessary...
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:ags="http://www.esri.com/2008/ags"> <s:layout> <s:VerticalLayout gap="20" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20" /> </s:layout> <fx:Script> <![CDATA[ import mx.core.UIComponent; import mx.graphics.codec.PNGEncoder; private const FILE_NAME:String = "screen.png"; private var bitmapData:BitmapData; private var logoBitmapData:BitmapData; /** * Listen print button click */ protected function onPrintClick(event:MouseEvent):void { exportPngImage(); } /** * Export png */ private function exportPngImage():void { if (map) { var fileReference:FileReference = new FileReference(); hideComponents(); // add listeners to show zoom slider after execution fileReference.addEventListener(Event.COMPLETE, fileSaveComplete); fileReference.addEventListener(Event.CANCEL, fileSaveCancel); try { var mapComponent:UIComponent = map as UIComponent; var exportData:BitmapData = getBitmapData(mapComponent); if (exportData) { // encode to PNG format var pngEncoder:PNGEncoder = new PNGEncoder(); var byteArray:ByteArray = pngEncoder.encode(exportData); // open dialog box fileReference.save(byteArray, FILE_NAME); exportData = null; bitmapData = null; logoBitmapData = null; } } catch (ioError:IllegalOperationError) { // handle error } catch (error:Error) { // handle error } } } /** * file upload/download canceled by user */ protected function fileSaveCancel(event:Event):void { showComponents(); } /** * file upload/download completed */ protected function fileSaveComplete(event:Event):void { showComponents(); } private function hideComponents():void { if (!chboxCrosshair.selected) map.crosshairVisible = false; if (!chboxLogo.selected) map.logoVisible = false; if (!chboxScale.selected) map.scaleBarVisible = false; if (!chboxSlider.selected) map.zoomSliderVisible = false; // force UIComponent update/redraw map.validateNow(); } private function showComponents():void { map.crosshairVisible = true; map.logoVisible = true; map.scaleBarVisible = true; map.zoomSliderVisible = true; } /** * get bitmap data from IBitmapDrawable component */ private function getBitmapData(uiComponent:UIComponent):BitmapData { if (uiComponent) { try { // map image size var mapWidth:Number = uiComponent.width; var mapHeigth:Number = uiComponent.height; // get flash map bitmap data bitmapData = new BitmapData(mapWidth, mapHeigth); var matrix:Matrix = new Matrix(); bitmapData.draw(uiComponent, matrix); if (chboxCR.selected) { // logo image size var logoWidth:Number = logo.width; var logoHeigth:Number = logo.height; // get logo bitmap data logoBitmapData = new BitmapData(logoWidth, logoHeigth); logoBitmapData.draw(logo, matrix); // calculate logo left-top position on map var logoX:Number = mapWidth - logoWidth - 10; var logoY:Number = 10; var point:Point = new Point(logoX, logoY); var mult:uint = 0x100; // 100% (256) RGBA channels multipliers bitmapData.merge(logoBitmapData, logoBitmapData.rect, point, mult, mult, mult, mult); } } catch (error:Error) { // handle error } } return bitmapData; } ]]> </fx:Script> <mx:Image id="logo" source="http://edn.esri.com/common/style/images/esriLogoSm.gif" /> <ags:Map id="map" crosshairVisible="true" logoVisible="true" scaleBarVisible="true" zoomSliderVisible="true"> <ags:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> </ags:Map> <s:HGroup width="100%" gap="10"> <s:CheckBox id="chboxCrosshair" selected="true" label="Print crosshair" /> <s:CheckBox id="chboxLogo" selected="true" label="Print logo" /> <s:CheckBox id="chboxScale" selected="true" label="Print scale bar" /> <s:CheckBox id="chboxSlider" selected="true" label="Print zoom slider" /> <s:CheckBox id="chboxCR" selected="true" label="Add Copyright" /> <s:Button label="Print to png" click="onPrintClick(event)" /> </s:HGroup> </s:Application>
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Jste tu noví? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.