图像宽度&在Visual Studio vb.net中反转高度

时间:2016-10-26 23:55:58

标签: vb.net visual-studio image-size

当我查看用数码相机拍摄的照片时,如果我通过将相机旋转90度拍摄照片,则高度为4000,宽度为6016。高度是6016,宽度是4000.一切都很好,如果我用文件浏览器(Windows 10)检查图像的属性,它看起来对任一图片都是正确的。如果我在Photoshop或图片查看器中查看图片,就方向而言看起来都是正确的。在我的应用程序中,我使用exif获取宽度和高度,它总是显示宽度为6016,高度为4000.如果我通过代码获得图像:

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

宽度始终为6016,高度始终为4000,如果我通过Photoshop将4000更改为3999,图像宽度和高度在我的应用程序中是正确的。这是Visual Studio Visual Basic的限制吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 tagsPropertyItem.Id 274