掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
グレースケールのJPEGをBitmapに変換するには? (ID:52728)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> u_char* m_pRedP; // 赤の要素のビットデータ > u_char* m_pGreenP; // 緑の要素のビットデータ > u_char* m_pBlueP; // 青の要素のビットデータ 例えば、この中身はどのようにして取得したデータですか? 下記のプログラムからR成分・G成分・B成分を取り出しました。 int ux, // 横ユニット位置 int uy ) // 縦ユニット位置 { int* yp = mCompP[0]; // Y int* up = mCompP[1]; // Cb int* vp = mCompP[2]; // Cr int numLine = uy * mVMax * 8; // ライン:縦ユニット数×ユニットライン数 int offsetV = numLine * mProperty.HSize; // 縦オフセット:ライン×1ラインドット数 int offsetH = ux * mHMax * 8; // 横オフセット:横ユニット数×ユニット内横ブロック数×ブロック内ドット数 int offset = offsetV + offsetH; // 総合オフセット u_char* rp = mRgbP[0] + offset; // 赤書き込み位置 u_char* gp = mRgbP[1] + offset; // 緑書き込み位置 u_char* bp = mRgbP[2] + offset; // 青書き込み位置 int endX = mHMax*8; // 横ループ終了ポイント int endY = mVMax*8; // 縦ループ終了ポイント for( int picY=0; picY<endY; picY++ ){ for( int picX=0; picX<endX; picX++ ){ if( picX + offsetH >= mProperty.HSize ){ // 付加ビットならば yp += endX - picX; // ソースアドレスを更新 up += endX - picX; vp += endX - picX; break; // 次のラインへ } int index = picY * mProperty.HSize + picX; // 書き込み位置 #ifdef GRAY gp[index] = bp[index] = rp[index] = ReviseValue( *yp++ ); #else double v = *yp + (*vp - 0x80) * 1.4020; rp[index] = ReviseValue( v ); // R v = *yp - (*up - 0x80) * 0.3441 - (*vp - 0x80) * 0.7139; gp[index] = ReviseValue( v ); // G v = *yp + (*up - 0x80) * 1.7718; bp[index] = ReviseValue( v ); // B yp++; vp++; up++; #endif } // picX } // picY ちょっと確認ですが、自分は ・jpeg -> bmp(dib) への変換をしたい ・カラー(グレースケールで無い)Jpegの変換はできている という認識をしていますが合っていますか? 上記解釈で合っています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.