|
報告をさせていただきます
毎秒50回くらいの更新でどの位CPU%となるか、で判断しました
1行に1回のDrawStringで位置を変えながら全画面を書き直す -->CPU 2%位でOK
1行を文字数分のDrawStringで書き、全画面を書き直す -->CPU 50%とか100
以下は1つのBitmapだけでのテストです
CopyFromScreenで中央のほとんどはコピー -->CPU 50%とか
Marshal.Copyで中央のほとんどはコピー -->CPU 2%位
Marshal.Copyの凄さが理解できました。
Dim bmpData As Imaging.BitmapData _
= bmp1.LockBits(rect, ImageLockMode.ReadWrite, bmp1.PixelFormat)
Dim ptr As IntPtr = bmpData.Scan0
Dim bytes0 As Integer = bmp1.Width * bmp1.Height * 4
Dim bytes2 As Integer = bmp1.Width * 4 * pH
Dim rgbValues(bytes0 - 1) As Byte
Dim cp_byte = bytes0 - bytes2
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes0)
System.Runtime.InteropServices.Marshal.Copy(rgbValues, bytes2, ptr, cp_byte)
bmp1.UnlockBits(bmpData)
こちらの過去ログを参考に、このようにしてみましたが、気になることがあります
一度、rgbValues()に引取ることは、なんとなくイヤなのです
もし、bmpDataの中で直接copyできる方法がありましたら、ご教授の程よろしくおねがいします
|