2010-05-25 2 views
7

Ich testete dies auf meinem Motorola Droid, und es funktionierte wie beabsichtigt. Ich bin jedoch besorgt, dass dies sein könnte:Ist es sicher, einen Teil einer Android-Bitmap mit etwas Überlappung auf sich selbst zu zeichnen?

  1. schrecklich ineffizient.
  2. Nicht garantiert auf allen Android-Handys funktionieren.

Code:

/* Create a simple 100 by 100 bitmap */ 
Bitmap myBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 

/* Create a canvas with which to draw on my bitmap */ 
Canvas myCanvas = new Canvas(myBitmap); 

/* Draw a subset of my bitmap onto itself, with the source rectangle and destination rectangle overlapping */ 
Rect sourceRect = new Rect(10, 0, 99, 99); 
Rect destRect = new Rect(0, 0, 89, 99); 
myCanvas.drawBitmap(myBitmap, sourceRect, destRect, null); 

Wie gesagt, dies in meinem Test gut zu funktionieren schien, aber wenn etwas blits auf anderen Plattformen durchgeführt wird, habe ich nicht immer in der Lage zu garantieren, dass es sicher ist, speicher- und leistungsbezogen, um eine grpahics-region in eine andere zu kopieren, wenn sich die Quelle und die Ziele überschneiden.

Ich würde jeden Einblick in diese begrüßen.

Antwort

0

Es sollte vollkommen sicher sein. Was Schnittpunkt - was könnte falsch sein? Wenn Sie in die Region kopieren, von der Sie kopieren, hängt dies von der Implementierung einschließlich Ihres Codes ab. Das schlimmste (eigentlich beste) Szenario ist, wenn es Byte für Byte kopiert wird und Sie eine Präfekt- "Zebra" -Replikation Ihrer Region haben, in der Streifen die Differenz zwischen Quell- und Zielregionen darstellen. Da jedoch die meisten IO-Operationen auch im Speicher gepuffert sind, wird Ihr Zebra wahrscheinlich eine Störung der Puffer-/Strip-Diskrepanz haben. Was ein bisschen lustig sein könnte wegen des Puffers, der Stripgröße und der tatsächlichen Position der Region im Speicher.

Mit anderen Worten, es kann wie Bild im Kaleidoskop aussehen, aber es ist vollkommen sicher.

Verwandte Themen