개발/안드로이드

Bitmap 에서 백그라운드 투명처리

림쌍월 2020. 11. 16. 15:47

현재의 상황을 설명하면

사용자로부터 입력받는 서명 이미지를 화면에 디스플레이 해줄 것인데 이게 배경까지 같이 나오면서 화면에 보여주어야 하는 정보까지 덮어쓰게 되는 현상이 발생 .. 간단한 옵션으로 처리가 될줄 알고 찾아 보았는데 의외로 간단하지 않았다.

 

                <!-- 서명 이미지 View -->
                <ImageView
                    android:id="@+id/img_sign"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background= "#00FFFFFF"                     (1)
                    android:background="@android:color/transparent"	(2)   
                    />

현 화면상의 Image뷰에 암만 (1) , (2)옵션을 주어도 않되어서 답답함에

찾아보니 이것저것 주절이 주절이 뭔가 설명하는게 있기는 하지만 안드로이드는 주전공이 아니기에

디스플레이 될 bitmap 이미지정보를 받아와서 각 픽셀을 컨트롤 하는 것으로 찾아서 수정 완료

 

private Bitmap makeTransparent(Bitmap bit) {
	int width = bit.getWidth();
	int height = bit.getHeight();

	Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
	int[] allpixels = new int[myBitmap.getHeight() * myBitmap.getWidth()];
	bit.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
	myBitmap.setPixels(allpixels, 0, width, 0, 0, width, height);
	for (int i = 0; i < myBitmap.getHeight() * myBitmap.getWidth(); i++) {
		if (allpixels[i] == Color.WHITE) { // 하얀색을 투명하게 변환
			allpixels[i] = Color.alpha(Color.TRANSPARENT);
		}
	}
	myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
	return myBitmap;
}

아!~ 안드로이드는 나랑은 않맞는거 같아 ..

자바 람다가 않맞는건가?