かを読み込み、変更のcolorspaceの画像をクライアントまで、フルのc#

StackOverflow https://stackoverflow.com/questions/1086472

  •  23-08-2019
  •  | 
  •  

質問

私は読み込みビットマップからのjpgファイルです。場合のイメージは24bit RGBので、そういった変換します。変換をすべきかなり速いです。の画像んの負荷は最大(9000*9000ピクセルの圧縮サイズ40-50MB)方法で実現できるのだろうか。

ちなみ:たくない用の外部ライブラリが可能です。知っているだけでオープンソースのユーティリティクラスの多い画像のタスクは嬉しいです。よろしくお願いします。

役に立ちましたか?

解決

Jpegできるような0xFF0xD8.それから、さまざまな分野にフォーマット:

  1. 分野識別子の2バイト
  2. フィールドの長さを除くの分野の識別子です。2バイトにまとめられます。
  3. 変数のデータです。

構文解析を通してあります。の識別子または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のみ以外のファイルで何をするかテストすることはできません。私はあなたがそれを試してみることをお勧めすることができます。

scroll top