3

私のアプリには、ユーザーが写真をキャプチャし、その写真に描画を追加できる機能があります。

すべての写真のサイズが正確に変更されます900 x 900。ユーザーが画像に描画を追加できるようにします。透明な画像の上にtransparent image重ねて描画します。original image描画は を使用して行われcanvasます。

720 x 480ただし、 (高さ×幅)を持つデバイスで描画する場合。900 x 900透明な画像を作成してから まで線を引く0,0900,900、キャンバスは から までの線のみを描画0,0480,480ます。

以下は、コードのそれぞれの部分です。

キャンバスの準備:

holder = getHolder();
if (holder.getSurface().isValid()) {

    Canvas canvas = holder.lockCanvas();
    canvas.drawColor(Color.TRANSPARENT,  PorterDuff.Mode.CLEAR);
    /* original image is 900 x 900 */
    overlayBitmap = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig());
    canvas.setBitmap(overlayBitmap);
}

描画線:

canvas.drawLine(0, 0, 900, 900, paint);

なぜこの問題が発生しているのかわかりません。canvas??を使用しているためです。回避策はありますか?どんな助けでも大歓迎です:-)

4

2 に答える 2

1

この投稿についてさらに読んで、このcanvas投稿の助けを借りて、問題を修正することができました。

問題はにありましたcanvas clip rectangle(0,0,480,480)デバイスの表示がデフォルトだったのでしょ720 x 480うか?したがって、ビットマップ上にあるものはすべて、常に480 x 480.

後で、次のようにコードを変更しました。

holder = getHolder();
if (holder.getSurface().isValid()) {

    Canvas canvas = holder.lockCanvas();
    canvas.drawColor(Color.TRANSPARENT,  PorterDuff.Mode.CLEAR);
    /* original image is 900 x 900 */
    overlayBitmap = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig());
    canvas.setBitmap(overlayBitmap);

    /* set extended clip rectangle for the larger target bitmap */
    Rect clipRect = canvas.getClipBounds();
    clipRect.set(0, 0, image.getWidth(), image.getHeight());
    canvas.clipRect(clipRect, Region.Op.REPLACE);

}

クリップの長方形のサイズ画像サイズに置き換えた後、すべてがうまくいきました。

于 2016-02-11T10:57:51.867 に答える