У меня действительно странная проблема с методом Graphics.DrawImage.
У меня есть элемент управления PictureBox в элементе управления Panel с Свойство AllowScroll = true .
Программа разрезает изображение на мелкие детали в зависимости от выбранной пользователем области.
Я загружаю изображение 300x547 и выбираю область (красный прямоугольник):
альтернативный текст http://img341.imageshack.us/img341/8796/63796391.png
Программа правильно обрезает изображение:
альтернативный текст http://img689.imageshack.us/img689/6459/69242903.png
Затем я загружаю другое изображение 427x640:
альтернативный текст http://img34.imageshack.us/img34/7950/56727000.png
и затем, как результат, я вижу, что изображение не обрезается должным образом. Каждый файл img.jpg имеет правильную ширину и высоту, но нарисованное изображение слишком маленькое:
альтернативный текст 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);
Как видите, код для img1.jpg одинаковый с изображения A и с изображения B.
Я пытаюсь решить эту глупую проблему слишком долго, я не знаю, в чем причина этой проблемы. Я пробовал разные перегрузки метода DrawImage, но безуспешно
EDIT
Решено! значение DPI по умолчанию для System.Drawing.Bitmap = 96, если я открываю изображение с DPI! = 96, возникает описанная выше проблема. Чтобы избавиться от этого, мне нужно было использовать метод SetResolution:
Bitmap result = new Bitmap(width, height);
result.SetResolution(OriginalIMG.HorizontalResolution, OriginalIMG.VerticalResolution);
это решает проблему :) Спасибо всем за помощь! :)