0

さて、これについてはグラフィックスの専門家に相談する必要があります。長方形のビットマップ (大) と円形のビットマップ (小) があります。大きな長方形のビットマップを小さな円形のビットマップの後ろに配置し、大きな長方形のビットマップを小さな円形のビットマップの形にしたいと考えています (つまり、長方形のビットマップをクリップするか、別の方法で)。小さい方の円形のビットマップにはある程度の透明度があるため、クリップされた長方形のビットマップは変換後に透けて見えます。私は次のことを試しました:

protected void onDraw(Canvas c) {

int sc = canvas.saveLayer(x, y, x + w, y + h, null,
                              Canvas.MATRIX_SAVE_FLAG |
                              Canvas.CLIP_SAVE_FLAG |
                              Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
                              Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
                              Canvas.CLIP_TO_LAYER_SAVE_FLAG);

canvas.drawBitmap(bmpSmallCircular, 0, 0, backgroundPaint);
backgroundPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
canvas.drawBitmap(bmpLargeRectangular, 0 , 0, backgroundPaint);
backgroundPaint.setXfermode(null);
canvas.restoreToCount(sc);

}

したがって、これで解決策の一部が得られますが、長方形のビットマップは小さい方のビットマップの上に描画されます (ただし、小さい方の形状を想定しています)。私はおそらく明らかな何かを見逃しており、正しい方向へのポイントまたはプッシュに感謝します。ありがとう!

4

1 に答える 1

0

最初に大きなビットマップを描画してから、ステートメントを交換するために必要な小さなビットマップを描画します

canvas.drawBitmap(bmpLargeRectangular, 0 , 0, backgroundPaint);
canvas.drawBitmap(bmpSmallCircular, 0, 0, backgroundPaint);
于 2012-04-04T10:12:45.337 に答える