スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ブログランキング・にほんブログ村へ

--.--.-- | スポンサー広告

半透明処理

 すっかり週刊JNTrainと化してる当ブログです。
 JNTrain for Todayもまたちょこっといじってます。
 前々から試したかった、背景との透過処理。実装してみました。




今ん所、こんな感じに。
せっかくの透過処理なので透過処理がわかるよう、壁紙を換えてみた。
文字と背景画像がそのまま重なると見辛くなりますが、枠をもうけて透過させるとそうでもなくなりますね。
個人的にはいい感じです。


 メモリデバイスコンテキストを作成する際に描画先にBitmapをデバイスコンテキスト(以下DC)に割り付けるのですが、BitmapをDIBSectionに置き換えるだけでした。DIBSection作成時にピクセルデータへのアドレスを取得できるのでそのアドレス経由でピクセルデータにアクセスできるようになります。後は背景画像のピクセルデータ(RGB値)と枠画像のピクセルデータ(RGB値)をお好の割合で混ぜ混ぜするだけでOK。DC自体はBitBltやTextOutなどそのまま使用できるので、意外と簡単でしたね。

 毎回上記のような処理を行うとCPU負荷がとんでもないことになりそうですが、加工済みの背景画像を保存しておくのでこの処理は液晶の縦横を切り替えたときぐらいですし、今まで毎回描画していた枠系の部分を毎回描画しなくなったので、再描画時の負荷は返って減ったかも。


処理手順としては以下のような感じで

1.1.メモリDC(背景保持用)を作成(DIBSectionを使用)

1.2.メモリDC(背景保持用)へ背景画像を描画

1.3.メモリDC(枠描画用)を作成(DIBSectionを使用)

1.4.メモリDC(枠描画用)へ枠など透過処理を行う画像を描画

1.5.メモリDC(背景保持用)とメモリDC(枠描画用)を透過合成し、結果をメモリDC(背景保持用)へ

2.1.メモリDC(描画用)を作成(DIBSectionを使用)

2.2.メモリDC(描画用)へメモリDC(背景保持用)の内容をコピー(DIB同士なのでmemcpyでOK)

2.3.メモリDC(描画用)へ時刻表等の描画を行う

2.4.ウインドウのDCに対してメモリDC(描画用)の内容をコピー(BitBlt)

 基本的に2.1.~2.4.のみを繰り返すので増えた透過処理自体は背景の再構成が必要なときのみ。CPUが貧弱なMobileマシンでも安心です。
 今回変更したのは、DIBSectionへの置き換えと、1.3.~1.5.の処理を追加したのみですね。もともと画面のちらつき防止にメモリDC上で描画していたので、時刻表などの描画はいじらずに済みました。BitmapとDIBSectionの互換性のおかげです。

テーマ:プログラミング - ジャンル:コンピュータ

ブログランキング・にほんブログ村へ

2008.09.04 | Comments(0) | Trackback(0) | Mobile プログラミング

«  | HOME |  »

FC2Ad

07 | 2017/08 [GO]| 09
- - 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 26
27 28 29 30 31 - -

最近の記事一覧 カテゴリ一覧 コメント一覧 トラックバック一覧 プロフィール リンク一覧
[カテゴリ]
WEBコンサルティング・ホームページ制作のバンブーウエイブ

ブログ内検索

ブロとも申請フォーム

この人とブロともになる

カスタム検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。