gpt4 book ai didi

c# - 用现代语言实现高效帧缓冲区的简单方法?

转载 作者:行者123 更新时间:2023-12-02 08:02:27 25 4
gpt4 key购买 nike

我正在寻找一种用 C#、D 或 Java 实现帧缓冲区的简单方法。允许我使用二维颜色数组并更新单个像素或区域的东西(API 或库)。此外,更新时不会产生大量开销。我知道这可以通过 OpenGL 来完成,但 API 对于我正在做的事情来说似乎太复杂了。

最佳答案

尝试在 .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);

}

关于c# - 用现代语言实现高效帧缓冲区的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8708661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com