完全なファイル処理を行わずに画像のサイズを取得します
画像処理では、多くの場合、さらに処理する前に画像のサイズを決定する必要があります。ただし、画像の寸法を取得するには、通常、画像全体をメモリにロードする必要があります。
メモリ リソースが重要なシナリオでは、より効率的なアプローチが必要です。この記事では、ファイル全体を読み取らずに、標準クラス ライブラリを使用するだけで画像の寸法を取得する方法を検討します。
画像ヘッダー情報をデコードします
画像形式は、ヘッダー情報に重要な情報をエンコードします。これらのヘッダーを解析することで、ファイル全体を消費することなくディメンションを抽出できます。画像形式が異なれば、使用するヘッダー情報も異なり、それぞれ独自の構造を持ちます。たとえば、JPEG ヘッダーには一連のタグが含まれていますが、PNG ヘッダーにはリトル エンディアンの整数が使用されます。
実装方法
まず、ヘッダーの「マジック ビット」を、対応するヘッダーを解析する関数にマップする辞書 (imageFormatDecoders) を作成します。これらの関数は、ストリームから幅と高さの情報を抽出します。
private static Dictionary<byte[], Func<BinaryReader, Size>> imageFormatDecoders = new Dictionary<byte[], Func<BinaryReader, Size>>() { { new byte[]{ 0x42, 0x4D }, DecodeBitmap}, { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 }, DecodeGif }, { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, DecodeGif }, { new byte[]{ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }, DecodePng }, { new byte[]{ 0xff, 0xd8 }, DecodeJfif }, };
画像の寸法を取得するには、BinaryReader オブジェクトを作成し、GetDimensions メソッドを呼び出します。このメソッドはヘッダー マジック ビットを反復処理し、imageFormatDecoders ディクショナリ内のキーと比較し、一致するものが見つかった場合は、サイズ抽出を適切な関数に委譲します。
public static Size GetDimensions(string path) { using (BinaryReader binaryReader = new BinaryReader(File.OpenRead(path))) { try { return GetDimensions(binaryReader); } catch (ArgumentException e) { if (e.Message.StartsWith(errorMessage)) { throw new ArgumentException(errorMessage, "path", e); } else { throw e; } } } }
使用例
ライブラリをプロジェクトに統合した後、画像の寸法を取得するのは簡単です:
string imagePath = "/path_to_image/image.png"; Size dimensions = ImageHelper.GetDimensions(imagePath);
概要
このソリューションは、利用可能な画像形式デコーダーを利用し、さまざまな画像ファイル タイプで動作します。これは、プラットフォームに依存しない画像サイズの取得方法を提供します。これは、リソースが限られた環境で特に価値があります。
以上がファイル全体をロードせずに画像のサイズを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、C標準テンプレートライブラリ(STL)について説明し、そのコアコンポーネント(コンテナ、イテレーター、アルゴリズム、およびファンクター)に焦点を当てています。 これらが一般的なプログラミングを有効にし、コード効率を向上させ、読みやすさを改善する方法を詳述しています。

この記事では、cの効率的なSTLアルゴリズムの使用について詳しく説明しています。 データ構造の選択(ベクトル対リスト)、アルゴリズムの複雑さ分析(STD :: STD :: STD :: PARTIAL_SORTなど)、イテレーターの使用、および並列実行を強調しています。 のような一般的な落とし穴

この記事では、Cでの効果的な例外処理、トライ、キャッチ、スローメカニックをカバーしています。 RAIIなどのベストプラクティス、不必要なキャッチブロックを避け、ログの例外をロギングすることを強調しています。 この記事では、パフォーマンスについても説明しています

この記事では、不必要なコピーを回避することにより、パフォーマンスを向上させるために、CのMove Semanticsを使用することについて説明します。 STD :: MOVEを使用して、移動コンストラクターと割り当てオペレーターの実装をカバーし、効果的なAPPLの重要なシナリオと落とし穴を識別します

C 20の範囲は、表現力、複合性、効率を伴うデータ操作を強化します。複雑な変換を簡素化し、既存のコードベースに統合して、パフォーマンスと保守性を向上させます。

この記事では、Cでの動的発送、そのパフォーマンスコスト、および最適化戦略について説明します。動的ディスパッチがパフォーマンスに影響を与え、静的ディスパッチと比較するシナリオを強調し、パフォーマンスとパフォーマンスのトレードオフを強調します

記事では、移動セマンティクス、完璧な転送、リソース管理のためのcでのr値参照の効果的な使用について説明し、ベストプラクティスとパフォーマンスの改善を強調しています。(159文字)

Cメモリ管理は、新しい、削除、およびスマートポインターを使用します。この記事では、マニュアルと自動化された管理と、スマートポインターがメモリリークを防ぐ方法について説明します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック



