我的项目有一个用于加载图片的图片框控件,它工作正常。自动旋转图片框中的图片
但是,某些垂直jpg图片在Windows资源管理器中水平显示,并且也在我的图片框控件中 - 使用Photoshop等编辑器打开的同一文件显示垂直方向。
如何让图片在图片框控件中显示正确的方向?
我的项目有一个用于加载图片的图片框控件,它工作正常。自动旋转图片框中的图片
但是,某些垂直jpg图片在Windows资源管理器中水平显示,并且也在我的图片框控件中 - 使用Photoshop等编辑器打开的同一文件显示垂直方向。
如何让图片在图片框控件中显示正确的方向?
您需要检查图像并从exif标签中提取方向信息。
你需要做的第一件事就是获得一个exif阅读器。例如,有一个用VB.NET编写的Code Project。
如果您将文件加载到一个Image
你将能够读取来自PropertyItems
的EXIF属性(如本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。
一旦你有了方向,你就可以调用适当的旋转变换来以正确的方向显示图像。
当您在图片框中显示图片时,图片将以其原始方向显示。某些图像编辑应用程序能够检测图像的正确方向并自动旋转它们,但这是一个相当困难的实现算法。
但是,它几乎微不足道手动旋转图片框中显示的图像。只需使用由.NET Framework提供的System.Drawing.Image.RotateFlip
method,并指定要将其旋转的即可。例如,只有一行代码需要:
myPictureBox.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)
你也可以做到这一点逐像素,这可能变成是快,相对来说,但我怀疑,如果你只是它是值得的一次旋转一张图像。
嗨ChrisF,Cody Gray谢谢你的大力帮助..我只是下载Exif图书馆课,明天我会检查它,然后在这里发布,再次感谢您的大力帮助 – 2010-11-20 17:24:07
嗨ChrisF,Cody Gray谢谢你的大力帮助..我只是下载Exif Library类明天我会检查一下,然后张贴在这里,再次感谢你的大力帮助 – 2010-11-20 17:26:11