更改Image对象的DPI

时间:2017-05-09 10:43:17

标签: c# image-processing bitmap dpi

我想将位图的VerticalResolution和Horizo​​ntalResolution更改为固定值300

我有一个Windows服务需要一些TIFF并执行一些与条形码相关的操作。除此之外,我还从单页创建了一个多页TIFF。

问题是原始DPI总是300,结果有96 DPI。

即使分辨率相同且文件大小未受影响(考虑到其他页面),这似乎是唯一相关的区别。

这是相关的,因为我在每个文件中都需要300 DPI。

这是我认为原因所在的代码,取自此处:https://www.codeproject.com/Articles/16904/Save-images-into-a-multi-page-TIFF-file-or-add-ima

private Bitmap ConvertToBitonal(Bitmap original)
    {
        Bitmap source = null;

        // If original bitmap is not already in 32 BPP, ARGB format, then convert
        if (original.PixelFormat != PixelFormat.Format32bppArgb)
        {
            source = new Bitmap(original.Width, original.Height, PixelFormat.Format32bppArgb);
            source.SetResolution(original.HorizontalResolution, original.VerticalResolution);
            using (Graphics g = Graphics.FromImage(source))
            {
                g.DrawImageUnscaled(original, 0, 0);
            }
        }
        else
        {
            source = original;
        }
  // some stuff here

  // Create destination bitmap
            Bitmap destination = new Bitmap(source.Width, source.Height, PixelFormat.Format1bppIndexed);

  // other stuff
  }

调试它,我在说明之前看到了:

Bitmap destination = new Bitmap(source.Width, source.Height, PixelFormat.Format1bppIndexed);

位图具有VerticalResolution 300和Horizo​​ntalResolution 300。 之后变为96x96。

如何更改这些图像属性以获得具有300 DPI的图像?

使用SetResolution方法设置原始Xdpi和Ydpi,新Bitmap对象的默认DPI为96x96,如下面的答案所示。

1 个答案:

答案 0 :(得分:2)

代码创建一个位图目标。 Bitmap的分辨率默认为96dpi x 96 dpi。由于未设置其他分辨率,因此输出文件具有默认分辨率...

您的问题的答案可以在参考手册中找到。

https://msdn.microsoft.com/en-us/library/system.drawing.bitmap(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.setresolution(v=vs.110).aspx

public void SetResolution(
        float xDpi,
        float yDpi
    )
  

设置此位图的分辨率。

如果您理解从某处复制的代码,您会意识到您已经在您面前找到了问题的答案......

source.SetResolution(original.HorizontalResolution, original.VerticalResolution);