- PR -

[C#] BitmapクラスのPixelFormatから1pixel当たりのbyte数を得る方法は?

投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-09-27 20:47
下記のように全ての場合の答えを直接記述する方法もありますが、
直接値を記述せず、既に用意されているプロパティやメソッドの
組み合わせから算出する方法はありますか?

直接記述する方法
public static int GetPixelSize(PixelFormat pixelFormat)
{
int ans;
switch(pixelFormat)
{
case PixelFormat.Format8bppIndexed;
ans = 1;
break;
case PixelFormat.Format24bppRgb;
ans = 3;
case PixelFormat.Format32bppArgb;
ans = 4;
// 続く
//
// PixelFormat列挙体全部についてcase文を作成する
default:
ans = -1;
}
return ans;
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-27 21:10
引用:

ひろしさんの書き込み (2006-09-27 20:47) より:

下記のように全ての場合の答えを直接記述する方法もありますが、直接値を記述せず、既に用意されているプロパティやメソッドの組み合わせから算出する方法はありますか?


PixelFormat 自体が 'それ' にあたるので、何を所望しているのかわからないです。

列挙体の 'メンバに定義されている実際の数値' という意味であれば、問題なく取得できます。
こちらの会議室で過去に回答した記憶があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-09-27 21:39
Image クラスにメソッドが用意されてます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-27 22:55
う、件名読んでいなかった... orz

# というより、本文より件名の方が明快...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-09-28 10:23
言葉足らずですみませんでした。

列挙体の実際の数値では無く、
1画素が実際に占有するメモリ上のbyte数を算出することを意図しています。
例えばFormat8bppIndexedのBitmapであれば、
BitmapDataの画素情報は1byteで構成されているはずです。
同様に
Format24bppRgbであれば、RGBで3byte、
Format32bppArgbであれば、ARGBテで4byte
で構成されていることになります。
PixelFormatを与えると、上に示した例で言うところの1byte/3byte/4byteに
相当する値を返す方法が知りたいのです。

よろしくお願いします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-28 10:26
引用:

Hongliangさんの書き込み (2006-09-27 21:39) より:
Image クラスにメソッドが用意されてます。


って書いてあるんだけどねぇ。
http://msdn2.microsoft.com/ja-jp/library/system.drawing.image_methods.aspx
_________________
質問する前にググレカス
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-09-28 10:40
こんにちは。

…っと書こうと思ったらぶさいくろうさんがすでにコメントされていますねぇ。

せっかくなので、私も少しヒント。
そのもののメソッドが用意されているということで調べてみたところ、確かにその
ようなメソッドが見つかったわけで、そこにはこういう説明が書いてありました。

引用:

指定したピクセル形式の色深度 (1 ピクセルあたりのビットの数) を返します。


あとはビットの数をバイトの数に変換してあげればおわり名古屋のマウンテンな
のではないでしょうか。

ひろしさんのようなコーディングもアリだとは思いますが(今回みたいに必ずしも
ピタリなメソッドが用意されているとは限らないし)そのときでも case を連ねる
よりは、最初に Hashtable に入れておいてそこから取り出す方法を選ぶと思
いますね。前回の質問で「速度アップのため」と書いてありましたし。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
末記入
常連さん
会議室デビュー日: 2006/09/05
投稿数: 23
投稿日時: 2006-09-28 10:57
唐突に出てくるマウンテンにいちごスパ吹いた

スキルアップ/キャリアアップ(JOB@IT)