繁体   English   中英

C#Winforms:graphics.DrawImage问题

[英]C# winforms: graphics.DrawImage issue

我对Graphics.DrawImage方法有一个非常奇怪的问题。

我在Panel控件中具有PictureBox控件,并具有AllowScroll属性= true 程序根据用户选择的区域在小零件上剪切图像。

我加载图像300x547并选择区域(红色矩形):

替代文字

程序正确剪切图像:

替代文字

然后,我加载另一个图像427x640:

替代文字http://img34.imageshack.us/img34/7950/56727000.png

然后,结果看到图像没有正确剪切。 每个img.jpg文件的宽度和高度都正确,但是绘制的图像太小: 替代文字

这是代码段-保存用户选择的位图区域:

  Image OriginalIMG= (Image)((PictureBox)panel1.Controls["picBox"]).Image.Clone()
  Bitmap bmp = new Bitmap(selectedAreaRECT.Width, selectedAreaRECT.Height);
  Graphics g = Graphics.FromImage(bmp);

  g.DrawImage(OriginalIMG, 0,0, selectedAreaRECT, GraphicsUnit.Pixel);
  g.Save();
  g.Dispose();

  bmp.Save(AppDomain.CurrentDomain.BaseDirectory + @"\Temp\" + "img1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

如您所见,图像A和图像B中的img1.jpg的代码都是相同的。我试图解决该愚蠢问题的时间太长了,我不知道该问题的原因是什么。 我尝试了DrawImage方法的不同重载,但没有成功

编辑

解决! System.Drawing.Bitmap的dafault DPI值为= 96,如果我使用DPI!= 96打开图像,则会发生上述问题。 为了摆脱它,我需要使用SetResolution方法:

Bitmap result = new Bitmap(width, height);
result.SetResolution(OriginalIMG.HorizontalResolution, OriginalIMG.VerticalResolution);

解决了这个问题:)谢谢大家的帮助! :)

我会尝试:(编辑)

  g.DrawImage(
    OriginalIMG,
    new Rectangle( Point.Empty, bmp.Size ),
    selectedAreaRECT.X, selectedAreaRECT.Y,
    selectedAreaRECT.Width, selectedAreaRECT.Height, 
    GraphicsUnit.Pixel);

看看是否有所作为。

尽管这与您的问题无关:您忘记了对.Dispose()进行某些操作,但是我不确定为什么必须对图像进行.Clone()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM