Blit 像素从一个图像到位图而不缩放

Blit pixels from one image to bitmap without scaling

我正在使用

从文件创建图像
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 pixels/inch,位图的分辨率为 96 pixels/inch。

如何复制像素而不考虑像素/英寸?

我尝试了评论中的一个想法,使用采用 2 个矩形的 drawImage 形式。就像

var srcrect = new Rectangle(tileoffsetx, tileoffsety, tilewidth, tileheight);
var destrect = new Rectangle(destx, desty, tilewidth, tileheight);

g.DrawImage(img, destrect, srcrect, GraphicsUnit.Pixel);

成功了!