1

ビューグループ オブジェクトから完全なビットマップを取得することは可能ですか?

このコードは、現在画面に表示されているビュー グループから「スクリーンショット」を取得しますが、ビュー全体と、現在画面に表示されていないものも必要です。

public void export(ViewGroup view){
    view.setDrawingCacheEnabled(true);
    view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    Bitmap bitmap = view.getDrawingCache(true);
}
4

2 に答える 2

0

ここでは、ScrollView を使用してビュー全体をビットマップに変換したので、スクロールビューの代わりに linerlayout などの他のビュー グループを使用できます。

    Bitmap map = loadBitmapFromView(getApplicationContext(),scrollView);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            map.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            //you can create a new file name "test.jpg" in sdcard folder.
            File f = new File("/sdcard" +"/" + "mainemailpdf.jpg");
            f.createNewFile();
            //write the bytes in file
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
            bArray = bytes.toByteArray();
            // remember close de FileOutput
            fo.close();

loadBitmapFromView メソッドの場合は次のとおりです。

public static Bitmap loadBitmapFromView(Context context, View v) {

        Toast.makeText(context,
                v.getMeasuredHeight() + "::::::::::::" + v.getMeasuredWidth(),
                Toast.LENGTH_LONG).show();
        if (v.getMeasuredHeight() > 0) {

            v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                    Bitmap.Config.ARGB_8888);

            Canvas c = new Canvas(b);

            v.layout(0, 0, v.getWidth(), v.getWidth());

            v.draw(c);

            return b;

        }

        return null;

    }

私はそれが役立つことを願っています:)

どんな質問でも教えてください。

于 2013-04-09T07:11:37.037 に答える
0

Android システムがビットマップを縮小するため、これは不可能です。たとえば、ビットマップのサイズが 480*800 の場合、そのサイズは 480*800*4 = 1536000 です。4 を乗算するのは、各ピクセルが 4 バイト (RGBA) であるためです。

スケーリングされていないすべての画像で 1.5 メガ以上を意味します。Android が画像を縮小しない場合、画像を数回読み込んだ後に OutOfMemoryException が発生する可能性があります。3 つのオプションがあるため:

1) view.draw(canvas) 画像の可視部分を取得します(実際に画面に描画されているもののみ)

2) getDrawingCache() - 縮小された画像が表示されます。

3)ビットマップをディスクに保存し、要求されたときにそこからロードするカスタムビューを作成します

于 2014-05-31T11:25:05.503 に答える