TOP 
記事検索(複数ワードSP区切り)
ティアのホームページ☆ミ

 
ティアのホームページ 月依桜へようこそ☆ミ
フルhttps化したので、リンクを張り直してくれると嬉しいです☆

(2024年8月8日更新) ATOM 1.0
女装千年王国 2017年9月29日発売
チャンネル 茉奈香ちゃんねる
 
カテゴリ 自己の紹介 りんく 落書き帳 レガリヤ プログラム みちゃいやん グラフィック RTChart個人用
 
テーマ 日記(825)
たわごと(260)
BlogPet(168)
PSO2(117)
ゲーム(55)
こみけ(45)
PSO2 NGS(35)
番組表(35)
なし(32)
うさこ日記(27)
ココロ日記(20)
Windows10(11)
CG(7)
たるたる(6)
記念日(5)
アニメ(4)
Ys?(4)
あに(2)
拍手返事(2)
激痛(1)
 
旧カテゴリ たわごと
(引っ越し中)
 
カレンダー
<< 2015年11月 >>
Sun Mon Tue Wed Thu Fri Sat
             
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          
2015年9月 2015年4月
2015年8月 2015年3月
2015年7月 2015年2月
2015年6月 2015年1月
2015年5月 2014年12月
     
 
フォローする?

女装千年王国 2017年9月29日発売
【プリズム◇リコレクション!】情報ページ公開中!
【プリズム◇リコレクション!】情報ページ公開中!
『大図書館の羊飼い』は2013年1月25日発売予定です。
『大図書館の羊飼い』は2013年1月25日発売予定です。

『えれくと!』を応援しています!
「キミとボクとエデンの林檎」花鏡院琴音を応援中☆ 公式サイトへ
ALcot ハニカム 『アネイロ』 瑛菜応援中!
【カミカゼ☆エクスプローラー!】風花を応援中!
【カミカゼ☆エクスプローラー!】沙織を応援中!
アネカノ 秘密の彼女はお姉ちゃんいちゃらぶADV 応援中!
ゴスデリ 7月23日発売予定
『とっぱら ~ざしきわらしのはなし~』2008年9月26日発売予定!
 
no prev page 1/1ページ(1件) no next page
To Close..それは、何かが有ったからなんだけど 2015年11月13日14時07分
先日、新しいプログラムを作りました。
作っている最中に、おそらく、誰もそういう事をする人は居ないと考えている様な方法だろうなとか思いました。
世の中には、とある事が前提で作られて居る物が多いです。

でも、いつかはその前提を崩す人が現れ、それに対する対策を講じる。

これは、いつまで経ってもいたちごっこですね?

まぁ、それはそれとして、その際に、Imageから点の情報を取得するGetPixelを大量に発行するのですが、
これがまぁ、とても遅い!

まぁ、遅いなら遅いで早くすれば良い。

って事で、コア数分のThreadに分割して、CPUをフル活用してあげれば良い。

大した事では無い。

しかし、これをした結果どうだったのか・・・・

速度は変わらず、CPU使用率も全然上がらない。

そもそも、データ量も大した事が無いのに、この程度の処理がthread分割するほどの処理なのか?と言う事もあり
それに、thread分割してからなんだけど、HDCのエラーが出ることもあり

どうやら、Imageの処理にはDCが介在し、ダイレクトに操作ができないんじゃ無いかという考えに至りました。

ようするに、Imageを宣言して、LoadしたものはすでにVRAM等に格納され、GetPixelするごとにGPUへアクセスをしたり、DCからメモリへマップしたりとか、そう言った作業が発生している為に時間が掛かるんじゃ無いかと?

であれば、BMPをメインメモリに落とせば良い。
c#的にはbyte配列になるのか? 昔のようにBinaryでイメージを読まないといけないのか?
とか、色々と考えたのですが・・・・

LockBitsとかいう便利な命令が有る事が分かりました。

で、これ、実行すると、Image(何処に格納されているか分からない)からメインメモリへマップする為、
その際に変換が入るようです。

楽に処理する為には32bit処理ですよね?

LockBitsの変換設定をFormat32bppArgbにすることで、int(Int32)でアクセスすれば、そのままピクセル情報が取得出来る。

そしたら、どうなったかというと、

これまで、データの読み込みが30秒以上掛かっていたのが
1秒未満になりました(笑

余りにも短すぎるので、CPU使用率は50%迄しか上がらないのですが、25%以上になるのでthreadも問題なく稼働しているようです。

それにしても、マルチスレッドの処理は、
スレッドデータの準備→スレッドの起動→スレッドの終了待ち→処理の完了

という手順を取る為、もうちょっと容量のあるデータじゃないと、オーバーヘッドの方が高い可能性があるんだけど、
まぁ、それはそれで良いです。


そんな感じで、プログラムは、無事完成し、目的は達せられたのです。

因みに、LockBitsには、ロックする範囲を指定する場所がありますが、指定した場所以外もロックされます。
イメージデータのごく一部だけを取り出してくれるとか言う事はありません。

Scan0のプロパティの位置が、指定したアドレスになるだけです。
また、次のピクセルとかいう方法はありませんので、ポインタを自分で+4しなければなりません。
1ピクセルを32ビットに変換していない場合は、24ビットなり、8ビットなりのデータとして取り扱わなければなりませんし、
また、次の行はStrideを参照して、ポインタを増減させる必要があります。 width×ピクセルサイズとか利用すると、違う場合がありますのでご注意ください。
とくにBitmapは下の行から、上の行に向けてデータが格納されている事も多いので、この値は必ず参照する必要があります。

ロックされた領域は
アンマネージ メモリ
なので
System.Runtime.InteropServices.Marshal
を使って読み書きする必要があります。
また、ロックする領域は、操作ミスを起こさない為にも、リードオンリーにすることをお勧めします。
(書き込み時は、書込オンリーをお勧め)

なので、読み込みは、
System.Runtime.InteropServices.Marshal.ReadInt32((Intptr)(scan0 + x * 4 + Stride * y));
という事になります。
帰ってくるのはARGBですのでFromArgbを利用する事で、Colorに変換する事が出来ます。

因みに、このプログラムだけでは、何も出来ないので、公開はしません。
対応するデータと、対応する変換マトリクスが揃っていないと意味が無く、そっちの方が公開出来るデータでは無いからです。

何はともあれ、Image形式のデータは一度ロックしてから使いましょう☆
閉じる
テーマ:日記 URL:https://tsukiyori.sakura.ne.jp/index.cgi?ID=1293
 
no prev page 1/1ページ(1件) no next page
このホームページでは一部、“PULLTOP” 製品の画像素材を加工・引用しています。
これらの素材を他へ転載することを禁じます。
(C)GUST CO.,LTD.
Copyright © 2009 C&C Media Co.,Ltd. All Rights Reserved.
Copyright ©  WeMade Entertainment Co.,Ltd. All Rights Reserved
Copyright ©  INTIVSOFT. All Rights Reserved.
『PHANTASY STAR ONLINE 2』公式サイト
http://pso2.jp/
■PULLTOP Official Website■ やりこみRPGアトリエシリーズ公式ページへ!
モバイル向けのページはこのQRコードを利用ください。
■PULLTOP Official Website■
 
以前のバナーはこちら パメラ七変化はこちら