[英]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.