2012-02-17 9 views
0

WriteableBitmapピクセルをピクセル単位で更新する最良の方法を誰かが知っていたのかどうかは疑問に思っていました...私は色で取り込めるPixels.SetValueメソッドを見ることができます単一の場所。しかし、確かに速くオプションが...一度にすべてのSetValue(theArray)、その後、最初にこのような何かを、アレイを設定することです...WriteableBitmap SetValueパフォーマンス/ Texture2D SetData

Int32[] pixels = bmp.Pixels; 
for(Int32 y = 479; y > 0; y--) 
    for (Int32 x = 0; x < 480; x++) 
    { 
     pixels[x + (y * 480)] = 0; 
    } 
bmp.Pixels.SetValue(pixels); 

しかし、そのオプションがあるように見えるdoesntの?

objviouslyここで私は黒にすべてを設定しています...しかし、私はより多くをしたい場合は...

だから基本的には、イムはちょうどピクセルでビットマップのピクセルを作成/操作するための最良の方法は何か尋ねます最高のパフォーマンスを得るには?

編集:私はちょうどそのTexture2D.SetData <Int32>(theArray)がこの機能を持っていることに気づいた、誰もがこの性能についてコメントすることができますか?またはこれを行うためのより良い方法をお勧めしますか?

+0

私はビットマップと素晴らしいパフォーマンスが進むとは思わない。画面全体を60fpsでリフレッシュしますか? – Dykam

+0

配列を渡すだけでメソッドが魔法的に速くなるわけではありません。 WriteableBitmap.Pixelsは配列であり、WriteableBitmapから実際のイメージを生成しようとすると処理が行われます。したがって、Pixels配列内のすべての値を自分で書くか、またはPixels配列内の配列の内容をコピーするメソッドを呼び出すことは、パフォーマンスに関しては同じです。 –

+0

Iveはわずかに変更されました。UpdateIntervalはTimeSpan(60000)に設定され、Int32 [] _pixels = new Int32 [230400]を操作し、描画イベントではmyTexture2D.SetDataを呼び出します(_pixels) ...私はまだデバイス上でそれをテストhavent ... – Wacka

答えて

1

ビットマップを作成して、バイト配列を与えることができます。 Bitmapのコンストラクタの1つがこれを可能にします。 thisthisを見てください。

おそらく、最良の方法は、配列を操作し、必要に応じてビットマップを作成することです。もちろん、線、円などを描画するには、いくつかの描画関数を使用する方が良いでしょう。

+0

ああ、これが速いのは面白いだろうTexture2Dを更新するよりも(私は新しいフレームマップの作成に数回かかるかもしれないと思うかもしれませんが) – Wacka

+0

IntPtr構造体を使うことができますが、安全でないコードを使うことができず、クラにシックセンス(すなわち、 Int32 * myInt)in Windows phone 7 – Wacka

+0

ビットマップピクセルをピクセル単位で変更するのが非常に遅くなります。あなたがそれをしたい場合は、できるだけシンプルかつ生の方法としてより速く使用してください。調べる最善の方法は、いくつかのテストを実行することです。 –