2010-05-25 25 views
7

Tôi đã thử nghiệm điều này trên Motorola Droid của tôi và nó hoạt động như dự định. Tuy nhiên, tôi lo ngại rằng điều này có thể là:Có an toàn khi vẽ một phần của bitmap Android lên bản thân với một số chồng lên nhau không?

  1. Rất không hiệu quả.
  2. Không đảm bảo hoạt động trên tất cả các điện thoại Android.

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

Như tôi đã nói, điều này dường như làm việc tốt trong thử nghiệm của tôi, nhưng khi thực hiện BLITS bit trên các nền tảng khác, tôi đã không luôn luôn có thể đảm bảo rằng nó an toàn, bộ nhớ và hiệu suất-khôn ngoan, để sao chép một khu vực grpahics khác khi nguồn và các điểm đến giao nhau.

Tôi muốn chào đón bất kỳ thông tin chi tiết nào về điều này.

Trả lời

0

Nó phải hoàn toàn an toàn. Đối với giao lộ - điều gì có thể sai? Nếu bạn đang sao chép vào vùng mà bạn có bản sao thì nó phụ thuộc vào việc triển khai bao gồm cả mã của bạn. Kịch bản tồi tệ nhất (thực sự tốt nhất) là khi nó được sao chép byte theo byte và bạn sẽ có sự sao chép "zebra" của vùng của bạn, nơi dải là sự khác biệt giữa vùng nguồn và đích. Tuy nhiên, vì hầu hết các hoạt động IO ngay cả trong bộ nhớ đều được đệm sau đó zebra của bạn có thể sẽ có sự can thiệp của sự khác biệt bộ đệm/dải. Mà có thể là một chút buồn cười vì bộ đệm, kích thước dải và vị trí thực tế của khu vực trong bộ nhớ.

Nói cách khác, nó có thể trông giống như hình ảnh trong kính vạn hoa nhưng nó hoàn toàn an toàn.

Các vấn đề liên quan