- 締切済み
CImage GetBitsメソッドについて
はじめまして質問させて頂きたい事がございます。 VC++ 2005 MFCを使用しております。 ビットマップ画像からCImageを作成し、 GetBits()を使用してポインタから直接RGB値を取得したと考えております。 MSDNには ------------------------------------------ 取得したポインタと GetPitch の戻り値を使用すると、 イメージ内のピクセルを個別に指定して変更できます。 ------------------------------------------ と書いてありますが、よく分かりませんでした。 ためしに4*4ピクセルのビットマップ画像をLoadして 以下のように実装してみました。 ---------------------------------------------- //ピッチ取得 int pit = m_image.GetPitch(); //バイト数取得 int byt = m_image.GetBPP(); //ポインタ取得 int* rgb; rgb = (int*)m_image.GetBits(); CString str; str.Format(_T("%d, "), GetRValue(rgb[0])); ::TRACE(str); str.Format(_T("%d, "), GetGValue(rgb[0])); ::TRACE(str); str.Format(_T("%d, "), GetBValue(rgb[0])); ::TRACE(str); ---------------------------------------------- ピッチがマイナスで戻ってきたので 左下隅を起点とする逆方向 (下から上) にrgb[0]からはいってると 解釈したのですが、正常な値(画像ソフトの値)が取得できませんでした。 どなたかお詳しい方がおりましたら ご教授お願いいたします。 お手数ではございますが サンプルコードを記載していただけるとありがたいです。 以上になります。 ご回答よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
お礼
redfox63 様 ご回答ありがとうございます。 GetBitsが21のポインタを返してきて 21以前の値が前方の領域に確保から仕方ないのですね。 >末尾を指示して前方の領域を確保なんてのは聞いたことないですからね CImage GetBitsの仕様として解釈して宜しいということですよね。 >逆の考え方をすれば nPitchがマイナスなら pStartを先に >逆算しておいて x,yを加算していく(nPitchの符号も反転させて) >といったことも可能ですよね >ただ2度手間になりますけど ・・・ これも考えました。確かに2度手間ですね。 管理しやすいですけど。 ------------- 1, 2, 3, 4, 5 6, 7, 8, 9, 10 11,12,13,14,15 16,17,18,19,20 21,22,23,24,25 --------------