---
title: "Displaying Image in BitmapViewer Windows Control"
canonical: https://www.graphicsmill.com/docs/gm5/DisplayingImageinBitmapViewerWindowsControl.htm
product: "Graphics Mill 5.5 for .NET"
---

This documentation is for the old version. [Go to the latest Graphics Mill docs](https://www.graphicsmill.com/docs/gm/)

# Displaying Image in BitmapViewer Windows Control
 
To display the image in the form of your application Graphics Mill for .NET provides a special control called [BitmapViewer](https://www.graphicsmill.com/docs/gm5/T_Aurigma_GraphicsMill_WinControls_BitmapViewer.htm.md). This article gives guidelines how to use this control.
 
## Associate the Image with the BitmapViewer
  
To associate the image with the BitmapViewer, you should use the [Bitmap](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_Bitmap.htm.md) property. You can use the [Load](https://www.graphicsmill.com/docs/gm5/O_T_Aurigma_GraphicsMill_Bitmap_Load.htm.md) method to load the image from the file:
 
```
BitmapViewer1.Bitmap.Load(OpenFileDialog1.FileName)
```
 
```csharp
bitmapViewer1.Bitmap.Load(openFileDialog1.FileName);
```
 
Alternatively, you can assign existing instance of the [Bitmap](https://www.graphicsmill.com/docs/gm5/T_Aurigma_GraphicsMill_Bitmap.htm.md) class to this property. However in this case it is highly recommended to dispose of the image which is currently associated with the BitmapViewer. Otherwise the reference to this image will become orphan, and this image will occupy memory until the garbage collector removes it completely. If the image is quite large, and the Bitmap property is updated too often, the application may suddently run out of memory.
 
To avoid this effect, we recommend to update the Bitmap property with a similar code:
 
```
Dim oldBitmap As Aurigma.GraphicsMill.Bitmap = BitmapViewer1.Bitmap
BitmapViewer1.Bitmap = newBitmap
oldBitmap.Dispose()
```
 
```csharp
Aurigma.GraphicsMill.Bitmap oldBitmap = BitmapViewer1.Bitmap;
BitmapViewer1.Bitmap = newBitmap;
oldBitmap.Dispose();
```
 
After the image stored in the Bitmap property is modified, the control raises the [WorkspaceChanged](https://www.graphicsmill.com/docs/gm5/E_Aurigma_GraphicsMill_WinControls_ViewerBase_WorkspaceChanged.htm.md) event. Also, if the [AutoUpdate](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_AutoUpdate.htm.md) property is set to `true`, the bitmap is redrawn in the control. If you are making several modifications to the image (e.g. drawing a graphics which consists of several elements), you may prefer to disable this automatic update and refresh the control manually with the **Invalidate** method. It will increase the performance.
 
## Zooming the Image in the BitmapViewer
  
BitmapViewer allows zooming in two modes: manual and automatic.
 
### Manual Zoom
 
Manual zooming may be done by modifying the [Zoom](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_ViewerBase_Zoom.htm.md) property. When this property equals 1, no zooming is done (i.e. the image is displayed in its actual size). When the property is less than 1, the image is shrunk (e.g. 0.5 means 50% of the actual size), when it is greater than 1, it is stretched (e.g. 3 means 300% of the actual size).
 
Zooming may be also done via mouse events. When the user holds the **Shift** button and scrolls the mouse wheel, the image is zoomed. The amount of zoom done with this method depends on the [WheelZoomAmount](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_ViewerBase_WheelZoomAmount.htm.md) property value.
 
Alternatively, you can associate some zooming navigator control, which will zoom the image on the mouse click. You can get more information about it in the topic [Using Navigators and Rubberbands (Window Forms)](https://www.graphicsmill.com/docs/gm5/UsingNavigatorsandRubberbandsWindowsForms.htm.md).
 
Image may be zoomed with a different quality. If it is zoomed with low quality, the performance is higher, and vice versa. Also, often low quality is preferable for stretching the image (so that the pixelization effect is visible) since it gives more control when drawing or selecting something. The quality of the zooming is specified with the [ZoomQuality](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_ZoomQuality.htm.md) property.
 
Maximum and minimum zoom values can be limited. Use [MinZoom](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_ViewerBase_MinZoom.htm.md) and [MaxZoom](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_ViewerBase_MaxZoom.htm.md) to specify maximum and minimum zoom value correspondingly.
 
If you need to perform some specific actions when the image is zoomed (e.g. display the zoom factor somewhere), you should handle the [Zoomed](https://www.graphicsmill.com/docs/gm5/E_Aurigma_GraphicsMill_WinControls_ViewerBase_Zoomed.htm.md) event.
 
### Automatic Zoom
 
Automatic zooming is used when you need to the image to completely fit the control (i.e. occupy maximum area of the control without displaying the scroll bars). It can also be set to maintain such zoom ratio to fit the image in the control by width, etc.
 
To make the control get the zoom ratio automatically, use the [ZoomMode](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_ViewerBase_ZoomMode.htm.md) property. It can be one of the following modes:
 
- *None.* Manual mode is used.
- *Best fit.* The image is shrunk or stretched to fill maximum area of the control without displaying the scroll bars.
- *Best fit shrink only.* The same, but if the image dimensions are less than the contol size, no zooming is applied.
- *Fit to width.* The image is shrunk or stretched to fit the control horizontally.
- *Fit to width shrink only.* The same, but if the image width is less than the contol width, no zooming is applied.
- *Fit to height.* The image is shrunk or stretched to fit the control vertically.
- *Fit to height shrink only.* The same, but if the image height is less than the contol height, no zooming is applied.
- *Control to image size.* This mode is the only one, which updates the control dimensions instead of zooming the image . With this mode the control client area size is updated to be the same as the image dimensions.

Pay attention, when you use zooming navigators, the ZoomMode is automatically reset to **None**.
 
## Image Rendering
  
You may also manage image rendering parameters.
 
### Alpha Blending
 
If you are displaying an image which contains some transparent or semi-transparent areas, the BitmapViewer can maintain these areas by alpha blending them with the background. However, it works noticeably slower than plain pixel copying. So if there is no need to maintain the transparent areas of images, you can disable it using the [AlphaEnabled](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_AlphaEnabled.htm.md) property.
 
If you enable alpha blending, you may wonder how to specify the background settings. The BitmapViewer allows to specify the style and colors of the background.
 
The background style is specified with the [WorkspaceBackgroundStyle](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_WorkspaceBackgroundStyle.htm.md) property and can be one of the following styles:
 
- *None.* No specific background for the image is used. The background color is the same as a background color of the entire control.
- *Solid.* The background of the bitmap is filled by the solid color which is specified by the [WorkspaceBackColor1](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_WorkspaceBackColor1.htm.md) property.
- *Grid.* The background of the bitmap is a "checkerboard", i.e. it consists of alternating squares of two colors which are set with the WorkspaceBackColor1 and [WorkspaceBackColor2](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_WorkspaceBackColor2.htm.md) properties. It is helpful when you need to demonstrate what portions of the image are transparent.

### Color Management
 
If you need accurate displaying of the colors, you can enable color management for the BitmapViewer. It is done using the [ColorManagementEngine](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_ColorManagementEngine.htm.md) property.
 
**Note** 
Since the displaying with the color management is quite slow, if accuracy of the colors is not important, it is recommended to set this property to `false` to increase the performance.
 
The ColorManagementEngine property overrides the color management settings of the Bitmap associated with the BitmapViewer. However if the Bitmap has no input profile (i.e. its [ColorProfile](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_Bitmap_ColorProfile.htm.md) property is not initialized with some profile), color management cannot be applied.
 
**Note** 
You don't need to specify the output profile yourself. Graphics Mill for .NET automatically determines the profile of your monitor and uses it.
 
### Maintaining the Physical Size of the Image
 
When you are creating an image which should be printed, you may need to see this image in its physical size. For example, if the image is 900 pixels wide and 1500 pixels high, and you are going to print it with 300 DPI resolution, the physical size will be 3x5 inches. To make BitmapViewer convert pixels to inches, set the [ScaleToActualSize](https://www.graphicsmill.com/docs/gm5/P_Aurigma_GraphicsMill_WinControls_BitmapViewer_ScaleToActualSize.htm.md) property to `true`.
 
It will also provide proper displaying of the images which have different horizontal and vertical resolutions. Different resolutions are typical for such images as faxes. If you disable the ScaleToActualSize mode, such faxes will look flattened out.
 
However since enabling the ScaleToActualSize mode leads to additional zooming, it works slower. So if you do not need to preserve the physical size of the image, it is recommended to set this property to `false` to increase the performance.
