我正在尋找一種在C#,D或Java中實現幀緩衝的簡單方法。一些東西(一個API或庫),這將允許我使用二維數組的顏色和更新單個像素或區域。此外,在更新時不會產生大量開銷。我知道這可以用OpenGL來完成,但是對於我所做的事來說,API似乎太複雜了。以現代語言實現高效幀緩衝的簡單方法?
0
A
回答
1
請嘗試在.NET中使用普通的舊System.Drawing.Bitmap
? 您可以使用Bitmap.Lockbits()
訪問位圖後面的字節數組並對其進行更新。這比位圖上的正常像素操作更有效率。
MSDN有,我已經從粘貼一個例子here:
private void LockUnlockBitsExample(PaintEventArgs e)
{
// Create a new bitmap.
Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData =
bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
bmp.PixelFormat);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
// Set every third value to 255. A 24bpp bitmap will look red.
for (int counter = 2; counter < rgbValues.Length; counter += 3)
rgbValues[counter] = 255;
// Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
// Unlock the bits.
bmp.UnlockBits(bmpData);
// Draw the modified image.
e.Graphics.DrawImage(bmp, 0, 150);
}
0
如果您需要的是二維數組,您可以在C#中創建一個multidimensional array,使您可以直接訪問每個成員。爲了提高效率,請儘量避免頻繁裝箱和取消裝箱,並且不要經常分配和釋放大型內存塊,如果你做得對,沒有理由說明爲什麼這個任務在C#或Java中的效率遠低於其他語言。
1
對於整個屏幕迭代大量像素數據時,數組將花費大量時間。找到不需要的東西或需要的迭代次數會更好。更類似於C中的指針。
相關問題
- 1. 如何爲edittext實現簡單的語法高亮方法?
- 2. 實現z緩衝區的好方法
- 3. 使用jQuery簡單更改語言實現代碼
- 4. 是否有使用ANTLR或類似方法實現的簡單語言?
- 5. 實現集合的簡單方法?
- 6. Android onTouchListener,更簡單的實現方法
- 7. 現代GPU的緩衝區
- 8. 最簡單的方法來實現這種效果?
- 9. Osek實現語言
- 10. 簡單的C#ASP.NET緩存實現
- 11. 俄語編程語言「Rapira」的現代實現?
- 12. 級聯(緩衝區)實現
- 13. 以新的編程語言實現xunit
- 14. 在Prolog中實現一個簡單的C語言?
- 15. 實現新聞源的高效方式
- 16. 爲POCO實現簡單緩存
- 17. 高效實現向量化代碼
- 18. 是否可以用高級語言實現編譯器?
- 19. 以簡單的純功能語言實現摺疊而無需懶惰評估
- 20. 如何以LISP語言實現堆棧
- 21. 實現樣品緩衝液的委託方法iphone
- 22. 爲軟件渲染器實現z緩衝的最快方法?
- 23. 簡單的Python代碼無效語法
- 24. 簡單代碼中的語法無效
- 25. 以正確的方式實現緩存
- 26. 語言在Apache Solr實現
- 27. 實現多語言PHP
- 28. 實現語言選擇器
- 29. 無法呈現到綁定到幀緩衝區的紋理
- 30. 哪些方法在Python中實現緩衝區接口?
什麼樣的操作?讀取/寫入像素可以在陣列中輕鬆完成。這是全部嗎? – Euphoric 2012-01-03 07:04:04