0

C ++とJavaの両方で操作する必要があるビットマップがあります。したがって、この投稿によると、C++ でバッファーを割り当て、参照を Java に渡しました。Java では、copyPixelsToBufferメソッドを使用してビットマップからバッファを埋めました。そのバッファから(操作なしで)ビットマップを作成しようとすると、decodeByteArrayはnullを返しました。そして、何が私の間違いだったのか理解できません。私が使用したコードの下。

 BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    mCurrentBitmap = BitmapFactory.decodeFile(hardCodedPath, options);

    // 4- bytes count per pixel
    bytesCount = mCurrentBitmap.getWidth() * mCurrentBitmap.getHeight() * 4;

    pixels = (ByteBuffer) allocNativeBuffer(bytesCount);
    pixels.order(ByteOrder.nativeOrder());

    mCurrentBitmap.copyPixelsToBuffer(pixels);
    pixels.flip();
    pixels.order(ByteOrder.BIG_ENDIAN);
    byte[] bitmapdata = new byte[pixels.remaining()];

    pixels.get(bitmapdata);

    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inDither = true;
    opt.inPreferredConfig = Bitmap.Config.ARGB_8888;

    Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length, opt);

コメントや提案は大歓迎です。

4

1 に答える 1

0

これが私のやり方です。

ByteBuffer mPixels = ByteBuffer.allocateDirect( saveWidth*saveHeight*4).order(ByteOrder.nativeOrder()); GLES20.glReadPixels(0, 0, mWidth, mHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, mPixels);

resultBitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
 resultBitmap.copyPixelsFromBuffer(mPixels);

于 2013-06-11T21:12:11.153 に答える