1

カメラのプレビューに画像があるカメラ アプリケーションを作成しました。たとえば、これは帽子の画像です。帽子の画像を頭にかぶった人の写真を撮りたいと思います。これは私がやったことです:

        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画像も保存するにはどうすればよいですか?

4

1 に答える 1

0

imageData を PictureCallBack で Bitmap に変換し、メソッド drawBitmap で Canvas を使用して、カメラからキャプチャした画像にハット ビットマップを描画する必要があります。最後に、結果のビットマップをファイルに保存できます。そう:

Bitmap cameraBitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
Canvas canv = new Canvas(cameraBitmap );
canv.drawBitmap(.... your hat image);
于 2013-03-19T15:50:44.637 に答える