카메라의 미리보기를 가져 와서 사각형을 그려 봅니다. 사용자가 영역을 선택하면 해당 좌표가 표시되지만 이미지를 ImageView에 표시하면 크기가 커집니다 크기). 세부 사항에가는 :
1_ 내 주요 레이아웃은 내가 android.hardware.Camera
의 인스턴스가 차례로 내 활동에서 카메라 미리보기
2_를 포함하는 FrameLayout이 포함되어 있고 나는 그것을 PictureCallback
인스턴스를 연결하고 구현 한 이는있는 LinearLayout입니다 onPictureTaken
방법은 비트 맵을 얻기 위해 :캔버스로 그리기 후 비트 맵 크기 조정
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPurgeable = true;
opts.inInputShareable = true;
opts.inScaled = false;
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
3_After 사용자가 영역을 선택하고, I는 직사각형 그리기 위해 그 좌표를 가지고 사진 촬영 :
preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mCameraPreview);//mCameraPreview is an instance of "CameraPreview extends SurfaceView implements SurfaceHolder.Callback"
preview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent me) {
/* read the coordinates x1, y1, x2, y2 */
//the commented code was already tested, same result
//Bitmap tempBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
Bitmap tempBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);
Canvas canvas = new Canvas(tempBitmap);
Paint paint = new Paint();
paint.setColor(Color.GREEN);
canvas.drawLine(x1, y1, x2, y1, paint);
canvas.drawLine(x1, y1, x1, y2, paint);
canvas.drawLine(x1, y2, x2, y2, paint);
canvas.drawLine(x2, y1, x2, y2, paint);
ImageView imageView = new ImageView(CameraActivity.this);
imageView.setImageBitmap(tempBitmap);
//the commented code was already tested, same result
//imageView.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap));
imageView.draw(canvas);
LayoutParams lp = new LayoutParams(tempBitmap.getWidth(), tempBitmap.getHeight());
imageView.setLayoutParams(lp);
preview.addView(imageView);
}
}
,536을
최종 결과는 직사각형이 그려지지만 비트 맵이 원래보다 훨씬 크다는 것입니다. 그 이유는 무엇입니까? 미리 감사드립니다.
추 신 : tempBitmap을 빌드 할 때 bitmap.getWidth()/2를 시도했는데 이미지가 거의 원래 크기 였지만 사각형도 축소되었습니다.
편집 : 이미 imageView.setAdjustViewBounds(true)
및 imageView.setScaleType(ImageView.ScaleType.FIT_CENTER)
(ScaleType.CENTER, CENTER_CROP, FIT_XY 및 MATRIX 포함)으로 이미 시도했습니다. 아무도 hapenning 무엇인지 압니까 ???
안녕 @Swarnendu의 응답을 주셔서 감사합니다,하지만 응용 프로그램은 여전히 스케일 비트 맵을 보여줍니다; 나는 이미지 뷰가 비트 맵에 스케일을 적용한다는 것을 몰랐다. 나는 문제를 해결하기 위해 그 실마리를 따라하려고 노력할 것이다. 다시 한 번 감사드립니다. – maxivis