2012-05-02 37 views
10

Các mã sau đây định nghĩa bitmap của tôi:Vẽ bitmap được chia tỷ lệ cho canvas?

Resources res = context.getResources(); 

    mBackground = BitmapFactory.decodeResource(res, 
      R.drawable.bg2); 

    //scale bitmap 
    int h = 800; // height in pixels 
    int w = 480; // width in pixels  
    Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true); // Make sure w and h are in the correct order 

... Và đoạn mã sau được sử dụng để thực hiện/vẽ nó (bitmap chưa định tỷ lệ):

c.drawBitmap(mBackground, 0, 0, null); 

Câu hỏi của tôi là, làm thế nào có thể tôi đặt nó để vẽ bitmap thu nhỏ được trả về dưới dạng "Bitmap thu nhỏ", chứ không phải bản gốc?

Trả lời

25

Định nghĩa một biến thành viên lớp mới: Bitmap mScaledBackground; Sau đó, gán bitmap quy mô vừa tạo với nó: mScaledBackground = scaled; Sau đó, hãy gọi trong phương pháp bốc thăm của bạn: c.drawBitmap(mScaledBackground, 0, 0, null);

Lưu ý rằng nó không phải là một ý tưởng tốt để kích thước màn hình mã cứng theo cách bạn đã làm trong đoạn mã ở trên. Tốt hơn là nên lấy kích thước màn hình điện thoại của bạn theo cách sau:

int width = getWindowManager().getDefaultDisplay().getWidth(); 
int height = getWindowManager().getDefaultDisplay().getHeight(); 

Và nó sẽ là lẽ tốt hơn không phải khai báo một bitmap mới với mục đích duy nhất của bản vẽ nền ban đầu của bạn theo một cách quy mô. Các bitmap tiêu tốn rất nhiều tài nguyên quý giá và thường là một chiếc điện thoại bị giới hạn ở một vài mb bitmap bạn có thể tải trước khi ứng dụng của bạn không đúng. Thay vào đó bạn có thể làm một cái gì đó như thế này:

Rect src = new Rect(0,0,bitmap.getWidth()-1, bitmap.getHeight()-1); 
Rect dest = new Rect(0,0,width-1, height-1); 
c.drawBitmap(mBackground, src, dest, null); 
+1

câu trả lời của bạn làm việc cho tôi, nhưng trừ 1 từ chiều rộng và chiều cao trong đối số đã hiển thị một dòng (từ bitmap khác ở nền) ở bên phải và dưới cùng của bitmap được hiển thị, loại bỏ -1 làm việc tốt. – akshay7692

+1

Tôi biết đây là một bài đăng cũ hơn bây giờ. Nhưng đối với Android 7.0+, bạn không thể dựa vào chiều rộng/chiều cao hiển thị đầy đủ khi ở chế độ chia đôi màn hình. Vì vậy, đối với bất cứ ai sử dụng giải pháp này, bạn nên ghi nhớ điều đó. – MCLLC

+0

theo cách này sẽ vẽ bitmap rất chậm? – Amos

2

Để vẽ bitmap quy mô bạn muốn tiết kiệm bitmap quy mô của mình trong một lĩnh vực ở đâu đó (ở đây gọi là mScaled) và gọi:

c.drawBitmap(mScaled,0,0,null); 

trong phương pháp bốc thăm của bạn (hoặc bất cứ nơi nào bạn gọi nó ngay bây giờ).

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