9

基本的に、私は長方形のビットマップを持っており、その中に長方形のビットマップを含む正方形の寸法を持つ新しいビットマップを作成したいと考えています。

たとえば、ソース ビットマップの幅が 100 で高さが 400 の場合、幅が 400 で高さが 400 の新しいビットマップが必要です。次に、この新しいビットマップの中心にソース ビットマップを描画します (理解を深めるために、添付の画像を参照してください)。

期待される結果の例

以下の私のコードは正方形のビットマップをうまく作成しますが、ソースビットマップはそれに描画されていません。その結果、完全に黒のビットマップが残ります。

コードは次のとおりです。

Bitmap sourceBitmap = BitmapFactory.decodeFile(sourcePath);

Bitmap resultBitmap= Bitmap.createBitmap(sourceBitmap.getHeight(), sourceBitmap.getHeight(), Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(resultBitmap);

Rect sourceRect = new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight());
Rect destinationRect = new Rect((resultBitmap.getWidth() - sourceBitmap.getWidth())/2, 0, (resultBitmap.getWidth() + sourceBitmap.getWidth())/2, sourceBitmap.getHeight());
c.drawBitmap(resultBitmap, sourceRect, destinationRect, null);

// save to file
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyApp");
File file = new File(mediaStorageDir.getPath() + File.separator + "result.jpg");
try {
    result.compress(CompressFormat.JPEG, 100, new FileOutputStream(file));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

私が間違っていることは何か分かりますか?

4

2 に答える 2

20

これを試して:

    private static Bitmap createSquaredBitmap(Bitmap srcBmp) {
        int dim = Math.max(srcBmp.getWidth(), srcBmp.getHeight());
        Bitmap dstBmp = Bitmap.createBitmap(dim, dim, Config.ARGB_8888);

        Canvas canvas = new Canvas(dstBmp);
        canvas.drawColor(Color.WHITE);
        canvas.drawBitmap(srcBmp, (dim - srcBmp.getWidth()) / 2, (dim - srcBmp.getHeight()) / 2, null);

        return dstBmp;
    }
于 2014-05-22T13:59:35.627 に答える
2

おっと、問題が何であるかを理解しました。に間違っBitmapて描いていましたCanvas。将来誰かに役立つ場合は、Canvas が既にアタッチされており、コンストラクターで指定したビットマップに描画されることを覚えておいてください。だから基本的に:

これ:

c.drawBitmap(resultBitmap, sourceRect, destinationRect, null);

実際には次のようになります。

c.drawBitmap(sourceBitmap, sourceRect, destinationRect, null);
于 2013-11-02T19:34:02.940 に答える