DpiHelper Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Caution
Use Microsoft.VisualStudio.Utilities.DpiAwareness instead.
Helper class providing static properties, static methods and extension methods for scaling coordinates and images according to current System DPI set in Windows's Display Properties. The class scales images designed for 100% zoom levels (96dpi).
This class should be used by code running inside Visual Studio or other appids. The class provides public static properties and methods for easy binding/calling, and public static extension methods; the actual scaling implementation is delegated to the DpiHelper class from Microsoft.VisualStudio.Utilities.
This class allows the user to override the shell default scaling algorithms via registry settings under the running appid's hive. E.g. The user can set ImageScaling125, ImageScaling200, etc with values from ImageScalingMode enumeration to control the scaling algorithm used for managed Image objects at 125% and 200%. Similarly, the user can set BitmapScaling150, BitmapScaling200, etc to control the scaling algorithm of WPF ImageSources. And the user can set boolean registry values like UseBitmapPreScaling250 to control whether image scaling at 250% should be done in 2 steps, with NearestNeighbor up to the largest 100% multiple (200%), and from there with the algorithm specified by BitmapScaling250.
public ref class DpiHelper abstract sealed
public ref class DpiHelper abstract sealed
class DpiHelper abstract sealed
public static class DpiHelper
[System.Obsolete("Use Microsoft.VisualStudio.Utilities.DpiAwareness instead.")]
public static class DpiHelper
type DpiHelper = class
[<System.Obsolete("Use Microsoft.VisualStudio.Utilities.DpiAwareness instead.")>]
type DpiHelper = class
Public Module DpiHelper
- Inheritance
-
DpiHelper
- Attributes
Properties
BitmapScalingMode |
Retuns the BitmapScalingMode algorithm to be used for resizing images in WPF. This allows the shell to control the algorithm depending on the DPI zoom scale, and allows the user to override it via registry settings like General\BitmapScalingXXX = (BitmapScalingMode)value, with XXX the zoom factor in percents, e.g. BitmapScaling150, etc. Note that for WPF scaling, there is an additional registry value that applies for zoom factors > 200%, UseBitmapPreScalingXXX |
DeviceDpiX |
The screen's (device) current horizontal DPI |
DeviceDpiY |
The screen's (device) current vertical DPI |
DeviceToLogicalUnitsScalingFactorX |
Microsoft internal use only. |
DeviceToLogicalUnitsScalingFactorY |
Microsoft internal use only. |
DpiScalePercentX |
Gets the DPI scale percent for the horizontal scale. |
DpiScalePercentY |
Gets the DPI scale percent for the vertical scale. |
ImageScalingMode |
Retuns the ImageScalingMode algorithm to be used for resizing images in WinForms/Win32. This allows the shell to control the algorithm depending on the DPI zoom scale, and allows the user to override it via registry settings like General\ImageScalingXXX = (ImageScalingMode)value, with XXX the zoom factor in percents, e.g. ImageScaling150, etc. |
Instance |
Gets an instance of DpiHelper. |
IsScalingRequired |
Returns whether scaling is required when converting between logical-device units |
LogicalDpiX |
The helper's logical horizontal DPI |
LogicalDpiY |
The helper's logical vertical DPI |
LogicalToDeviceUnitsScalingFactorX |
Microsoft internal use only. |
LogicalToDeviceUnitsScalingFactorY |
Microsoft internal use only. |
PreScaledImageLayoutTransformScaleX |
Return the horizontal scale value that should be used with a LayoutTransform/ScaleTransform to scale back an image pre-scaled in HighDPI with DpiPrescaleImageSourceConverter in order to obtain crisp results |
PreScaledImageLayoutTransformScaleY |
Return the vertical scale value that should be used with a LayoutTransform/ScaleTransform to scale back an image pre-scaled in HighDPI with DpiPrescaleImageSourceConverter in order to obtain crisp results |
TransformFromDevice |
Microsoft internal use only. |
TransformToDevice |
Microsoft internal use only. |
UsePreScaledImages |
Returns whether images should be pre-scaled at zoom levels higher than 200%, using NearestNeighbor up to the largest multiple of 100% |
Methods
CreateDeviceFromLogicalImage(Bitmap, Size, Color, ImageScalingMode) |
Obsolete.
Extension method for System.Drawing.Bitmap that creates and returns a new bitmap strip scaled for the device units When displayed on the device, the scaled image strip will have same size as the original image strip would have when displayed at 96dpi. This should be used for converting imagelists bitmap strips instead of simply scaling the bitmap, because the resultant bitmap strip size may be different from just upscaling as bitmap N * Math.Round(width * dpiscale) != Math.Round(N * width * dpiscale) This may happen depending on the image width because dpiscale is a double not an int. |
CreateDeviceFromLogicalImage(Bitmap, Size, ImageScalingMode) |
Obsolete.
Extension method for System.Drawing.Bitmap that creates and returns a new bitmap strip scaled for the device units, using NearestNeighbor interpolation. When displayed on the device, the scaled image strip will have same size as the original image strip would have when displayed at 96dpi. This should be used for converting imagelists bitmap strips instead of simply scaling the bitmap, because the resultant bitmap strip size may be different from just upscaling as bitmap N * Math.Round(width * dpiscale) != Math.Round(N * width * dpiscale) This may happen depending on the image width because dpiscale is a double not an int. |
CreateDeviceFromLogicalImage(Icon, ImageScalingMode) |
Obsolete.
Creates and returns a new icon scaled for the device units. When displayed on the device, the scaled icon will have same size as the original icon would have when displayed at 96dpi. |
CreateDeviceFromLogicalImage(Image, Color, ImageScalingMode) |
Obsolete.
Extension method for System.Drawing.Image that creates and returns a new bitmap or metafile scaled for the device units. When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. |
CreateDeviceFromLogicalImage(Image, ImageScalingMode) |
Obsolete.
Extension method for System.Drawing.Image that creates and returns a new bitmap or metafile scaled for the device units. When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. |
CreateDeviceFromLogicalImage(ImageList, Color, ImageScalingMode) |
Obsolete.
Creates and returns a new imagelist scaled for the device units When displayed on the device, the scaled imagelist will have same size as the original imagelist would have when displayed at 96dpi. |
CreateDeviceFromLogicalImage(ImageList, ImageScalingMode) |
Obsolete.
Creates and returns a new imagelist scaled for the device units When displayed on the device, the scaled imagelist will have same size as the original imagelist would have when displayed at 96dpi. |
DeviceToLogicalUnits(Point) |
Obsolete.
Extension method for Point that returns a new Point with the input's coordinates converted from device units to logical units. |
DeviceToLogicalUnits(Rect) |
Obsolete.
Extension method for Rect that returns a new Rect with the input's coordinates converted from device units to logical units. |
DeviceToLogicalUnits(Size) |
Obsolete.
Extension method for Size that returns a new Size with the input's dimensions converted from device units to logical units. |
DeviceToLogicalUnits(Thickness) |
Obsolete.
Extension method for Thickness that returns a new Thickness with the input's dimensions converted from device units to logical units. |
DeviceToLogicalUnitsX(Double) |
Transforms a horizontal coordinate from device to logical units |
DeviceToLogicalUnitsX(Int32) |
Transforms a horizontal integer coordinate from device to logical units |
DeviceToLogicalUnitsX(Single) |
Transforms a horizontal coordinate from device to logical units |
DeviceToLogicalUnitsY(Double) |
Transforms a vertical coordinate from device to logical units |
DeviceToLogicalUnitsY(Int32) |
Transforms a vertical integer coordinate from device to logical units |
DeviceToLogicalUnitsY(Single) |
Transforms a vertical coordinate from device to logical units |
GetDeviceActualSize(FrameworkElement) |
Obsolete.
Extension method for FrameworkElement that returns its Size in device units |
GetDeviceHeight(Window) |
Obsolete.
Extension method for Window that returns its Height in device units |
GetDeviceLeft(Window) |
Obsolete.
Extension method for Window that returns its Left coordinate in device units |
GetDeviceRect(Window) |
Obsolete.
Extension method for Window that returns its Rectangle in device units |
GetDeviceTop(Window) |
Obsolete.
Extension method for Window that returns its Top coordinate in device units |
GetDeviceWidth(Window) |
Obsolete.
Extension method for Window that returns its Width in device units |
LogicalToDeviceUnits(Bitmap, Color, ImageScalingMode) |
Converts (if necessary) the image by scaling it to device units. When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. |
LogicalToDeviceUnits(Bitmap, ImageScalingMode) |
Converts (if necessary) the image by scaling it to device units. When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. |
LogicalToDeviceUnits(Bitmap, Size, Color, ImageScalingMode) |
Converts (if necessary) the image strip to device units, using NearestNeighbor interpolation.. When displayed on the device, the scaled image strip will have same size as the original image strip would have when displayed at 96dpi. This should be used for converting imagelists bitmap strips instead of simply scaling the bitmap, because the resultant bitmap strip size may be different from just upscaling as bitmap N * Math.Round(width * dpiscale) != Math.Round(N * width * dpiscale) This may happen depending on the image width because dpiscale is a double not an int. |
LogicalToDeviceUnits(Bitmap, Size, ImageScalingMode) |
Converts (if necessary) the image strip to device units, using NearestNeighbor interpolation.. When displayed on the device, the scaled image strip will have same size as the original image strip would have when displayed at 96dpi. This should be used for converting imagelists bitmap strips instead of simply scaling the bitmap, because the resultant bitmap strip size may be different from just upscaling as bitmap N * Math.Round(width * dpiscale) != Math.Round(N * width * dpiscale) This may happen depending on the image width because dpiscale is a double not an int. |
LogicalToDeviceUnits(Icon, ImageScalingMode) |
Converts (if necessary) the icon by scaling it to device units. When displayed on the device, the scaled icon will have same size as the original icon would have when displayed at 96dpi. |
LogicalToDeviceUnits(Image, Color, ImageScalingMode) |
Converts (if necessary) the image by scaling it to device units. When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. |
LogicalToDeviceUnits(Image, ImageScalingMode) |
Converts (if necessary) the image by scaling it to device units. When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. |
LogicalToDeviceUnits(ImageList, Color, ImageScalingMode) |
Converts (if necessary) the imagelist by scaling it to device units. When displayed on the device, the scaled imagelist will have same size as the original imagelist would have when displayed at 96dpi. |
LogicalToDeviceUnits(ImageList, ImageScalingMode) |
Converts (if necessary) the imagelist by scaling it to device units. When displayed on the device, the scaled imagelist will have same size as the original imagelist would have when displayed at 96dpi. |
LogicalToDeviceUnits(Point) |
Obsolete.
Extension method for Point that returns a new Point with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(Point) |
Obsolete.
Extension method for System.Drawing.Point that returns a new Point with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(PointF) |
Obsolete.
Extension method for System.Drawing.PointF that returns a new PointF with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(Rect) |
Obsolete.
Extension method for Rect that returns a new Rect with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(Rectangle) |
Obsolete.
Extension method for System.Drawing.Rectangle that returns a new Rectangle with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(RectangleF) |
Obsolete.
Extension method for System.Drawing.RectangleF that returns a new RectangleF with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(Size) |
Obsolete.
Extension method for Size that returns a new Size with the input's dimensions converted from logical units to device units. |
LogicalToDeviceUnits(Size) |
Obsolete.
Extension method for System.Drawing.Size that returns a new Size with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(SizeF) |
Obsolete.
Extension method for System.Drawing.SizeF that returns a new SizeF with the input's coordinates converted from logical units to device units. |
LogicalToDeviceUnits(Thickness) |
Obsolete.
Extension method for Thickness that returns a new Thickness with the input's dimensions converted from logical units to device units. |
LogicalToDeviceUnitsX(Double) |
Transforms a horizontal coordinate from logical to device units |
LogicalToDeviceUnitsX(Int32) |
Transforms a horizontal integer coordinate from logical to device units by scaling it up for current DPI and rounding to nearest integer value |
LogicalToDeviceUnitsX(Single) |
Transforms a horizontal coordinate from logical to device units |
LogicalToDeviceUnitsY(Double) |
Transforms a vertical coordinate from logical to device units |
LogicalToDeviceUnitsY(Int32) |
Transforms a vertical integer coordinate from logical to device units by scaling it up for current DPI and rounding to nearest integer value |
LogicalToDeviceUnitsY(Single) |
Transforms a vertical coordinate from logical to device units |
RoundToDeviceUnitsX(Double) |
Returns the closest value in logical units that will be converted to an integer value when converted to horizontal device units |
RoundToDeviceUnitsY(Double) |
Returns the closest value in logical units that will be converted to an integer value when converted to vertical device units |
ScaleLogicalImageForDeviceSize(ImageSource, Size, BitmapScalingMode) |
Scale a WPF image to the indicated size, using the specified scalingMode |
SetDeviceHeight(Window, Double) |
Obsolete.
Extension method for Window that sets its Height using device units |
SetDeviceLeft(Window, Double) |
Obsolete.
Extension method for Window that sets its Left coordinate using device units |
SetDeviceTop(Window, Double) |
Obsolete.
Extension method for Window that sets its Top coordinate using device units |
SetDeviceWidth(Window, Double) |
Obsolete.
Extension method for Window that sets its Width using device units |