我在我的摩托罗拉Droid上测试了它,它按预期工作.但是,我担心这可能是:
码:
/* 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);
Run Code Online (Sandbox Code Playgroud)
正如我所说,这似乎在我的测试中运行良好,但是当在其他平台上执行bit blits时,我并不总能保证将一个grpahics区域复制到另一个grpahics区域是安全的,内存和性能方面的.源和目的地相交.
我欢迎任何有关此事的见解.
它应该是绝对安全的。至于交叉点 - 可能出了什么问题?如果您要复制到从中复制的区域,那么这取决于包括您的代码在内的实现。最糟糕(实际上最好)的情况是逐字节复制,并且您将获得区域的完美“斑马”复制,其中条带是源区域和目标区域之间的差异。然而,由于大多数 IO 操作甚至在内存中都会被缓冲,因此您的 zebra 可能会受到缓冲区/条带差异的干扰。由于缓冲区、条带大小和内存中区域的实际位置,这可能有点有趣。
换句话说,它可能看起来像万花筒中的图像,但它是完全安全的。