C#winforms:graphics.DrawImage问题

时间:2010-04-21 09:48:51

标签: c# winforms gdi+

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

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

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

alt text http://img341.imageshack.us/img341/8796/63796391.png

程序正确剪切图像:

alt text http://img689.imageshack.us/img689/6459/69242903.png

然后,我加载了另一张图片427x640:

alt text http://img34.imageshack.us/img34/7950/56727000.png

然后,结果我看到图像没有正确切割。每个img.jpg文件都有适当的宽度和宽度。高度但绘制的图像太小: alt text http://img641.imageshack.us/img641/1977/25643796.png

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

  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);

解决问题:)感谢大家的帮助! :)

1 个答案:

答案 0 :(得分:3)

我试试: (编辑)的

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

看看它是否有所作为。

虽然它与你的问题无关:你忘记了.Dispose()有些东西,我不知道为什么你必须.Clone()图像。