【发布时间】:2015-09-29 16:13:42
【问题描述】:
看起来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 bar = 1 px 分辨率的条形码,所以我无法对其进行采样。
如何验证 DPI:通过剪贴板查看器或在显示图像属性的图像编辑器中打开图像。如果您只有 Word,请将图像拖放到文档上。上述示例的图像尺寸应该是 1.69×1.69 厘米 - 如果从文件中获取,它实际上是。如果来自 .NET 制作的剪贴板,则不是。
我在设置图像 DPI 的过程中缺少什么?
(C# 或 VB,随你喜欢。)
【问题讨论】:
-
您是否在绘制之前尝试设置分辨率?
-
@miroxlav - 你是怎么做到的? SetImage 只能写 BitmapSource 而不能写 Image。也许你用过
Clipboard.SetData(DataFormats.Bitmap, bitmap1); -
如果您能了解如何将位图转换为Enhanced-Format Metafile并且您要粘贴到的应用程序能够理解该格式,那么就有一线希望。
标签: .net c# .net vb.net image dpi