Jak utworzyć kwadratową bitmapę z prostokątnej mapy bitowej w Androidzie

Zasadniczo mam prostokątną bitmapę i chcę utworzyć nową bitmapę o kwadratowych wymiarach, która będzie zawierać prostokątną bitmapę wewnątrz niej.

Na przykład, jeśli źródłowa bitmapa ma szerokość: 100 i wysokość: 400, chcę nową bitmapę o szerokości: 400 i wysokości: 400. Następnie narysuj bitmapę źródłową wyśrodkowaną wewnątrz tej nowej mapy bitowej (patrz załączony obraz, aby uzyskać lepsze zrozumienie).

Mój kod poniżej tworzy dokładną bitmapę kwadratową, ale źródłowa mapa bitowa nie jest w nią wciągnięta. W rezultacie pozostała mi bitmapa całkowicie czarna.

Oto kod:

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();
}

Jakiś pomysł, co robię źle?

questionAnswers(2)

yourAnswerToTheQuestion