C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: PixelFomat::Format48bppRgbについて


(過去ログ 52 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■29278 / inTopicNo.1)  PixelFomat::Format48bppRgbについて
  
□投稿者/ akt (18回)-(2008/12/07(Sun) 00:09:13)

分類:[C++/CLI] 

いつもお世話になっております。

C++/CLIでRGB各16ビットの画像を扱いたいと考えています。

System::Bitmapクラスのコンストラクタで、
Bitmap(width, height, Imaging::PixelFormat::Format48bppRgb)を指定することで、
RGB各16ビット(トータル48ビット)のメモリが確保されるのだろうと考えました。

そこで、
System::Bitmap^ bmp;

bmp = gcnew System::Drawing::Bitmap(width, height, Imaging::PixelFormat::Format48bppRgb);

Drawing::Color color;

color.FromArgb(1023, 1023, 1023);
bmp->SetPixel(0, 0, color);
color = bmp->GetPixel(0, 0);
というコードを実行したのですが、SetPixel()でRGB各要素が255以内でなければならないという
例外が発生しました。
Color構造体は255までしか扱えないようなことがヘルプにも書かれておりました。

どのような方法を取れば、255以上の値を扱えるか、何かアドバイスがあればお願い致します。

ちなみに、表示は8ビットで構わなく、内部計算を16ビットでハンドリングできればと考えています。

引用返信 編集キー/
■29280 / inTopicNo.2)  Re[1]: PixelFomat::Format48bppRgbについて
□投稿者/ 渋木宏明(ひどり) (978回)-(2008/12/07(Sun) 01:30:55)
渋木宏明(ひどり) さんの Web サイト
> どのような方法を取れば、255以上の値を扱えるか、何かアドバイスがあればお願い致します。

Bitmap クラスは Format8bppIndexed を扱うのにも難儀します。

Bitmap.LockBits() して、画像データを直接読み書きすることになるんじゃないかと思います。

> ちなみに、表示は8ビットで構わなく、内部計算を16ビットでハンドリングできればと考えています。

なら、計算しやすい形態(=int の配列とか)でデータを保持・演算して、Bitmap クラスは表示専用に使えばいいんじゃないでしょうか。

どうせ SetPixel(), GetPixel() は激遅だし。

あと、Format48bppRgb だと、ハードウェアによる色変換が期待できないような気がします。

ビデオカードは内部 32bit カラーのものが主流なので、Format48bppRgb で表示データを持つと、ちょっとした表示更新でも色変換が発生してパフォーマンス的に不利なような。

引用返信 編集キー/
■29284 / inTopicNo.3)  Re[2]: PixelFomat::Format48bppRgbについて
□投稿者/ Azulean (239回)-(2008/12/07(Sun) 07:54:21)
GDI+のLockBitsでは記載されていますが、48bpp以上のフォーマットでのLockはできません。
http://msdn.microsoft.com/en-us/library/ms536298.aspx

32bppを越えるPixelFormatを扱うのにはSystem.Drawing.Bitmapクラスを使うことができないと見ておいた方が良いでしょう。
引用返信 編集キー/
■29287 / inTopicNo.4)  Re[3]: PixelFomat::Format48bppRgbについて
□投稿者/ akt (20回)-(2008/12/07(Sun) 12:37:21)
No29284 (Azulean さん) に返信
> GDI+のLockBitsでは記載されていますが、48bpp以上のフォーマットでのLockはできません。
> http://msdn.microsoft.com/en-us/library/ms536298.aspx
>

渋木宏明(ひどり)さん、Azuleanさん、返信ありがとうございました。

現在、1画素48ビットのデータを自作クラスで管理して、表示用にのみBitmap型オブジェクトを24bitへ減色して、
という2重管理をしておりました。
だんだん2重管理が面倒になり、PixelFormatを調べたとき、Format48bppRgbを発見して、これが使えれば
48bitデータだけ管理して、.netが表示用に勝手に減色して表示してくれるかなと期待していました。

> 32bppを越えるPixelFormatを扱うのにはSystem.Drawing.Bitmapクラスを使うことができないと見ておいた方が良いでしょう。

ググってもあまり情報がなく、質問させて頂きましたが、どうもすぐには使えなそうなので、
現状の実装で行きたいと思います。

ありがとうございました。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -