0

Android画面のスクリーンショットを撮り、canvas.drawBitmapを使用して、キャプチャした画像(透かし)に別の画像を描画します。

SDカードに透かし(別の画像-visit.jpgと言う)画像をコピーすると、すべて適切な結果が得られます。キャプチャされた画像の幅は500ピクセルで、visit.jpgの幅は339ピクセルです。

File file = new File( Environment.getExternalStorageDirectory() + "/visit.jpg");
Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

しかし、透かし画像をSDカードにコピーしたくないので、resフォルダーの画像をキャプチャした画像に描画する必要があるため、使用しました

Bitmap visit = BitmapFactory.decodeResource(getApplicationContext().getResources(),R.drawable.visit);

キャンバスに描画して保存すると、保存されますが、透かし画像(visit.jpg)が伸びて、サイズが339ピクセルを超えます。なぜ ?

私のコードは:

        View v1 = findViewById(android.R.id.content).getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap screenshot = Bitmap.createBitmap(v1.getDrawingCache());

        Bitmap cropimg = Bitmap.createBitmap(screenshot, 50, 0, screenshot.getWidth()-100, 592);
        v1.setDrawingCacheEnabled(false);


        Bitmap Rbitmap = Bitmap.createBitmap(cropimg).copy(Config.ARGB_8888, true);


        Bitmap visit = BitmapFactory.decodeResource(getApplicationContext().getResources(),R.drawable.visit); // image accessed from drawable
        Canvas canvas = new Canvas(Rbitmap);       

        File file = new File( Environment.getExternalStorageDirectory() + "/visit.jpg"); // the image copied on sd card
        Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

        canvas.drawBitmap(visit, 0, 570, null); // if i put myBitmap instead of visit i.e.  canvas.drawBitmap(myBitmap, 0, 570, null); then visit.jpg image gets draw properly with 339pixel width without strtch
        canvas.save();
4

1 に答える 1

1

編集:より簡単な方法を忘れて、画像を /res/drawable-nodpi フォルダーに入れました。

Android は、画面密度に応じてリソース イメージを自動的にスケーリングします。デフォルトのドローアブル フォルダーは mdpi に対応しているため、hdpi デバイスを使用している場合は画像が拡大されます。画像を /res/raw/ フォルダーに入れてから、次のように開くことができます。

Uri imageUri = Uri.parse("android.resource://your.app.package/raw/visit");
InputStream is = context.getContentResolver().openInputStream(imageUri);
Bitmap bmp = BitmapFactory.decodeStream(is, null, opts);
于 2013-01-07T14:57:57.520 に答える