- - PR -
LockBitsの処理が重い(C#)
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-10-18 14:16
画像表示の仕方が多彩になるようなプログラムを作成しているのですが、
処理が重すぎて困っています。 3枚の画像600×800(カラー・モノクロ・透明)があるのですが、 モノクロの明度をみて、カラー画像の色を透明画像に移していくというものです。 このSetPixcelメソッドの処理が重いのですが、なにかアドバイス等いただけないでしょうか、よろしくお願いいたします。
[ メッセージ編集済み 編集者: 満月 編集日時 2007-10-18 23:01 ] | ||||||||
|
投稿日時: 2007-10-18 16:25
もしかして、ビルドした後のexeを直接エクスプローラから起動すると速かったりしませんか。
Visual Studioからの起動でも速くしたい場合は、 プロジェクトプロパティの「デバッグ」タブの 「Visual Studio ホスティング プロセスを有効にする」 のチェックをはずして試してみるとかどうでしょうか。 | ||||||||
|
投稿日時: 2007-10-18 17:12
お答えいただいてありがとうございます
ビルドした後のexeを直接起動させてみると、若干早くなった気はしますが、 まだ遅いようです。 | ||||||||
|
投稿日時: 2007-10-18 17:29
重いも何も、このコードが何をしてるのか全く分かりません。 意味のない部分がたくさんあるし、 変数の型もわからないし、LockBitで得られたポインタを使ってないし。 高速化しようとした後も見えません。 適当に編集してありませんか? きちんとしたコードでないと、 まともなアドバイスはできませんが、 とりあえず以下のことに気をつけてみてください。 ・意味の無いコードは記述しない ・無駄に何回もLockBitしない。 ・無駄に何回もApplication.DoEventしない。 ・無駄に何回もInvalidateしない。 | ||||||||
|
投稿日時: 2007-10-18 18:12
(編集しなおしました)
説明不足で申し訳ありません。不足していたと思われたコードを追加しました。 高速化、というのは基本的にどういうことに気をつけておけばいいのでしょうか。 このプログラムでやりたいことは、 カラー・グレースケール(255色)・透明の3枚の画像を使用して。 グレースケール画像の色を見て、黒(0)→白(255)の順にカラー画像を透明画像に移(表示)していくというものです。(256枚のパラパラアニメのような感じでしょうか) 例えば、グレースケール上では明度が5の所をカラー画像の同じところにある色を透明画像に描画し、次は明度6の所…といった風に
[ メッセージ編集済み 編集者: 満月 編集日時 2007-10-18 23:01 ] [ メッセージ編集済み 編集者: 満月 編集日時 2007-10-19 00:12 ] | ||||||||
|
投稿日時: 2007-10-18 18:46
後で書こうと思っていたけど、やっぱ今書こう。
頼む 日本語で説明してくれ コードの1つ1つ、何をしたいのか、説明してください。 読み手に、解読の負担を強いないでください。 解読の負担をかけるということは、読んでもらえない可能性を高めます。 それでも読んでくれる人はいるでしょうが、回答を得る機会を自ら減らしているのではないでしょうか。 | ||||||||
|
投稿日時: 2007-10-18 18:50
細かいテクニックはいろいろあるでしょうが。 全ての言語で共通して最も重要なことは とにかくループの深さを減らすことです。 その後、一番深いループから順に、 深いループの処理をより浅いループに移せないか検討します。 言葉では非常に簡単ですが、重要で、奥が深く、 高速化はこれが全てと言ってもいいくらいです。 コードはざっと眺めただけですが、 満月さんのコードはたぶん2重のループがあり、 一番深い部分はw*h*256回だけ回ることになります。 これをw*h回に減らせると思います。 これで、およそ256倍早くなる、とは言えませんが、 たぶん100倍くらいは早くなります。 他にもいろいろ早くできるポイントはありますが、 とりあえずそれで十分ではないでしょうか。 | ||||||||
|
投稿日時: 2007-10-18 18:56
読んじゃいましたが、 やっぱめんどくさかったです。 放棄しようかと思いましたが、 最初に答えてしまったので。
高速化したいってことなんで、 コードが重要なんですよね。 更に言うと、 コードがきちんとインデントされてるといいんですがね。 今回はインデントされてれば問題点が一目瞭然かと。 |
1|2|3
次のページへ»