ThinkGeo.com    |     Documentation    |     Premium Support

Save map as image, poor quality

Hi! 



Our customer is complaining that the image quality of saved maps is not good. And they’re partially right, to my understanding. It could be better. Even a small zoom will make it pixelated and you can tell that the image’s quality is low, not bad, but not perfect.



I had already created a function to save the map as a high quality image, thanks to your help. But all it really does is setting the image size to a value that’s pretty high. If you zoom, the the quality is not perfect either. Here’s the post, for your reference. Save Mas as high quality



So, is there anything we can do to improve the quality of the image that’s being saved? Either using the “basic” code: 


Bitmap auxBitmap = winformsMap1.GetBitmap(winformsMap1.Width, winformsMap1.Height);
auxBitmap.Save(saveFileDialog.FileName, saveFormat);

or the function from the related post?



Ideas are welcome.







Attached is a sample of the image quality, 



Thanks! Juan.






Hi Juan,

Here is the implement of method “GetBitmap” in WinformsMap class,

        public Bitmap GetBitmap(Single width, Single height)

        {

            Bitmap bitmap = new Bitmap((int)width, (int)height);

            DrawToBitmap(bitmap, new Rectangle(0, 0, this.Width, this.Height));

            return bitmap;

        }

You see there isn’t any special setting here, I guess there are 2 options here, just outline them as following:

1. Implement drawing to bitmap by ourselves, using MapEngine, just like the code provided by Troy in another thread. There we can create the GeoCanvas by ourselves, then we can change the DPI, CompositingQuality, InterpolationMode of the GeoCanvas to get a high quality image. Besides, we can change the EncoderParameters of bitmap when calling Save method. Please see related discussion at stackoverflow.com/questions/1484759/quality-of-a-saved-jpg-in-c-sharp  

2.  I’m not sure what picture format you are using for saving, it’s Jpeg? In that case, maybe you can try a lossless format, such as TIFF, PNG etc.

Thanks,

Johnny



Hi Johnny, thanks for replying. I see what you say, the GetBitmap method is quite simple and there’s not much to do there.


I’m attaching a TXT file with my code that saves the image, created from Troy’s suggestion. How would you improve that to get a better image quality? AS you can see, I’ve got many things in my map. I use MARKERS to accomplish quite a few things, and I need those to be included in the resulting image. I’ve tried DrawToBitmap and setting the DPI for the bitmap there, but the quality is just the same. Oh, and the user can choose the format: JPG, BMP and TIFF. But using BMP makes no difference. 



Please let me know ideas!



Thanks again.



Juan.

SaveAsImageCode.txt (3.62 KB)

Hi Juan,



Thanks for your code, but before we move forward, please try the following 2 changes in your application:



1. Add the following code to your mapEngine


mapEngine.Canvas.DrawingQuality = DrawingQuality.HighQuality;



2. With DrawingQuality.HighQuality, we made some improvements in MapSuiteCore.dll to make sure improve the drawing quality. Please get the updated version 9.0.108.0 or 9.0.0.108 or later to have  a try.



For the Jpeg, Bmp, Tiff and Png, they are bitmap/pixel based image format, in other word, if we use the “Windows Image Viewer” to check the pictures, after a small zoom in, I guess it will runs into pixelated problem. If the changes still doesn’t work, I guess you need to try some vector based image format, such as SVG etc. Maybe creating a SvgGeoCanvas for saving format.



Thanks,

Johnny




Hi Johnny! 
  
 Thanks for the advice. We’d provided this information to our customer but we won’t be moving to V9 since we’re about to release the product and I’m not sure what the implications of migrating to V9 can be. As soon as we do I’ll try this.

Hi Juan, 
  
 Don’t hesitate to let us know if any questions when the migration. 
  
 Thanks, 
 Troy