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圖像?