【问题标题】:Why do some images get stretched when drawing them with e.Graphics.DrawImage为什么使用 e.Graphics.DrawImage 绘制某些图像时会被拉伸
【发布时间】:2019-10-15 21:03:34
【问题描述】:

我想以 c# 形式创建一个旋转轮子,但有些图片无缘无故地被拉伸了。

我尝试查看文件属性,因为有些图像被拉伸了,有些还不错,但我什么都没找到。

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            angle = (int)(angle * szybkosc);
            //
            //kolo1
            Bitmap bit_kolo1 = new Bitmap(kolo1.Width, kolo1.Height);
            Graphics gkolo1 = Graphics.FromImage(bit_kolo1);
            gkolo1.TranslateTransform(bit_kolo1.Width / 2, bit_kolo1.Height / 2);
            gkolo1.RotateTransform(angle);
            gkolo1.TranslateTransform(-bit_kolo1.Width / 2, -bit_kolo1.Height / 2);
            gkolo1.InterpolationMode = InterpolationMode.HighQualityBicubic;

            gkolo1.DrawImage(kolo1, 0,0);

编辑 1:我注意到这只发生在我之前使用 gimp 裁剪的图片上。还是不知道怎么解决

【问题讨论】:

  • 你需要控制图片的dpi值!图形默认为 srceen dpi,但文件可以带有任何 dpi 值。 DrawImage 将在他们身上;如果你不想这样,你可以在绘图之前更改它们。见here
  • @TaW 似乎不起作用
  • 不起作用 不是有用的评论。显示您尝试过的代码!各种文件的dpi值是多少?

标签: c# image bitmap


【解决方案1】:

使用Graphics.DrawImage 时,请务必指定确切的尺寸,因为在某些情况下,图像会被拉伸/缩小:

gkolo1.DrawImage(kolo1, 0, 0, kolo1.Width, kolo1.Height); // or whatever desired size

如果您不指定大小,则默认行为会考虑 HorizontalResolutionVerticalResolution 属性,它们是 DPI 中的任意值,并且似乎 Gimp 在您裁剪图像时不会准确调整这些值,因此它将是拉伸(可能是原始尺寸?)。

【讨论】:

  • 设置正确的 dpi 值将避免拉伸带来的质量损失,如果尺寸相同就足够了,所以如果尺寸实际上是错误的,我只会将此作为最后的手段。但如果是,他在裁剪图像时犯了一个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多