2013-05-29 3 views
1

카메라의 미리보기를 가져 와서 사각형을 그려 봅니다. 사용자가 영역을 선택하면 해당 좌표가 표시되지만 이미지를 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 무엇인지 압니까 ???

답변

0

기본적으로 이미지보기는 비트 맵을 비트 맵에 적용하여 비트 맵을 이미지 뷰의 전체 영역에 맞 춥니 다.

이 코드

ImageView imageView = new ImageView(CameraActivity.this); 
imageView .setImageMatrix (new Matrix()); 
imageView .setScaleType(ImageView.ScaleType.MATRIX); 
imageView.setImageBitmap(tempBitmap); 

을 시도하며 사용자 코드에서이 줄을 제거

imageView.draw(canvas); 
+0

안녕 @Swarnendu의 응답을 주셔서 감사합니다,하지만 응용 프로그램은 여전히 ​​스케일 비트 맵을 보여줍니다; 나는 이미지 뷰가 비트 맵에 스케일을 적용한다는 것을 몰랐다. 나는 문제를 해결하기 위해 그 실마리를 따라하려고 노력할 것이다. 다시 한 번 감사드립니다. – maxivis