【发布时间】:2020-11-06 09:33:15
【问题描述】:
我正在使用从文件创建图像
var img = Image.FromFile(openFileDialog1.FileName);
我还创建了一个相同大小的位图
var bmp = new Bitmap(img.Width, img.Height);
var g = Graphics.FromImage(bmp);
然后我使用从图像绘制位图
var r = new Rectangle(tileoffsetx, tileoffsety, tilewidth, tileheight);
g.DrawImage(img, destx, desty, r, GraphicsUnit.Pixel);
我也试过
var r = new Rectangle(tileoffsetx, tileoffsety, tilewidth, tileheight);
g.SetClip(r);
g.DrawImageUnscaled(img, destx, desty);
在这两种情况下,我都得到了意外的缩放。 (即使我使用的是 DrawImageUnscaled 版本)。
在这两种情况下,我得到的结果大约是原始大小的 1/3。
这似乎与图像的分辨率为 300 像素/英寸而位图的分辨率为 96 像素/英寸的事实相对应。
无论像素/英寸如何,如何复制像素?
【问题讨论】:
-
如果没有可靠地重现问题的良好 minimal reproducible example,您可能会发现对提供好的答案缺乏兴趣(尽管您可能会得到一些“在黑暗中拍摄”,以及谁知道,也许其中之一会有所帮助)。从您的问题中不清楚原始源图像是什么(另一个位图?),如果它是位图,为什么您不只是使用它而不是复制它(因为您似乎希望新位图与原始位图大小相同) .您是否考虑过简单地将新位图的分辨率设置为与原始位图相同?您的问题缺少许多重要细节。
-
您需要将两个图形对象设置为相同的 dpi 分辨率。选哪个!
-
用 GDI+ 绘图是一团糟,不要对任何事情感到惊讶。您是否尝试过需要 2 个矩形的
DrawImage重载?明确指定源和目标矩形,包括宽度和高度。另外,请忽略DrawImageUnscaled方法,您不会发现它们有用。 -
@AndersLindén 不要想太多。 stackoverflow 的当前状态是:不知道答案 -> downvote & close-vote。
标签: c# system.drawing