自动旋转图片框中的图片

时间:2010-11-20 13:04:06

标签: vb.net image picturebox image-rotation

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

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

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

2 个答案:

答案 0 :(得分:3)

您需要检查图像并从exif标记中提取方向信息。

您需要做的第一件事就是找一个exif阅读器。例如,在Code Project上用VB.NET编写了一个。

如果您将文件加载到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的{​​{1}}是EXIF代码(方向为Id)。

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

获得方向后,您可以调用相应的旋转变换以正确的方向显示图像。

答案 1 :(得分:1)

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

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

myPictureBox.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)

你也可以逐个像素地进行,相对而言,这可能会更快,但我怀疑如果你一次只旋转一个图像,这是值得的。