Автоповорот изображения в картинке - PullRequest
2 голосов
/ 20 ноября 2010

Мой проект имеет элемент управления Picturebox для загрузки изображений, он работает нормально.

Однако некоторые вертикальные изображения jpg отображаются горизонтально в Проводнике Windows, а также в моем элементе управления picturebox - тот же файл, открытый с помощью редакторов, таких как Photoshop, показывает вертикальную ориентацию.

Как заставить изображение отображаться с правильной ориентацией в элементе управления Picturebox?

Ответы [ 2 ]

3 голосов
/ 20 ноября 2010

Вам необходимо изучить изображение и извлечь информацию об ориентации из тегов exif.

Первое, что вам нужно сделать, это получить Exif Reader. Например, в VB.NET написано Code Project .

Если вы загрузите файл в Image, вы сможете прочитать свойства EXIF ​​из PropertyItems (как демонстрирует этот код C #):

using (Image image = Image.FromFile(imageName))
{
    // Non property item properties
    this.FileName = imageName;
    PixelFormat = image.PixelFormat;
    this.Width = image.Size.Width;
    this.Height = image.Size.Height;

    foreach (PropertyItem pi in image.PropertyItems)
    {
        EXIFPropertyItem exifpi = new EXIFPropertyItem(pi);
        this.propertyItems.Add(exifpi);
    }
}

Где EXIFPropertyItem - это класс, который преобразует PropertyItem. PropertyItem Id - это код EXIF ​​(ориентация 0x0112).

Затем найдите свойство Orientation и прочитайте его значение. Значения 5, 6, 7 и 8 предназначены для портретных (вертикальных) изображений, например, поворот 6 на 90, поворот 8 на -90.

Получив ориентацию, вы можете вызвать соответствующее преобразование вращения, чтобы отобразить изображение в правильной ориентации.

1 голос
/ 20 ноября 2010

Когда вы отображаете изображение в графическом окне, оно будет отображаться в исходной ориентации. Некоторые приложения для редактирования изображений могут определять правильную ориентацию ваших изображений и автоматически поворачивать их, но это будет довольно сложный алгоритм для реализации.

Тем не менее, вручную повернуть изображение, отображаемое в графическом окне, почти тривиально. Просто используйте метод System.Drawing.Image.RotateFlip , предоставленный .NET Framework, указав направление , которое вы хотите повернуть. Например, требуется только одна строка кода:

myPictureBox.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)

Вы также можете сделать это попиксельно, что может быть быстрее, условно говоря, но я сомневаюсь, что оно того стоит, если вы поворачиваете только одно изображение за раз.

...