C# 相当于 Java 的 java.awt.image.DataBuffer

发布于 2024-10-17 02:53:08 字数 338 浏览 2 评论 0原文

这是我的 Java 代码:

import java.awt.image.DataBuffer;

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

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

问题简单明了。相当于 java.awt.image.DataBuffer 的 C# 是什么?

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

TIA,

基思·C

Here's my Java Code:

import java.awt.image.DataBuffer;

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

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

Question is plain and simple. What is the C# equivalent to java.awt.image.DataBuffer?

Or do I need to back up one level and find the equivalent to java.awt.image?

TIA,

KeithC

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

箹锭⒈辈孓 2024-10-24 02:53:08

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

.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;

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

It sounds like you are trying to do some sort of image manipulation. You seem to need direct access to the pixel data for a bitmap because method calls would be too slow.

.NET provides Bitmap.LockBits for this purpose. Here’s an example how you might use this:

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;

In order to use this, you need to enable unsafe code in your project. In the project properties, on the “Build” tab, enable the option Allow unsafe code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文