相关疑难解决方法(0)

Android的ARGB_8888位图内部格式总是RGBA吗?

我正在尝试在从外部源接收到字节后Bitmap使用 Android创建一个。Bitmap.Config.ARGB_8888据我了解,在 a 中设置原始字节Bitmap(不使用JNI)的最快方法是使用该copyPixelsFromBuffer()方法,但是出现了关于该缓冲区中字节的正确顺序的问题。

经过一番尝试和错误后,尽管事实上Config.ARGB_8888表明了正确的顺序,ARGB但似乎使用的内部格式BitmapRGBA. Activity您可以在ie中使用以下方法来测试此行为onCreate()(我已经在 Android 4.4.4 中测试了它,该方法确实进行了测试,copyPixelsToBuffer()但根据我的测试,copyPixelsFromBuffer()其行为是相同的):

private void testBitmap() {
    // one pixel bitmap
    Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);

    // as per javadoc, the int value is in ARGB format, so A=0xFF, R=0x11, G=0x22, B=0x33
    bitmap.setPixel(0, 0, 0xFF112233);

    ByteBuffer buffer = ByteBuffer.allocateDirect(4);   // 4 bytes for the single pixel
    bitmap.copyPixelsToBuffer(buffer);
    buffer.position(0); …
Run Code Online (Sandbox Code Playgroud)

android android-bitmap

5
推荐指数
1
解决办法
4015
查看次数

Android:位图与 RGBA 之间的转换

我正在尝试编写一些方法来将 Android 位图转换为 RGBA 字节数组,然后再转换回位图。问题是我似乎没有达到公式,因为颜色总是返回错误。我尝试过几种不同的假设,但没有成功。

所以,这是我认为很好的从 Bitmap 转换为 RGBA 的方法:

public static byte[] bitmapToRgba(Bitmap bitmap) {
    int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
    byte[] bytes = new byte[pixels.length * 4];
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
    int i = 0;
    for (int pixel : pixels) {
        // Get components assuming is ARGB
        int A = (pixel >> 24) & 0xff;
        int R = (pixel >> 16) & 0xff;
        int G = (pixel >> 8) & 0xff;
        int B …
Run Code Online (Sandbox Code Playgroud)

graphics android bitmap argb rgba

5
推荐指数
1
解决办法
3408
查看次数

标签 统计

android ×2

android-bitmap ×1

argb ×1

bitmap ×1

graphics ×1

rgba ×1