AndroidでImageViewにBitmap(Pixel単位)で画像表示しています。
実機のAndoroid9.0を接続しImageViewにPixel単位にARGBを設定してBitmap表示しているのですが、下図(1番下)のとおりうまくいきません。
(確かにデータのものが表示されているのですが、色合いや雑音のようなものが汚く表示されます。)
recvBinaryデータはRGB_565の16Bitデータのため、ARGB_8888の32Bitデータに変換して、pixels(short配列)に保存し、bitmap.setPixelsでBitmapに設定しsetImageBitmapでImageViewに表示させています。
同じデータで同じBit演算でARGB_8888に変換してChrome(HTML)のCanvasタグ上に同様(Pixel単位にARGB指定)にBitmap表示させると綺麗に表示されます。
RGBのデータの系列の違いなど何度も見直したのですが、特に問題ないと思います。
ご教授をお願いします。
Java
1private void drawBitmap (byte[] recvBinary) { 2 ImageView cameraImageView = (ImageView) findViewById(R.id.idImageCamera); 3 Bitmap bitmap = ((BitmapDrawable)cameraImageView.getDrawable()).getBitmap().copy(Bitmap.Config.ARGB_8888, true); 4 int width = bitmap.getWidth(); 5 int height = bitmap.getHeight(); 6 pixels = new int[width * height]; 7 8 // 8Bit=>16Bit配列へ変換 9 short[] buf = new short[recvBinary.length / 2]; 10 ByteBuffer bb = ByteBuffer.wrap(recvBinary); 11 for (int i = 0; i < buf.length; i++) { 12 buf[i] = bb.getShort(); 13 } 14 // BitMapへ設定 15 for(int y = 0; y < buf.length/width; y+=1){ 16 for(int x = 0; x < width; x += 1){ 17 int c = x + y * width; 18 int redp = (buf[c] & 0xf800) >> 8 | (buf[c] & 0xe000) >> 13; 19 int greenp = (buf[c] & 0x07e0) >> 3 | (buf[c] & 0x0600) >> 9; 20 int bluep = (buf[c] & 0x001f) << 3 | (buf[c] & 0x001c) >> 2; 21 pixels[c] = Color.argb(255, redp, greenp, bluep ); 22 //Log.d(TAG, "r:" + redp + ",g:" + greenp + ",b:" + bluep ); 23 } 24 } 25 // Bitmap に Pixel を設定 26 bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 27 cameraImageView.setImageBitmap(bitmap); 28}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/10 04:55
2019/09/10 11:05