3

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

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

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

4

2 回答 2

5

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

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

如果您将文件加载到 中,Image您将能够从以下位置读取 EXIF 属性PropertyItems(如此 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' PropertyItemsId是 EXIF 代码(方向是0x0112)。

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

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

于 2010-11-20T13:10:36.693 回答
1

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

但是,手动旋转图片框中显示的图像几乎是微不足道的。只需使用 .NET Framework 提供的System.Drawing.Image.RotateFlip方法,指定您希望它旋转的方向。例如,只需要一行代码:

myPictureBox.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)

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

于 2010-11-20T13:13:19.283 回答