Member 11266633 Ответов: 1

Обрезка изображений не работает с tiff-файлами


У меня есть изображение, которое я хочу обрезать как полигон. Со всеми изображениями на моем компьютере все работает правильно, но у меня есть файлы tiff. Если я попробую обрезать это-в результате я увижу растянутый кусок файла.

var img = (Bitmap)(GetPageFromTiff(openFileDialog.FileName));

img = CropImage(img);
pictureBox.BackgroundImage = img;
pictureBox.BackgroundImageLayout = ImageLayout.Zoom;
pictureBox.Image = img;

private Image GetPage(string file) {
  Bitmap bitmap = (Bitmap) Image.FromFile(file);
  bitmap.SelectActiveFrame(FrameDimension.Page, 0);
  MemoryStream byteStream = new MemoryStream();
  bitmap.Save(byteStream, ImageFormat.Tiff);
  return Image.FromStream(byteStream);
}

public Bitmap CropImage(Image img) {

 GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
 var points = new Point[] {
  new Point(85, 1111), new Point(934, 1111), new Point(934, 952), new Point(1642, 952),
   new Point(1642, 2000), new Point(85, 2000), new Point(85, 1111)
 };
 GraphicsPath gp = new GraphicsPath();
 gp.AddPolygon(points.ToArray());

 Bitmap bmp1 = new Bitmap(2220, 2220);

 using(Graphics G = Graphics.FromImage(bmp1)) {
  G.Clip = new System.Drawing.Region(gp);
  G.DrawImage(img, 0, 0);
  G.Dispose();


 }
 pictureBox.Image = bmp1;
 return bmp1;
}

https://snag.gy/UI3ZiA.jpg[^]

Что я уже пробовал:

Я пытаюсь сохранить tiff как png, bmp и другие. Все так же. Tiff файл для скачиванияhttp://www.filedropper.com/165173z[^]

Bernhard Hiller

Как вы загружаете эти файлы tiff? Покажите нам соответствующий код.

1 Ответов

Рейтинг:
2

OriginalGriff

Если я возьму код, который вы скопировали из Stack Overflow: http://stackoverflow.com/questions/30954503/how-to-crop-a-polygonal-area-from-an-image-in-a-winform-picturebox[^]
И слегка подправьте его, чтобы он соответствовал тестовому изображению:

Point[] points = new Point[] { new Point(60, 10), new Point(100, 60), new Point(60, 110), new Point(10, 60), new Point(60, 10) };
GraphicsPath gp = new GraphicsPath();
gp.AddPolygon(points.ToArray());

Bitmap bmp1 = new Bitmap(120, 120);

using (Bitmap bmp0 = (Bitmap)Bitmap.FromFile(imagePath))
    {
    using (Graphics G = Graphics.FromImage(bmp1))
        {
        G.Clip = new System.Drawing.Region(gp);
        G.DrawImage(bmp0, 0, 0);
        bmp1.Save(imageOutPath, ImageFormat.Jpeg);
        }
    }

Это прекрасно работает - я получаю Алмаз изображения внутри черного изображения.
Глядя на ваш регион, он не вписывается в ваше выходное изображение...что может объяснить проблему...


Member 11266633

Ваш код и мой код работают правильно, но он не работает с этим tiff-файлом
http://www.filedropper.com/165173z

OriginalGriff

Если вы думаете, что я иду на неизвестный сайт, чтобы загрузить неизвестный файл от совершенно незнакомого человека, вы ошибаетесь!
Начните с проверки правильности файла: считайте его в изображение и отобразите в PictureBox. Это выглядит правильно? Какого он размера? Если вы сохраните это как JPG, что произойдет? Работает ли это, если вы загружаете версию JPG? И так далее...

Member 11266633

его TIFF-файл - в чем беда? дайте мне файлообменник - я его загружу.

Member 11266633

http://stackoverflow.com/questions/39904362/issue-with-picturebox-control

Member 11266633

Он работает с picturebox, выглядит правильно, но после операции обрезки-не работает

OriginalGriff

А что значит "не работает" означает? Ваш компьютер контактирует с инопланетянами? Картина становится LOLCatz? Форма искажена?
Что произойдет, если вы сохраните его в формате JPG и попробуете сделать это?

Member 11266633

извините за мой плохой английский. Я стараюсь сохранить его как jpeg, png и другие. Результат тот же. Я улучшаю вопрос и добавляю экран.