私のプロジェクトには、画像をロードするための画像ボックスコントロールがあり、正常に機能しています。
ただし、一部の垂直方向のjpg画像は、Windowsエクスプローラーと私の画像ボックスコントロールに水平方向に表示されます。Photoshopなどのエディターを使用して開いた同じファイルは垂直方向を示します。
ピクチャーボックスコントロールで正しい向きで画像を表示するにはどうすればよいですか?
私のプロジェクトには、画像をロードするための画像ボックスコントロールがあり、正常に機能しています。
ただし、一部の垂直方向のjpg画像は、Windowsエクスプローラーと私の画像ボックスコントロールに水平方向に表示されます。Photoshopなどのエディターを使用して開いた同じファイルは垂直方向を示します。
ピクチャーボックスコントロールで正しい向きで画像を表示するにはどうすればよいですか?
画像を調べて、exif タグから方向情報を抽出する必要があります。
最初に行う必要があるのは、exif リーダーを取得することです。たとえば、VB.NET on Code Projectで書かれたものがあります。
ファイルを にロードすると、 (この C# コードが示すように)Image
から EXIF プロパティを読み取ることができます。PropertyItems
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
。はEXIF コードPropertyItem
ですId
(向きは0x0112
です)。
次に、Orientation プロパティを探して、その値を読み取ります。値 5、6、7、および 8 はポートレート (垂直) 画像用です。たとえば、6 は 90 度回転、8 は -90 度回転です。
向きを取得したら、適切な回転変換を呼び出して、画像を正しい向きで表示できます。
画像ボックスに画像を表示すると、元の向きで表示されます。特定の画像編集アプリケーションは、画像の適切な向きを検出して自動的に回転させることができますが、これを実装するのはかなり難しいアルゴリズムです。
ただし、画像ボックスに表示された画像を手動で回転するのはほとんど簡単です。.NET Framework が提供するSystem.Drawing.Image.RotateFlip
メソッドを使用して、回転させたい方向を指定するだけです。たとえば、必要なコードは 1 行だけです。
myPictureBox.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)
ピクセルごとに行うこともできますが、これは比較的高速であることが判明する可能性がありますが、一度に 1 つの画像のみを回転させる場合は、それだけの価値があるとは思えません。