图片宽度和高度在 visual Studio vb.net 中反转
Image width & height reversed in visual Studio vb.net
当我查看用数码相机拍摄的照片时,高度为4000,宽度为6016,如果我将相机旋转90度拍摄照片。高度为 6016,宽度为 4000。一切都很好,如果我使用文件资源管理器 (Windows 10) 检查图像的属性,它看起来对任何一张图片都是正确的。如果我在 Photoshop 或图片查看器中查看图片,就方向而言,一切看起来都是正确的。在我的应用程序中,我使用 exif 获取宽度和高度,它始终显示宽度为 6016,高度为 4000。如果我通过代码获取图像:
dim orgimage as bitmap = new bitmap("C:/image/picture.jpg")
宽度始终为 6016,高度始终为 4000,如果我通过 Photoshop 将 4000 更改为 3999,图像宽度和高度在我的应用程序中是正确的。这是 Visual Studios Visual Basic 的限制吗?
造成差异的原因是其他应用程序正在手动应用 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
如果您检查方向 属性 它可能会帮助 answering/helping 您在从相机输出读取照片时宽度和高度相同的问题。
请让我们知道您的发现。
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
当我查看用数码相机拍摄的照片时,高度为4000,宽度为6016,如果我将相机旋转90度拍摄照片。高度为 6016,宽度为 4000。一切都很好,如果我使用文件资源管理器 (Windows 10) 检查图像的属性,它看起来对任何一张图片都是正确的。如果我在 Photoshop 或图片查看器中查看图片,就方向而言,一切看起来都是正确的。在我的应用程序中,我使用 exif 获取宽度和高度,它始终显示宽度为 6016,高度为 4000。如果我通过代码获取图像:
dim orgimage as bitmap = new bitmap("C:/image/picture.jpg")
宽度始终为 6016,高度始终为 4000,如果我通过 Photoshop 将 4000 更改为 3999,图像宽度和高度在我的应用程序中是正确的。这是 Visual Studios Visual Basic 的限制吗?
造成差异的原因是其他应用程序正在手动应用 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
如果您检查方向 属性 它可能会帮助 answering/helping 您在从相机输出读取照片时宽度和高度相同的问题。 请让我们知道您的发现。
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