2013-08-02 17 views
6

Phương thức bitmap.createBitmap (chiều rộng int, chiều cao int, bitmap.Config config) chỉ đơn giản là cho biết chiều cao và chiều rộng. Không có dấu hiệu nào nếu đây là các pixel thực tế hoặc pixel dp.Sử dụng các pixel độc lập về mật độ cho chiều rộng và chiều cao khi tạo bitmap

Câu hỏi của tôi:

1.) Các giá trị này có phải là pixel dp không? 2.) Nếu không, có cách nào để sử dụng pixel dp làm thông số cho chiều cao và chiều rộng không?

Cảm ơn bạn.

Trả lời

10

Nó sử dụng pixel (pixel thông thường, không phải dp). Sử dụng các phương pháp sau đây để chuyển đổi các thông số của bạn trong dp để pixel thường xuyên:

public static float dipToPixels(Context context, float dipValue) { 
    DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); 
} 

Credit: Convert dip to px in Android

+0

Xin lỗi, không thể hiểu làm thế nào đây có thể là câu trả lời được chấp nhận và cũng tăng gấp 6 lần, cho biết "sử dụng, pixel, ... chuyển đổi thành pixel" ??? –

+0

Xin lỗi, sau khi đọc lại, tôi hiểu ngay ... đóng góp chỉnh sửa –

3

Các giá trị được tính theo pixel (thường xuyên, không dp). Điều đáng nói đến là trong tất cả các chức năng chấp nhận kích thước pixel, kích thước thường là kích thước pixel thông thường. Điều này đúng với chiều rộng và chiều cao, vị trí, kích thước có thể vẽ, v.v.

Nếu bạn muốn cung cấp dp thay vào đó, có rất nhiều chức năng chuyển đổi từ dp đến pixel. Đó là một công thức rất thẳng về phía trước.

Nếu bạn muốn giải mã bitmap và thay đổi mật độ trong quá trình giải mã bitmap, hãy xem BitmapFactory.decodeXYZ và xem kỹ tại BitmapFactory.Options tại các trường có liên quan mật độ. Điều này có thể hữu ích nếu bạn muốn bitmap nguồn giống nhau (ví dụ: bitmap được tải xuống từ web) để có kích thước pixel khác nhau trên các thiết bị mật độ khác nhau.

+0

Đây phải là câu trả lời được chấp nhận, IMO rõ ràng hơn –

6

Bạn có thể tạo Bitmap với Chiều rộng và Chiều cao được xác định trong tệp XML.

Đây là những gì tôi đã làm:

  • Hãy tạo file XML giá trị và đặt tên cho nó bất cứ điều gì bạn thích (drawing_dimensions.xml)
  • Trong XML File:

    drawing_dimensions.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <dimen name="bitmapWidth">160dp</dimen> 
        <dimen name="bitmapHeight">128dp</dimen> 
    </resources> 
    

    điều này có thể được thay đổi thành bất kỳ đơn vị nào bạn muốn sử dụng

  • Sau đó, bạn chỉ cần tạo một tham chiếu đến điều này trong hoạt động của bạn:

    DrawingActivity.java

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    
        //onCreate..... 
    
    
    // referencing to the dimension resource XML just created 
    int bitmapWidth = getResources().getDimension(R.dimen.bitmapWidth); 
    int bitmapHeight = getResources().getDimension(R.dimen.bitmapHeight); 
    
    Bitmap myBitmap = Bitmap.createScaledBitmap(
         getResources().getDrawable(R.drawable.my_image), bitmapWidth, 
         bitmapHeight, true); 
    

Tôi hy vọng điều này sẽ giúp, hạnh phúc mã hóa!

+0

Điều này sẽ không hoạt động. Bitmap.createScaledBitmap() lấy một Bitmap làm đối số đầu tiên của nó, không phải là một đối tượng Drawable. –

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