Der Code ein Bitmap in eine andere ist wie folgt zu kopieren:
Rect src = new Rect(0, 0, 50, 50);
Rect dst = new Rect(50, 50, 200, 200);
canvas.drawBitmap(originalBitmap, src, dst, null);
, der angibt, dass Sie die linke obere Ecke (50x50) einer Bitmap, und dann strecken, dass in ein 150x150 Bitmap kopieren möchten, und Schreibe es 50px Offset von der oberen linken Ecke der Leinwand.
Sie können das Zeichnen über invalidate() auslösen, aber ich empfehle die Verwendung eines SurfaceView, wenn Sie Animation machen. Das Problem mit invalidate ist, dass es nur zeichnet, wenn der Thread in den Leerlauf geht, so dass Sie ihn nicht in einer Schleife verwenden können - er würde nur den letzten Frame zeichnen. Hier sind einige Links zu anderen Fragen, die ich über Grafiken beantwortet habe. Sie könnten nützlich sein, um zu erklären, was ich meine.
Als Reaktion auf die Kommentare finden Sie hier weitere Informationen: Wenn Sie das Canvas von einem SurfaceHolder.lockCanvas() erhalten, dann glaube ich nicht, dass Sie die restlichen Daten in eine Bitmap kopieren können. Aber das ist nicht das, wofür diese Kontrolle ist - Sie benutzen es nur, wenn Sie alles aussortiert haben und bereit sind zu zeichnen.
Was Sie tun möchten, ist eine Leinwand erstellen, die in eine Bitmap zeichnet mit
Canvas canvas = new Canvas(yourBitmap)
Sie können dann, was Transformationen und Zeichnung ops Sie wünschen. yourBitmap enthält alle neuesten Informationen.Dann Sie verwenden die Oberfläche Halter wie so:
Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)
diese Weise werden Sie immer yourBitmap haben, die in ihm, was Informationen hat Sie zu erhalten versuchen.
Es tut mir leid, ich verstehe immer noch nicht eins: Sie zeichnen in eine Leinwand, nicht in eine Bitmap. Da Canvas, soweit ich es verstehe, schreibgeschützt ist, können Sie das Ziel nicht auf ein NEUES zeichnen. –
Ja, Sie zeichnen nicht direkt in Bitmaps, sondern mithilfe eines Canvas. Verwenden Sie etwas wie folgt: 'Bitmap someBitmap = Bitmap.createBitmap (Breite, Höhe, Bitmap.Config.RGB_565);' um ein Bitmap mit bestimmten Dimensionen und Farbraum zu erstellen, dann 'Canvas Canvas = neues Canvas (someBitmap);' zu machen Zeichnungsbefehle zu diesem Canvas ändern die Bitmap. –
Also, wenn ich das Canvas von einem SurfaceHolder mit lockCanvas bekomme, habe ich keine Möglichkeit, auf dieses Bitmap zum Lesen zuzugreifen? –