■79890 / ) |
Re[4]: bitmapでメモリが壊れる現象 |
□投稿者/ だんご (3回)-(2016/05/26(Thu) 18:51:49)
|
■No79880 (魔界の仮面弁士 さん) に返信 > ■No79866 (だんご さん) に返信 >>GIF画像はWebClientのOpenReadAsyncで取得し、OpenReadCompletedイベントでbitmap = New Bitmap(e.Result)として生成しております。 > もしもログイン処理等が不要な場合には、 > PictureBox1.WaitOnLoad = False > PictureBox1.LoadAsync("http://home.hiroshima-u.ac.jp/kojiok/1bit.gif") > だけでも良いかもしれません。 >
当初はその方法で取得していましたが、取得する画像の数が数枚あるのと、必ずしも画像を表示するわけではないことなどから管理面を重視して変更しました。また画像は毎秒取得するため、読み込みの完了の通知が欲しいというのもあります。(もしあるのでしたら教えてください…)
>>ここからbitmapに直接アクセスするLockBitsを行うのですが、 > Animated GIF だった場合は、LockBits する前に SelectActiveFrame を呼び出す必要があります。 > (LockBits 中はフレームを変更できないためです) > > SelectActiveFrame を呼ばなかった場合、最初のフレームの画像しか処理できません。 >
取得するGIF画像はアニメーションではないため大丈夫です。
>>たまにメモリが破壊されているという例外が発生します。 > 「たまに」の再現性を教えてください。 > > 同じ画像でも、時折失敗するということでしょうか。 > それとも、特定の画像が常に失敗するということでしょうか。 > あるいは、実行する PC環境によって成否が異なるということでしょうか。
起きるときは起きますが起きない時は全く起きないといった状況です。 頻度は1日2~3時間の製作作業で3日に1~2回くらいでしょうか。 画像は毎秒取得するため同じとは言えないかと思います。 すみませんがPCが1台のみですので別のPCでは試せていません。
>>BeginAccess関数内のLockBits、GetPixel関数内の >>Dim b As Byte = Runtime.InteropServices.Marshal.ReadByte(adr, pos + 0) >>が主な点になります。稀に発生箇所が表示されない時もあります。 > そのエラーが発生する画像を公開する事はできますか?
http://www.kmoni.bosai.go.jp/new/ こちらの各地点に色がついた画像です。
|
|