看起来 Bitmap.SetResolution()对剪贴板没有影响,以下是简单的代码:
Dim bitmap1 As Image = New System.Drawing.Bitmap(100, 100)
Using gr As Graphics = Graphics.FromImage(bitmap1)
gr.FillRectangle(System.Drawing.Brushes.Black, 0, 0, 99, 99)
gr.FillRectangle(System.Drawing.Brushes.White, 10, 10, 89, 89)
End Using
bitmap1.SetResolution(150, 150)
Clipboard.SetImage(bitmap1) ' DPI not set
bitmap1.Save("D:\bitmap1.png", imaging.ImageFormat.Png) ' DPI set
该文件包含正确设置的图像DPI。在剪贴板中,它不存在。
证明:在剪贴板转储中(由IrfanView插入到剪贴板的图像),请参见
60×120
DPI的DIB位图头(黄色=水平DPI,绿色=垂直DPI):
使用.net的Clipboard.SetImage()
插入图像后,这两个数都是0
。我的目标是能够将图像以正确的大小(根据DPI和尺寸)粘贴到Microsoft Word中。如果在剪贴板中没有设置DPI,则粘贴后的图像将会过大。但它已经包含了条形码,其中1个条形码= 1个 px 的分辨率,因此我无法对其进行采样缩小。
如何验证DPI:使用剪贴板查看器或打开显示图像属性的图像编辑器。如果只有Word,则将图像拖放到文档上。上面示例的图像尺寸应该为1.69×1.69厘米-如果从文件中获取,实际上就是这样。如果来自.NET制作的剪贴板,则不是这样。
在设置图像DPI的过程中我缺少了什么?
(C#或VB,您喜欢哪种就用哪种。)
Clipboard.SetData(DataFormats.Bitmap, bitmap1);
。 - GreenEyedAndy