【发布时间】:2012-02-17 11:43:20
【问题描述】:
我只是想知道是否有人知道(wp7 上的性能明智)逐像素更新 WriteableBitmap 的最佳方法...我可以看到 Pixels.SetValue 方法,它可以采用颜色和单个位置。但当然更快的选择是先设置一个数组,然后一次性设置 SetValue(theArray) ......像这样......
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);
但似乎没有那个选项???
在这里,我只是将所有内容都设置为黑色......但如果我想做更多......
所以基本上,我只是问逐像素操作/创建位图并获得最佳性能的最佳方法是什么? (考虑在每个刻度上更新位图)
编辑:我刚刚注意到 Texture2D.SetData
【问题讨论】:
-
我不认为位图和出色的性能会一起出现。是否要以 60fps 刷新整个屏幕?
-
一个方法不会因为你传递一个数组而神奇地变快。 WriteableBitmap.Pixels 只是一个数组,当您尝试从 WriteableBitmap 生成实际图像时,处理完成。因此,自己编写 Pixels 数组中的所有值,或调用将复制 Pixels 数组中数组内容的方法在性能方面大致相同。
-
我稍微改变了它.. UpdateInterval 设置为 TimeSpan(60000) 我只是操纵一个 Int32[] _pixels = new Int32[230400] 并且在绘图事件中我只是调用 myTexture2D.SetData(_pixels) 看起来很流畅...虽然我还没有在设备上测试过...
-
好的,我制作了 gameTimer.UpdateInterval = TimeSpan.Zero ... 现在它就像... 超快 :D 在 TimeSpan 中放低数字似乎会导致延迟... 我猜什么时候它的 TimeSpan.Zero 它做了一些不同的事情......现在我必须自己拖延,因为它太快了;)
标签: c# performance windows-phone-7 graphics writeablebitmap