6

私がやりたいのは、選択した位置で、画像の切り抜きを画面に描画することです。

これをビットマップに簡単にロードできます。サブセクションを描画します。

しかし、画像が大きい場合、これは明らかにメモリを使い果たします。

私の画面はサーフェスビューです。キャンバスなどもあります。

では、特定のオフセットで画像の一部を描画し、サイズを変更するにはどうすればよいでしょうか。原稿をメモリにロードせずに

正しい線に沿った答えを見つけましたが、正しく機能しません。ファイルからドローアブルを使用する。以下のコード試行。それが生成するランダムなサイズ変更は別として、それも不完全です。

例:

例

Drawable img = Drawable.createFromPath(Files.SDCARD + image.rasterName); 

    int drawWidth = (int) (image.GetOSXWidth()/(maxX - minX)) * m_canvas.getWidth();        
    int drawHeight = (int)(image.GetOSYHeight()/(maxY - minY)) * m_canvas.getHeight();

    // Calculate what part of image I need...
    img.setBounds(0, 0, drawWidth, drawHeight);

    // apply canvas matrix to move before draw...?
    img.draw(m_canvas);
4

1 に答える 1

5

BitmapRegionDecoder画像の指定された領域をロードするために使用できます。2 つの でビットマップを設定するメソッドの例を次に示しImageViewます。1 つ目は完全なイメージで、送信は完全なイメージの一部です。

private void configureImageViews() {

    String path = externalDirectory() + File.separatorChar
            + "sushi_plate_tokyo_20091119.png";

    ImageView fullImageView = (ImageView) findViewById(R.id.fullImageView);
    ImageView bitmapRegionImageView = (ImageView) findViewById(R.id.bitmapRegionImageView);

    Bitmap fullBitmap = null;
    Bitmap regionBitmap = null;

    try {
        BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder
                .newInstance(path, false);

        // Get the width and height of the full image
        int fullWidth = bitmapRegionDecoder.getWidth();
        int fullHeight = bitmapRegionDecoder.getHeight();

        // Get a bitmap of the entire image (full plate of sushi)
        Rect fullRect = new Rect(0, 0, fullWidth, fullHeight);
        fullBitmap = bitmapRegionDecoder.decodeRegion(fullRect, null);

        // Get a bitmap of a region only (eel only)
        Rect regionRect = new Rect(275, 545, 965, 1025);
        regionBitmap = bitmapRegionDecoder.decodeRegion(regionRect, null);

    } catch (IOException e) {
        // Handle IOException as appropriate
        e.printStackTrace();
    }

    fullImageView.setImageBitmap(fullBitmap);
    bitmapRegionImageView.setImageBitmap(regionBitmap);

}

// Get the external storage directory
public static String externalDirectory() {
    File file = Environment.getExternalStorageDirectory();
    return file.getAbsolutePath();
}

結果は画像全体 (上) と画像の一部 (下) です。

ここに画像の説明を入力

于 2012-11-14T17:35:05.553 に答える