C# winforms: графика. Проблема DrawImage

У меня есть действительно странная проблема с Графикой. Метод DrawImage.

Я имею контроль PictureBox в управлении Панелью со свойством AllowScroll = верный. Программа сокращает изображение на мелких деталях, базирующихся на области, выбранной пользователем.

Я загружаю изображение 300x547 и выбираю область (красный прямоугольник):

alt text

программа правильно сокращает изображение:

alt text

затем, я загружаю другое изображение 427x640:

сопроводительный текст http://img34.imageshack.us/img34/7950/56727000.png

и затем, как результат я вижу, что изображение не сокращается правильно. Каждый файл img.jpg имеет правильно ширину и высоту, но оттянутое изображение является слишком маленьким: alt text

вот фрагмент кода - он сохраняет растровую область, выбранную пользователем:

  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 без успеха

Править

Разрешенный! значение DPI по умолчанию Системы. Рисование. Битовый массив = 96, если я открываю изображение с DPI! = 96 затем проблема, описанная выше, происходит. Для избавлений от него я должен был использовать метод SetResolution:

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

это разрешает проблему :) Спасибо за всех для справки!:)

8
задан Glorfindel 23 July 2019 в 21:11
поделиться

1 ответ

Я бы попробовал: (отредактировано)

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

, чтобы увидеть, имеет ли это значение.

Хотя это не имеет ничего общего с вашей проблемой: вы забываете о некоторых вещах .Dispose (), и я не уверен, почему вы должны использовать .Clone () изображение.

3
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: