Select to view content in your preferred language

zoomSlider Visible still preset on image

556
1
02-20-2012 01:43 AM
shafitrumboo
Occasional Contributor
I'm exporting the map into image and i don't want zoom slider in the image so before doing  

map.zoomSliderVisible = false;
const imageSnapshot:ImageSnapshot = ImageSnapshot.captureImage(map,96,decoder,true);

But still I find zoomSlider in final image
Tags (2)
0 Kudos
1 Reply
IvanBespalov
Frequent Contributor
shafi,

From adobe reference:

...Validate and update the properties and layout of this object   and redraw it, if necessary...


Sample here:


<?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>
0 Kudos