2010-11-20 72 views
2

我的项目有一个用于加载图片的图片框控件,它工作正常。自动旋转图片框中的图片

但是,某些垂直jpg图片在Windows资源管理器中水平显示,并且也在我的图片框控件中 - 使用Photoshop等编辑器打开的同一文件显示垂直方向。

如何让图片在图片框控件中显示正确的方向?

回答

3

您需要检查图像并从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类。 PropertyItemId是EXIF代码(方向是0x0112)。

然后查找Orientation属性并读取它的值。值5,6,7和8用于纵向(垂直)图像,6是旋转90和8,例如旋转-90。

一旦你有了方向,你就可以调用适当的旋转变换来以正确的方向显示图像。

+0

嗨ChrisF,Cody Gray谢谢你的大力帮助..我只是下载Exif Library类明天我会检查一下,然后张贴在这里,再次感谢你的大力帮助 – 2010-11-20 17:26:11

1

当您在图片框中显示图片时,图片将以其原始方向显示。某些图像编辑应用程序能够检测图像的正确方向并自动旋转它们,但这是一个相当困难的实现算法。

但是,它几乎微不足道手动旋转图片框中显示的图像。只需使用由.NET Framework提供的System.Drawing.Image.RotateFlip method,并指定要将其旋转的即可。例如,只有一行代码需要:

myPictureBox.Image.RotateFlip(RotateFlipType.Rotate180FlipNone) 

你也可以做到这一点逐像素,这可能变成是快,相对来说,但我怀疑,如果你只是它是值得的一次旋转一张图像。

+0

嗨ChrisF,Cody Gray谢谢你的大力帮助..我只是下载Exif图书馆课,明天我会检查它,然后在这里发布,再次感谢您的大力帮助 – 2010-11-20 17:24:07