2

フレームバッファからスクリーンキャプチャを取得しようとしましたが、ここから次のコードを使用したレイアウトビューでうまく機能します:

String mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_APPEND;   

// create bitmap screen capture
Bitmap bitmap;
View v1 = mCurrentUrlMask.getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

OutputStream fout = null;
imageFile = new File(mPath);

try {
    fout = new FileOutputStream(imageFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
    fout.flush();
    fout.close();

} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

しかし、レイアウトビューまたは透明なWebページの背景でもカメラビューを使用しているため、カメラビューでレイアウトビューをキャプチャしたいと考えています。1 つのターンアラウンドは、カメラ画像とレイアウト ビューを別々に取得し、それらを互いに重ねて、新しいビットマップを保存することです。

誰かがこれに対する適切な解決策を提案できますか? 前もって感謝します

4

2 に答える 2

0

2 つの画像を組み合わせるには、2 つの画像を重ね合わせるために 100% 動作するこのコードに従うことをお勧めします。

 Bitmap border = BitmapFactory.decodeResource(getResources(), R.drawable.vignette2);
int width = bmp.getWidth();
int height = bmp.getHeight();
change = Bitmap.createScaledBitmap(change, width, height, false); // change is Bitmap
Canvas canvas = new Canvas(change);
Bitmap scaledBorder = Bitmap.createScaledBitmap(border,width,height, false);
canvas.drawBitmap(scaledBorder, 0, 0,null);
//canvas.drawBitmap(k, 0, 0, null);
view.setImageBitmap(change); // view is the imageView

ビューを保存する部分になりましたが、簡単な方法は次のとおりです

view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        save = view.getDrawingCache(); // save is a Bitmap

その後 :

                final FileOutputStream out = new FileOutputStream(file);
            save.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));
            Toast.makeText(getApplication(), "Image Saved",
                    Toast.LENGTH_SHORT).show();

これにより、イメージビューのビューが保存されます。または、そのレイアウトの場合は、レイアウトを設定して名前を付けてから、に置き換えてview ください。保存が成功したかどうかを確認した後、設定することを忘れないでください

        view.setDrawingCacheEnabled(false); 
于 2013-02-09T12:55:54.927 に答える
0

コードをコメントとして投稿できなかったので、onActivtity でその特定のメソッドを渡すか、インテントまたはそのカスタム カメラを送信した後に渡すことができます。カメラ ボタンをクリックすると、それを制御できます。ビューをキャプチャするメソッドを追加するだけです。これは、ビューを保存するための私の方法です。

void Save() {
    if (null != view.getDrawable()) {
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        save = view.getDrawingCache();
        final File myDir = new File(folder);
        myDir.mkdirs();
        final Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        final String fname = "StyleMe-" + n + ".png";
        final File file = new File(myDir, fname);
        if (file.exists())
            file.delete();
        try {
            final FileOutputStream out = new FileOutputStream(file);
            save.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));
            Toast.makeText(getApplication(), "Image Saved",
                    Toast.LENGTH_SHORT).show();
        } catch (final Exception e) {
            Toast.makeText(getApplication(),
                    "Something Went Wrong check if you have Enough Memory",
                    Toast.LENGTH_LONG).show();
        }
    } else {
        final Toast tst = Toast.makeText(getApplication(),
                "Please Select An Image First", Toast.LENGTH_LONG);
        tst.setGravity(Gravity.CENTER, 0, 0);
        tst.show();
    }
    view.setDrawingCacheEnabled(false);
}

ビューを継続的に保存するには、 loop を追加します。ループが始まるカメラボタンをクリックすると!! そして、ここで私の保存方法では、名前のオーバーレイについて心配する必要はありません:)。ランダムに各画像の名前を生成します!

于 2013-02-09T13:06:56.763 に答える