2

Androidアプリで拡大ツールを作成しようとしています。このために、私はImageViewを持っており、これをビットマップに変換しました(ズーム/スケール係数を使用)。

imageView.setDrawingCacheEnabled(true);
Bitmap drawingCache = imageView.getDrawingCache(true);
Matrix matrix = new Matrix();
matrix.postScale(5, 5);        

Bitmap viewCapture = Bitmap.createBitmap(drawingCache, 0, 0, 
                                         drawingCache.getWidth(),
                                         drawingCache.getHeight(), 
                                         matrix, true);
imageView.setDrawingCacheEnabled(false);

現在、このビットマップ画像「viewCapture」をキャンバスに描画しています。ここでは、画像の一部のみをキャンバスにレンダリングしたいと思います。

「MatrixのsetRectToRect()」、「canvas.drawBitmap(bitmap、src、dst、paint)」のアプローチを使用してみました。しかし、適切に機能しませんでした。

SurfaceViewsを使用すると役に立ちますか?誰かがこの状況に遭遇しましたか?あなたの考え/アイデアを投稿してください。

4

2 に答える 2

3

以下を使用しないのはなぜですか?

 Canvas.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

srcは、描画するビットマップの領域に対応し、ビットマップを描画するdst場所を指定します。詳細については、http: //developer.android.com/reference/android/graphics/Canvas.htmlをご覧ください。

于 2011-12-15T21:17:00.387 に答える
0

これを行うと、トリミングされた画像ではなく、ビットマップの小さな画像が得られます。以下は、私が使用したスニペットです。

            Canvas c = holder.lockCanvas();
            c.drawRGB(10, 10, 10);              
            Rect src = new Rect((int)x - _image.getWidth(), (int) y - _image.getHeight(), (int)x + _image.getWidth(), (int) y + _image.getHeight());
            RectF dst = new RectF((int)x - 50, (int) y - 50, (int)x + 50, (int) y + 50);
            c.drawBitmap(_image, src, dst, null);
            holder.unlockCanvasAndPost(c);
于 2011-12-16T16:56:00.683 に答える