在Android上将int数组转换为Bitmap

发布于 2024-12-11 03:06:38 字数 124 浏览 1 评论 0原文

我有一个代表颜色的 MxN 整数数组(例如 RGBA 格式,但这很容易更改)。我想将它们转换为 MxN 位图或其他可以渲染到屏幕的东西(例如 OpenGL 纹理)。有没有快速的方法来做到这一点?循环遍历数组并将它们绘制到画布上太慢了。

I have an MxN array of ints representing colors (say RGBA format, but that is easily changeable). I would like to convert them to an MxN Bitmap or something else (such as an OpenGL texture) that I can render to the screen. Is there a fast way to do this? Looping through the array and drawing them to the canvas is far too slow.

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

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

发布评论

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

评论(3

ㄖ落Θ余辉 2024-12-18 03:06:38

试试这个,它会给你位图:

 // You are using RGBA that's why Config is ARGB.8888 
    bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
 // vector is your int[] of ARGB 
    bitmap.copyPixelsFromBuffer(IntBuffer.wrap(vector));

或者你可以从以下本机方法生成 IntBuffer

private IntBuffer makeBuffer(int[] src, int n) {
    IntBuffer dst = IntBuffer.allocate(n*n);
    for (int i = 0; i < n; i++) {
        dst.put(src[i]);
    }
    dst.rewind();
    return dst;
}

Try this, it will give you the bitmap:

 // You are using RGBA that's why Config is ARGB.8888 
    bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
 // vector is your int[] of ARGB 
    bitmap.copyPixelsFromBuffer(IntBuffer.wrap(vector));

Or you can generate IntBuffer from the following native method:

private IntBuffer makeBuffer(int[] src, int n) {
    IntBuffer dst = IntBuffer.allocate(n*n);
    for (int i = 0; i < n; i++) {
        dst.put(src[i]);
    }
    dst.rewind();
    return dst;
}
木有鱼丸 2024-12-18 03:06:38

为什么不使用 Bitmap.setPixel?它甚至是 API 级别 1:

int[] array  = your array of pixels here...
int   width  = width of "array"...
int   height = height of "array"...

// Create bitmap
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

// Set the pixels
bitmap.setPixels(array, 0, width, 0, 0, width, height);

您可以根据需要使用 offset/stride/x/y。
没有循环。没有额外的分配。

Why not use Bitmap.setPixel? It's even API level 1:

int[] array  = your array of pixels here...
int   width  = width of "array"...
int   height = height of "array"...

// Create bitmap
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

// Set the pixels
bitmap.setPixels(array, 0, width, 0, 0, width, height);

You can play with offset/stride/x/y as needed.
No loops. No additional allocations.

寄人书 2024-12-18 03:06:38

是的,听起来您已经拥有所需的所有信息。如果 M 是宽度,N 是高度,则可以使用 Bitmap.createBitmap 创建一个新位图,并且可以使用采用 int 数组的 setPixels 方法填充 ARGB 值。

位图.createBitmap

Bitmap.setPixels

Yeah, sounds like you have all the info you need. If M is the width and N is the height, you can create a new bitmap with Bitmap.createBitmap, and you can fill in the ARGB values with the setPixels method which takes an int array.

Bitmap.createBitmap

Bitmap.setPixels

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