마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

카메라 프리뷰위에 이미지

0 추천

카메라 프리뷰 화면위에 새로운 뷰를 사용해 이미지를 띄우고 싶습니다. 텍스트 같은경우는 잘 뜨는데 이미지는 뜨지않네요 코드 어떤부분을 고쳐야 될지 도와주시면 감사하겠습니다.

public class MainActivity extends Activity {
    private Preview mPreview;
    private DrawOnTop mDrawOnTop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        int permissionCheck = ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA);
        if(permissionCheck != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    0);
        } else {
            createPreview();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            createPreview();
        } else {
            finish();
        }
        return;
    }

    private void createPreview(){
       mDrawOnTop = new DrawOnTop(this);
        mPreview = new Preview(this, mDrawOnTop);
        setContentView(mPreview);
        addContentView(mDrawOnTop, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    }
}

class DrawOnTop extends View {

    Bitmap imgMos;
    Paint paint = new Paint();

    public DrawOnTop(Context context){
        super(context);
    }
    protected void onDraw(Canvas canvas){
        imgMos = BitmapFactory.decodeResource(getResources(),R.drawable.mos_01);
        imgMos = Bitmap.createScaledBitmap(imgMos, 20, 20, true);
        canvas.drawText("가나다" , 10, 10 ,paint);
        paint.setTextAlign(Paint.Align.LEFT);
        paint.setTextSize(60);
    }
}
 
class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
DrawOnTop mDrawOnTop;
boolean mFinished;

Preview(Context context, DrawOnTop drawOnTop) {
super(context);

mDrawOnTop = drawOnTop;
mFinished = false;

// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
try {
mCamera.setPreviewDisplay(holder);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setRotation(180);
mCamera.setParameters(parameters);


// Preview callback used whenever new viewfinder frame is available
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera)
{
if ( (mDrawOnTop == null) || mFinished )
return;

mDrawOnTop.invalidate();
}
});
}
catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}

public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when we return, so stop the preview.
// Because the CameraDevice object is not a shared resource, it's very
// important to release it when the activity is paused.
mFinished = true;
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(320, 240);
parameters.setPreviewFrameRate(15);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(parameters);
mCamera.startPreview();
}

}
 
혀빙 (360 포인트) 님이 2017년 4월 15일 질문

1개의 답변

0 추천
이미지를 그리지 않으니 화면에 표시되지 않는 것입니다.
익명사용자 님이 2017년 4월 17일 답변
...