C#等同于Java的java.awt.image.DataBuffer

时间:2011-02-09 23:05:30

标签: c# java image buffer

这是我的Java代码:

import java.awt.image.DataBuffer;

public class B extends DataBuffer
{
  public float[][] a;
  public float[] b;

  public float[] a()
  {
    return this.b;
  }
}

问题简单明了。什么是C#等效于java.awt.image.DataBuffer?

或者我是否需要备份一个级别并找到与java.awt.image等效的内容?

TIA,

KeithC

1 个答案:

答案 0 :(得分:0)

听起来你正在尝试进行某种图像处理。您似乎需要直接访问位图的像素数据,因为方法调用太慢。

.NET为此目的提供了Bitmap.LockBits。以下是如何使用它的示例:

var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);
unsafe
{
    var data = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
    for (int y = 0; y < height; y++)
    {
        var b = (byte*) data.Scan0 + y * data.Stride;
        for (int x = 0; x < width; x++)
        {
            var blue = b[4 * x];
            var green = b[4 * x + 1];
            var red = b[4 * x + 2];
            var alpha = b[4 * x + 3];

            // ... do whatever you want with these values ...
        }
    }
    bmp.UnlockBits(data);
}
return bmp;

要使用此功能,您需要在项目中启用不安全代码。在项目属性中的“构建”选项卡上,启用选项允许不安全的代码