PCスペック
Windows10 HOME 64bit
メモリ 32GB
プロセッサ Intel Core i7-8700CPU 3.20GHz
Android Studio 3.4.1(最新ver)
デモ用端末(XPERIA OS:7.0 API 24)
お世話になっております。
1つ前の質問の内容の続きなのですが、
maskをかける側の画像の背景が透明ではないことが原因で、mask処理ができていいませんでした。
そこで、maskをかける側の画像の背景を透明するための方法として、以下を考えました。
方法
手順1:「画像1(手順3でmaskをかける側になる画像)」と「画像2(手順2でmaskをかける側の真っ黒な画像)」を用意する
手順2:手順1の2枚で排他的論理和(PorterDuff.Mode.XOR)のmask処理を行い、2枚の画像の重なる部分だけを透明にすることで、画像1を「ピンクの線のみで残りを透明」という画像に変える
手順3:「変更後の画像1」と「本来用意していた画像」とで、PorterDuff.Mode.DST_INを用いてマスク処理をかけて、重なる部分のみを抽出する
現在困っていること
手順2が終了した時点でアプリ上では、思い通りピンクの線が表示されて、周りが白く(透明だということ)なっていた。
しかし、手順3が終了して、得られた画像は真っ白な画像になっている。。
↑これが原因不明ということでなんとか解決したいです。
6/13追記
>手順2が終了した時点でアプリ上では、思い通りピンクの線が表示されて、周りが白く(透明だということ)なっていた。
アプリ画面上では、そのようなImageViewとして表示されていたが、実際に「変更後の画像1(maskImage)」をストレージに保存して確認してみると、真っ黒の画像になっていた。
>しかし、手順3が終了して、得られた画像は真っ白な画像になっている。
こちらもアプリ画面上でこのように見えたが、手順3が終了した時点での「最終的な画像(resultImage)」も念のためストレージに保存して確認してみると、真っ黒な画像になっていた。
ソースコードを以下に載せておきます。
java
1 //切り抜いた画像の表示 2 Button button4 = findViewById(R.id.button4); 3 button4.setOnClickListener(new View.OnClickListener() { 4 @Override 5 public void onClick(View v){ 6 7 InputStream inputStream0; 8 Canvas canvas = new Canvas(); 9 try{ 10 11 inputStream0 = new FileInputStream(file);//なぞった部分の画像データを読み込む 12 13 Bitmap nazoruImage = BitmapFactory.decodeStream(inputStream0);//bitmapとして取り出す 14 Bitmap blackImage = BitmapFactory.decodeResource(getResources(), R.drawable.black);//bitmapとして取り出す 15 16//手順1終わり 17 18 Bitmap maskImage = Bitmap.createBitmap(nazoruImage.getWidth(), nazoruImage.getHeight(), Bitmap.Config.ARGB_8888); 19 20 canvas.setBitmap(maskImage); 21 Paint blackClearPaint = new Paint(); 22 blackClearPaint.setFilterBitmap(false); 23 24 canvas.drawBitmap(nazoruImage, 0, 0, blackClearPaint); 25 blackClearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)); 26 canvas.drawBitmap(blackImage, 0, 0, blackClearPaint); 27 blackClearPaint.setXfermode(null); 28 29 //imageView.setImageBitmap(maskImage);//手順2終わり、ここでは期待通りのXORができている思っていたが、そうではないのかもしれない 30 31 Bitmap mainImage = MediaStore.Images.Media.getBitmap(getContentResolver(),cameraUri);//カメラで撮った画像を読み込んでbitmapとして取り出す 32 Bitmap resultImage = Bitmap.createBitmap(mainImage.getWidth(), mainImage.getHeight(), Bitmap.Config.ARGB_8888); 33 34 canvas.setBitmap(resultImage); 35 Paint commonShowPaint = new Paint(); 36 commonShowPaint.setFilterBitmap(false); 37 38 canvas.drawBitmap(mainImage, 0, 0, commonShowPaint); 39 commonShowPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 40 //commonShowPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 41 canvas.drawBitmap(maskImage, 0, 0, commonShowPaint); 42 commonShowPaint.setXfermode(null); 43 44 imageView.setImageBitmap(resultImage);//表示されたのは、真っ白な画像で???状態、ストレージで確認すると真っ黒な画像になっている 45 46 47 } catch (IOException e) { 48 e.printStackTrace(); 49 } 50 } 51 }); 52
回答1件
あなたの回答
tips
プレビュー