...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>
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.