2013-03-19 52 views
1

我已經創建了一個相機應用程序,該應用程序在相機預覽中具有圖像。例如,這個圖像就是一頂帽子,我想爲他戴上一頂帽子形象的人的照片。這是我做了什麼:如何拍攝帶有.png圖像的圖片

 mFrameLayout = new FrameLayout(this); 

     mPreview = new Preview(this); 
     mFrameLayout.addView(mPreview); 

     mImage = new ImageView(this); 

     FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(100, 100); 
     layoutParams.leftMargin = 200; 
     layoutParams.topMargin = 100; 
     mImage.setLayoutParams(layoutParams); 
     mImage.setImageResource(R.drawable.gorro); 
     mFrameLayout.addView(mImage); 

     mFrameLayout.setOnClickListener(this); 

     setContentView(mFrameLayout); 

預覽類:

class Preview extends ViewGroup implements SurfaceHolder.Callback { 
    private final String TAG = "Preview"; 

    SurfaceView mSurfaceView; 
    SurfaceHolder mHolder; 
    Size mPreviewSize; 
    List<Size> mSupportedPreviewSizes; 
    Camera mCamera; 

    Preview(Context context) { 
     super(context); 

     mSurfaceView = new SurfaceView(context); 
     addView(mSurfaceView); 
    } 

而這個類有所有實施的表面的方法。 當我觸摸相機上的任何地方時,拍攝照片。這裏是代碼:

public void onClick(View arg0) { 
     Toast.makeText(this, "Taken!", Toast.LENGTH_LONG).show(); 
     mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
    } 

    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { 
     public void onPictureTaken(byte[] imageData, Camera c) { 
      if (imageData != null) { 
       String root = Environment.getExternalStorageDirectory() 
         .toString(); 
       File myDir = new File(root + "/saved_images2"); 
       myDir.mkdirs(); 
       Random generator = new Random(); 
       int n = 10000; 
       n = generator.nextInt(n); 
       String fname = "Image-" + n + ".jpg"; 
       File file = new File(myDir, fname); 
       if (file.exists()) 
        file.delete(); 
       try { 
        FileOutputStream out = new FileOutputStream(file); 
        out.write(imageData); 
        out.flush(); 
        out.close(); 
        Log.d("teste", "onPictureTaken - wrote bytes: " 
          + imageData.length); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 

問題是,當我用.png圖片拍照時,照片保存時沒有它。

如何在拍攝照片時保存.png圖像?

回答

0

您必須將您的imageData轉換爲PictureCallBack中的位圖,然後使用方法drawBitmap的畫布將您的帽子位圖繪製到攝像頭捕獲的圖像上。最後,您可以將結果位圖保存到文件中。所以:

Bitmap cameraBitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); 
Canvas canv = new Canvas(cameraBitmap); 
canv.drawBitmap(.... your hat image);