So erstellen Sie eine quadratische bitmap aus einem rechteckigen bitmap in Android
Grundsätzlich habe ich eine rechteckige bitmap und wollen, erstellen Sie eine neue Bitmap mit quadratischen Abmessungen, die enthalten die rechteckige bitmap drin.
So, zum Beispiel, wenn die Quell-bitmap Breite:100 und Höhe:400, ich möchte eine neue bitmap mit Breite:400 Höhe:400. Ziehen Sie dann die Quell-bitmap zentriert innerhalb dieser new bitmap (siehe die beigefügten Bild für ein besseres Verständnis).
Meine folgende code erstellt die Platz-bitmap in Ordnung, aber die Quell-bitmap wird nicht rein gezogen. Als ein Ergebnis, ich bin Links mit einer bitmap, die komplett schwarz ist.
Hier ist der code:
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();
}
Irgendeine Idee, was ich falsch mache?
- Warum verwenden Sie eine Leinwand und nicht um eine Bildansicht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Huch, gerade gemerkt, was das problem ist. Ich zeichnete die falsche
Bitmap
zu denCanvas
. Wenn es hilft jemand in der Zukunft, denken Sie daran, dass die Leinwand ist bereits angebracht und werden Farbe auf die bitmap geben Sie in Ihrem Konstruktor. Also im Grunde:Diese:
Sollte eigentlich sein: