bitmapの色をすべてある割合に落として表示したい – プログラミング – Home

bitmapの色をすべてある割合に落と...
 
通知
すべてクリア

bitmapの色をすべてある割合に落として表示したい


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 21年前
投稿: 201
Topic starter  

OS XP VC++ 6.0
ビットマップを読み込んで、
読み込んだ1枚の画像の色を、すべてある一定の割り合い、減らして表示させたい。
一ピクセル、一ピクセル処理をするのは、簡単ですが、
それでは、遅くなるので、ないかよい関数は、ないでしょうか?
たとえば、すべて白のビットマップファイルを読み込んで、
灰色で表示するようなことをしたいのですが、どうでしょうか?


引用解決済
トピックタグ
reshia
 reshia
(@reshia)
ゲスト
結合: 21年前
投稿: 117
 

>遅くなるので
書き換えながら表示するわけではないと思いますし
たいして遅くないと思いますが・・


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

DDB ではなく DIB か DIBSection かを使えば、早いと感じられるかもしれません


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 21年前
投稿: 201
Topic starter  

reshiaさん、 島さんレスありがとうございます。
フル画面計算しているので、かなり遅いですねぇ・・・
ロードしだしてから、5秒程度は、かかってます。
DIBしらべてみます。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

GetPixelとSetPixelを使っているなら多分遅いと思います。
GDIはオーバヘッドがでかいし。
ただ、処理するならメモリDC上でやらないとかなり足を引っ張りそう。

DIBSection等で画素子データの先頭ポインタを得てアドレス計算をして
取り出して演算するような事をすれば、多少は早くなるかもしれないですが、
フルカラーやトゥルーカラーの画像の処理はやっぱり重くなると思います。
256色なら割と早そうですけどね。
256色分のパレットを調整すれば、画素子側は弄らなくてよさそうだし。


返信引用
kuma
 kuma
(@kuma)
ゲスト
結合: 21年前
投稿: 32
 

この手のプログラムを組む経緯がありましたので
助言になれば。

# 以下は、関数に関する回答ではありません。
# 処理方法について言及したものです。

DIBSectionからピクセル値を取り出せるように
なりましたら、MMX命令を使用するとかなり高速に
処理ができるようになります。

とは言いましても、パレットの処理には到底
適いませんが。

実際の処理速度としましては

CPU : Celeron 700MHz
RAM : PC-133 CL2 192MB
O S : Windows Me

のPC上で 800x600 32bit(ARGB)の画像を2枚合成する
処理にかかる時間は

MMX使用時 : 80~100ms(10~12fps)
MMX非使用 : 200~280ms( 4~ 5fps)

程でした。

今のCPUクロック、メモリ転送速度、バス転送速度なら
このスコアの2,3倍、それ以上でるかもしれません。


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 21年前
投稿: 201
Topic starter  

PATIOさん、kumaさんありがとうございます。
あれこれ調べてみて、
もし、「CBitmap::LoadBitmap()で読み込んだ画像の
(他の画像に影響のないように)ローカルなパレット操作」
ができれば、有用なのですが、ご存知ないでしょうか。


返信引用
kuma
 kuma
(@kuma)
ゲスト
結合: 21年前
投稿: 32
 

MFCは疎いのでなんともいえませんが
CImageを使うのがベターかと。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

お解かりかもしれませんが、
24ビットカラーとかだと基本的にパレットを使わずに直接RGB値を画素子に入れると
思うので画素子レベルでやるしかないと思います。
私が書いているのはビットマップが中に抱えているパレットの話なので
他の画像には影響しません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました