こんばんわ。VC6 MFC ダイアログベース W2kで開発を行っています。
現在DICOMという医療画像を対象に開発を行っています。
NewやVector何でもいいのですが、メモリ上に画像データを取得し、
簡単な処理を加え表示しているのですが、表示が遅くて困っています。
512*512*16Bitsの画像に対してコントラストの変更をマウスのドラックで行いたいのです
が、書くピクセル事処理している(まとめてメモリ上のデータの処理ができればいいので
すが方法がわかりません)こととSetPixelを使っていることでかなり遅いです。というか
処理が追いつきません。
考えられる良法があれば御教示お願いいたします。
メモリ上のデータを
1画素ごとに計算ながらSetPixelで表示
しているってことですか?
オリジナルのDICOMデータとは別に
メモリ上にコントラストを変えたRGB各8ビット系3バイトで
構成されたデータを作りましょう。
並び順は逆のBGRで、上下も逆にします。
実際にSetPixelがどれほど遅いのか知りませんが、
コントラスト後のデータをSetDIBitsかSetDIBitsToDeviceで表示すれば
SetPixelを数万回実行するより速いはずです。(試していません。)
SetDIBitsToDeviceについて詳しくは検索してください。
DIBつかったら早いです。
ありがとうございます。
あとコントラスト計算を各画素にしてるのをどうにかすっきりしたいのですが、
for (int y=0;y<512; y++)
すみませんまちがって送信してしまいました。
DIBつかったら早いです。
ありがとうございます。
あとコントラスト計算を各画素にしてるのをどうにかすっきりしたいのですが、
for (int y=0;y<512; y++)
for (int x=0;x<512; x++)
im[y][x]=buf[y][x]*2;
ってコードがあったとして
イメージ的にim=buf*2みたいに一気に計算するってことはできないでしょうか?
>イメージ的にim=buf*2みたいに一気に計算するってことはできないでしょうか?
普通に考えたら無理だと思います。
16bitの各データに対して * 2の演算をしたいわけですから
それぞれを独立して行わないとだめでしょう。
一つの数値として扱うと桁上がりとかの関係でだめでしょうし。
SSEとかを使って複数の変数を一度に計算するとかしないと多分無理なのでは。
それでどの程度早くなるのかは疑問ですけれど。