かを読み込み、変更のcolorspaceの画像をクライアントまで、フルのc#
-
23-08-2019 - |
質問
私は読み込みビットマップからのjpgファイルです。場合のイメージは24bit RGBので、そういった変換します。変換をすべきかなり速いです。の画像んの負荷は最大(9000*9000ピクセルの圧縮サイズ40-50MB)方法で実現できるのだろうか。
ちなみ:たくない用の外部ライブラリが可能です。知っているだけでオープンソースのユーティリティクラスの多い画像のタスクは嬉しいです。よろしくお願いします。
解決
Jpegできるような0xFF0xD8.それから、さまざまな分野にフォーマット:
- 分野識別子の2バイト
- フィールドの長さを除くの分野の識別子です。2バイトにまとめられます。
- 変数のデータです。
構文解析を通してあります。の識別子または0xFF0xC0.これSOF0、高さ、幅、ビット深度など。0xFF0xC0することで二つのバイトの長さです。直後となるシングルバイトのビット深度は、通常は8.そしてさまざまなバイトの高さ、幅、単一のバイトのためのコンポーネントの数;これは通常1(グレイスケール)または3です。(カラー)
他のヒント
これは私が自分自身を試みたものではありませんが、私はあなたが開始と、画像のEXIF情報をacccessする必要があるかもしれないと思う。
写真でからEXIF情報にアクセスするにスコットHanselman氏のブログエントリをチェックしてください。
標準の.NET System.Drawing
名前空間は、あなたが必要なものをすべて持っている必要があります
しかし、それはおそらく、非常に効率的ではありません。それは(おそらくコピーを作成することにより)それを変換し、それを解凍してから、再圧縮をして保存し、RAMに全体をロードします。あなたが高いパフォーマンスを目指すならば、私はあなたがC / C ++ライブラリに見て、彼らのために、.NETラッパーを作成する必要があるかもしれません怖います。
私の知る限りではJPGは常に24 bppのです。変えることができる唯一のことは、それはむしろ、その後RGB CMY(K?)だということでしょう。その情報は、ヘッダに格納されます。残念ながら、私はビットマップにロードすると、自動的にそれを変換するかどうかをテストするためにCMYK画像を作成するための任意の手段を持っていません。
次の行は、ファイルをメモリに読み込みます。
Bitmap image = Image.FromFile(fileName);
image.PixelFormat
はあなたのイメージ形式を教えてくれます。しかし、私は、ファイルのロードが24bppのRGBのJPGのみ以外のファイルで何をするかテストすることはできません。私はあなたがそれを試してみることをお勧めすることができます。