デバッガ・Logcat・VCS等環境は今後の為にも是非設定して頂いて、画像差分のコードの問題に付きましては hoshi-takanori さんの bitmap3 に関するご指摘が当たりのように思います。
カメラが必要なアプリであるということで実機でテストされているようですが、 onCameraDevitionClick 自体はカメラは関係無いようですので、このメソッドだけ抜いてエミュレータで動かすことも出来るでしょう。
(下のコードは抜き出した上に弄っちゃってますが…。)
3つの ImageView がどのような状態で onCameraDevitionClick が呼ばれることになるのかはハッキリしませんが、リソースから src_img1/2 に設定し、result_img は空の状態としました。
MainActivity.java
java
1package com.teratail.q357676;
2
3import androidx.appcompat.app.AppCompatActivity;
4
5import android.graphics.*;
6import android.graphics.drawable.*;
7import android.os.Bundle;
8import android.view.View;
9import android.widget.ImageView;
10
11public class MainActivity extends AppCompatActivity {
12 private ImageView src_img1;
13 private ImageView src_img2;
14 private ImageView result_img;
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_main);
20
21 src_img1 = (ImageView)findViewById(R.id.src_img1);
22 src_img1.setImageResource(R.drawable.k_202105_0); //テスト画像1
23
24 src_img2 = (ImageView)findViewById(R.id.src_img2);
25 src_img2.setImageResource(R.drawable.k_202105_1); //テスト画像2 ※src_img1と同じ大きさであること
26
27 result_img = (ImageView)findViewById(R.id.result_img);
28 }
29
30 public void onCameraDevitionClick(View view) {
31 Bitmap src_bitmap1 = getBitmap(src_img1);
32 Bitmap src_bitmap2 = getBitmap(src_img2);
33
34 Bitmap result_bitmap = createDiffBitmap(src_bitmap1, src_bitmap2);
35 result_img.setImageBitmap(result_bitmap);
36 }
37
38 private Bitmap getBitmap(ImageView imageView) {
39 if(imageView.getDrawable() instanceof BitmapDrawable) {
40 return ((BitmapDrawable)imageView.getDrawable()).getBitmap();
41 }
42 Drawable d = imageView.getDrawable();
43 Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
44 d.draw(new Canvas(bitmap));
45 return bitmap;
46 }
47
48 private Bitmap createDiffBitmap(Bitmap src_bitmap1, Bitmap src_bitmap2) {
49 final int width = src_bitmap1.getWidth();
50 final int height = src_bitmap1.getHeight();
51 Bitmap dist_bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
52
53 for (int x = 0; x < width; x++) {
54 for (int y = 0; y < height; y++) {
55 int src_color1 = src_bitmap1.getPixel(x, y);
56 int src_color2 = src_bitmap2.getPixel(x, y);
57 int dist_color = isDifference(src_color1, src_color2) ? -11111111 : src_color1;
58 dist_bitmap.setPixel(x, y, dist_color);
59 }
60 }
61
62 return dist_bitmap;
63 }
64
65 private boolean isDifference(int color1, int color2) {
66 return Math.abs(color1 - color2) > 500000;
67 }
68}
レイアウト: activity_main.xml
xml
1<?xml version="1.0" encoding="utf-8"?>
2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 tools:context=".MainActivity">
8
9 <ImageView
10 android:id="@+id/src_img1"
11 android:layout_width="0dp"
12 android:layout_height="0dp"
13 app:layout_constraintBottom_toTopOf="@id/src_img2"
14 app:layout_constraintLeft_toLeftOf="parent"
15 app:layout_constraintRight_toRightOf="parent"
16 app:layout_constraintTop_toTopOf="parent" />
17 <ImageView
18 android:id="@+id/src_img2"
19 android:layout_width="0dp"
20 android:layout_height="0dp"
21 app:layout_constraintBottom_toTopOf="@id/compare_button"
22 app:layout_constraintLeft_toLeftOf="parent"
23 app:layout_constraintRight_toRightOf="parent"
24 app:layout_constraintTop_toBottomOf="@id/src_img1" />
25 <Button
26 android:id="@+id/compare_button"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:text="比較"
30 android:onClick="onCameraDevitionClick"
31 app:layout_constraintBottom_toTopOf="@id/result_img"
32 app:layout_constraintLeft_toLeftOf="parent"
33 app:layout_constraintRight_toRightOf="parent"
34 app:layout_constraintTop_toBottomOf="@id/src_img2" />
35 <ImageView
36 android:id="@+id/result_img"
37 android:layout_width="0dp"
38 android:layout_height="0dp"
39 app:layout_constraintBottom_toBottomOf="parent"
40 app:layout_constraintLeft_toLeftOf="parent"
41 app:layout_constraintRight_toRightOf="parent"
42 app:layout_constraintTop_toBottomOf="@id/compare_button" />
43
44</androidx.constraintlayout.widget.ConstraintLayout>