2016-10-26 2 views
0

Когда я просматриваю фотографию, сделанную с помощью цифровой камеры, высота 4000, а ширина 6016, если я делаю снимок, поворачивая камеру на 90 градусов. высота 6016, а ширина - 4000. Все хорошо, если я исследую свойства изображения с помощью проводника файлов (Windows 10), он выглядит правильно для любого изображения. Если я просматриваю изображение в Photoshop или просмотрщике изображений, все выглядит корректно до ориентации. В моем приложении я использую, чтобы получить EXIF ​​ширину и высоту он всегда показывает ширину, 6016 и высоте, 4000. если я получить изображение с помощью кода:Ширина и высота изображения в визуальной студии vb.net

dim orgimage as bitmap = new bitmap("C:/image/picture.jpg") 

ширина всегда 6016 и высота всегда 4000, если я изменю 4000 до 3999 через Photoshop, ширина и высота изображения верны в моем приложении. Является ли это ограничением Visual Studios Visual Basic?

ответ

1

Причина разницы в том, что другие приложения вручную применяют исправление для Exif.Image.Orientation (тег 274).

Просто проверьте этот тег и соответствующим образом поверните растровое изображение.

Public Function OrientateImage(img As Image) As Boolean 
    Const EXIF_ORIENTATION = 274 
    Dim orientationTag = img.PropertyItems.FirstOrDefault(Function(x) x.Id = EXIF_ORIENTATION) 
    If orientationTag IsNot Nothing Then 
     Dim orientation As Short = BitConverter.ToInt16(orientationTag.Value, 0) 
     Select Case orientation 
      Case 3 
       img.RotateFlip(RotateFlipType.Rotate180FlipNone) 
      Case 6 
       img.RotateFlip(RotateFlipType.Rotate90FlipNone) 
      Case 8 
       img.RotateFlip(RotateFlipType.Rotate270FlipNone) 
      Case Else 
       Return False 
     End Select 
    End If 
    Return True 
End Function 
+0

Хорошая функция, а не проверка ориентации была моя проблема, функция работает идеально. –

+0

Нет проблем. Если это разрешило вашу проблему, пожалуйста, отметьте ответ как принятый. – FloatingKiwi

0

Если проверить свойство ориентации может помочь ответить/помочь вашей проблемы с шириной и высотой будучи же при чтении фото с выходом камеры. Пожалуйста, сообщите нам ваши выводы.

Dim orgimage As bitmap = New Bitmap("C:/image/picture.jpg", True) 
Dim otherImage As bitmap = New Bitmap("C:/image/picture2.jpg", True) 
'Orientation 
Dim exifprop As Integer = orgimage.GetPropertyItem(274).Value(0) 
Dim exifprop2 As Integer = otherImage.GetPropertyItem(274).Value(0) 


'1 = Horizontal (normal) 
'2 = Mirror horizontal 
'3 = Rotate 180 
'4 = Mirror vertical 
'5 = Mirror horizontal and rotate 270 CW 
'6 = Rotate 90 CW 
'7 = Mirror horizontal and rotate 90 CW 
'8 = Rotate 270 CW 

EXIF tags, PropertyItem.Id 274