Converting array of int to Bitmap on Android

后端 未结 3 1239
谎友^
谎友^ 2021-01-02 02:08

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

相关标签:
3条回答
  • 2021-01-02 02:28

    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.

    0 讨论(0)
  • 2021-01-02 02:38

    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

    0 讨论(0)
  • 2021-01-02 02:39

    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;
    }
    
    0 讨论(0)
提交回复
热议问题