我对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);
解决问题:)感谢大家的帮助! :)
答案 0 :(得分:3)
我试试: (编辑)的
g.DrawImage(
OriginalIMG,
new Rectangle( Point.Empty, bmp.Size ),
selectedAreaRECT.X, selectedAreaRECT.Y,
selectedAreaRECT.Width, selectedAreaRECT.Height,
GraphicsUnit.Pixel);
看看它是否有所作为。
虽然它与你的问题无关:你忘记了.Dispose()有些东西,我不知道为什么你必须.Clone()图像。