2010年08月14日

DIBファイルの読み込み



DIBファイル(拡張子bmp)は、デバイス独立ビットマップDIB)の形で格納されおり、以下のような構造をしています。

  1. BITMAPFILEHEADER構造体
  2. BITMAPINFO構造体
  3. ピクセルデータ


続きを読む


posted by ひろし at 23:52| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

2010年08月16日

ビットマップリソースの読み込み



ビットマップリソース (リソースタイプ RT_BITMAP(2))は、デバイス独立ビットマップ(DIB形式)として格納されおり、以下のような構造をしています。

  1. BITMAPINFO構造体
  2. ピクセルデータ



続きを読む
posted by ひろし at 02:23| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

ランレングス圧縮されたピクセルデータの解凍



ランレングスデータは、以下の5種類の要素から構成されます。

  1. エンコードデータ
  2. 絶対モードデータ
  3. 行データの終わり
  4. イメージデータの終わり
  5. 相対位置に移動


続きを読む
posted by ひろし at 20:27| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

2010年08月17日

DIBファイルの書き込み



DIBデバイス独立ビットマップ)をファイルに書き込む場合は、以下のような流れになります。

  1. DIBハンドルからDIBSECTION構造体を取得し、必要な各値を算出する。
  2. BITMAPINFO構造体のサイズを算出する。
  3. BITMAPFILEHEADER構造体をファイルに書き込む。
  4. BITMAPINFOHEADER構造体をファイルに書き込む。
  5. カラーテーブルがあればファイルに書き込む。
  6. マスクビットフィールドがあればファイルに書き込む。
  7. 圧縮形式に従ってピクセルビットをファイルに書き込む。


続きを読む
posted by ひろし at 00:40| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

DIBのビット深度の変更



DIBビット深度の変更は以下のような流れになります。

  1. ビットマップハンドルからDIBSECTION構造体を取得し、幅と高さを算出します。
  2. BITMAPINFO構造体を作成する。
  3. 空のDIBを作成する。
  4. DIBビット深度を変換したピクセルビットを書き込む

続きを読む
posted by ひろし at 02:45| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

2010年08月20日

メディアンカット法による画像の減色



DIBのビット深度の変更」でのシステムパレットを使った減色処理では、使用できる色が固定されるため、どうしても不自然な色の画像になります。そこで今回はメディアンカット法を使った減色手法を紹介します。尚メディアンカット法での減色の手順は以下の通りです。

  1. 24ビットDIBRGBピクセルからYUVテーブルを作成する。
  2. メディアンカット法で色を分ける。
  3. 減色カラーテーブルを作成する。
  4. カラーテーブルYUV値をRGBに変換する。
  5. BITMAPINFO構造体を作成し、空のDIBを作成する。
  6. ピクセルデータDIBにコピーする。


続きを読む
posted by ひろし at 03:07| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

2010年08月21日

誤差分散法によるディザ合成



前回の「メディアンカット法による画像の減色」での減色処理ではどうしても色が少なくなるために、グラデーションが潰れて汚くなるのは避けられません。そこで画像に誤差分散法によるディザをかけることて、グラデーションをよりきれいに見えるようにします。

続きを読む
posted by ひろし at 01:20| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

2010年08月23日

ピクセルデータのランレングス圧縮



ピクセルデータランレングス圧縮は、以下のような流れになります。

  1. まずは絶対値モードとしてピクセルデータを読み込み、前のデータと比較して同値なら、取り込んだデータを絶対値モードとしてファイルに書き出してから、エンコードモードに切り替える。
  2. エンコードモードピクセルデータを読み込み、前のデータと比較して違いがあれば、取り込んだデータをエンコードモードとしてファイルにに書き出してから、絶対値モードに切り替える。
  3. どちらのモードも蓄えたピクセルデータの個数が255以上になったら、ファイルに書き出し絶対値モードに切り替える。
  4. 行末に達したら、蓄えたデータをファイルに書き出し、行末コード「0x00,0x00」を書き込む。
  5. 全部読み終わったら、終端コード「0x00,0x01」をファイルに書き込み終了する。

ランレングスデータの詳細については「ランレングス圧縮されたピクセルデータの解凍」をご参照ください。


続きを読む
posted by ひろし at 13:44| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする

2010年08月30日

透過DIB画像の表示



透過DIB画像の表示には以下の2種類の方法があります。

  1. マスク画像を用いる方法
    まず画像の四隅の色から透過色を求めてマスク画像を作成し、このマスク画像で背景画像を理論積(AND)で切り取ります。次にマスク画像を反転してから前景画像上でマスクする部分を理論積(AND)で切り取り、最後にマスク部分を切り取った前景画像理論和(OR)背景画像に貼り付けます。

  2. アルファブレンド32ビットDIBを用いる方法
    まず背景画像から表示する画像の部分のコピーと表示する画像のコピーを作成します。次に背景画像前景画像アルファブレンド演算ピクセルビット毎に合成データを算出し、前景画像に戻します。最後に合成した前景画像背景画像に貼り付けます。

続きを読む
posted by ひろし at 13:29| Comment(0) | DIBファイルフォーマット | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。