2014-04-15 26 views
9

TẤT CẢ,Tạo bản vẽ từ bitmap

Như được đề xuất here Tôi cần tạo một bản vẽ ra khỏi bitmap của mình. Nhưng khi tôi cố gắng sử dụng:

Drawable d = new Drawable(my_bmp); 

nó cho thấy rằng constructor này bị phản đối ủng hộ:

Drawable(Bitmap bmp, int resourceId) 

Còn cách nào khác tôi có thể làm cho đối tượng vẽ được ra khỏi bitmap?

Cảm ơn bạn.

+0

bạn có thể thử điều này 'Drawable d = new BitmapDrawable (res, bmp); '? –

+0

@SimplePlan, như tôi đã viết trong chủ đề ban đầu, bitmap đến từ đám mây, không phải tài nguyên. – Igor

+0

thì bạn phải tải xuống hình ảnh đó từ đám mây và sau đó tải dưới dạng Bản vẽ. –

Trả lời

18

Bạn có thể sử dụng

Drawable d = new BitmapDrawable(getResources(), my_bmp); 

đối tượng vẽ được bọc lấy một bitmap và có thể được lát gạch, kéo dài, hoặc thẳng hàng. Bạn có thể tạo BitmapDrawable từ đường dẫn tệp, luồng đầu vào , thông qua lạm phát XML hoặc từ đối tượng Bitmap.

BitmapDrawable(Resources res, Bitmap bitmap)

Tạo drawable từ một bitmap, thiết lập mật độ mục tiêu ban đầu dựa trên các số liệu hiển thị các tài nguyên.

Cũng tìm một nhà thầu nào @

http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html

+0

bạn trả lời cho tôi biết bạn đã không xem bản gốc bài đăng. ;-) Tôi không tải bitmap của tôi từ các tài nguyên. Tôi nhận được bitmap như hình ảnh từ đám mây. Vì vậy, tôi không thể sử dụng tài nguyên tham khảo trong mã đó. Bạn có ý tưởng nào khác không? – Igor

+0

@Igor bạn chưa bao giờ đề cập đến điều đó trong bài đăng của mình. đó không phải lỗi của tôi. – Raghunandan

+0

Tuy nhiên, tôi đã tham chiếu một liên kết đến câu hỏi ban đầu của tôi nơi yêu cầu này được đề cập. Như tôi đã nói - bạn không nhìn. ;-) – Igor

0

bạn có thể sử dụng lớp BitmapDrawable để có được một drawable từ một bitmap

Bitmap Drawable tham khảo

+0

Vâng, tôi không thể. Tôi không sử dụng tài nguyên, bitmap (ảnh) đến từ đám mây. – Igor

1

BitmapDrawable(Bitmap bitmap) constructor đã deprecated

bạn có thể sử dụng

Drawable drawable = new BitmapDrawable(getResources(), bitmap); 

source

+0

Vâng, tôi không thể. Tôi đang đọc bitmap từ đám mây. – Igor

+0

@Igor Lấy bitmap từ đám mây: 'Bitmap bitmap = BitmapFactory.decodeStream (URL mới (url) .openConnection(). GetInputStream());' – Kinka

3

thử này để nạp Bitmap như Bitmap Drawable

Tạo ImgDrawableFromFile(Resources res, String file_name) như dưới đây

Drawable d = null; 

    public Drawable ImgDrawableFromFile(Resources res, String file_name) { 

     myBitmap = null; 
     File imgFile = new File(
       "/data/data/yourpkgname/app_my_sub_dir/images/" + file_name); 
     if (imgFile.exists()) { 

      myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

      if (myBitmap != null) { 
       d = new BitmapDrawable(res, myBitmap); 
       return d; 
      } else { 
       return null; 
      } 
     } 
     return null; 

    } 

Bây giờ gọi là chức năng này như

img.setBackgroundDrawable(ImgDrawableFromFile(getResources(), "1.jpg")); // pass your saved file name as second argument 
1

Một chút muộn cho bữa tiệc nhưng tôi thấy một sự hiểu lầm rõ ràng. Những câu trả lời cung cấp có thực sự chính xác:

Drawable d = new BitmapDrawable(getResources(),bitmap); 

Trong trường hợp này getResources() là một phương pháp có sẵn trong Context hoặc Activity và chỉ được sử dụng để tìm ra mật độ màn hình và điều chỉnh drawable cho phù hợp.

Vì vậy, Igor, ngay cả khi bạn đang tải hình ảnh từ đám mây, bạn vẫn có thể gọi hàm getResources().

Mã hóa hạnh phúc

0

Nếu Mauro Banze đến muộn thì tôi không biết mình đang làm gì ở đây. Nhưng đối với những người đến đây tuyệt vọng tìm kiếm một giải pháp, đây là những gì tôi đã làm:

Tôi tình cờ gặp vấn đề tương tự khi đưa Dự án từ JavaFX lên Android. Tôi muốn sử dụng lại hầu hết các lớp "dữ liệu" chỉ quản lý và cung cấp dữ liệu của mình và không ảnh hưởng đến giao diện người dùng.

Đủ kể chuyện, ở đây chúng tôi đi:

Vấn đề:

  • Tại một số điểm chúng ta cần một Drawable để thoát khỏi Bitmap trên màn hình.
  • Chúng tôi muốn tải về (từ đám mây, internet, hoặc bất cứ nơi nào) Bitmap này và cất giữ để sử dụng sau này như là một Drawable
  • Chúng ta không thể làm điều đó trong một lớp không Context hoặc phi Activity, như chúng ta cần Resources.

Vậy tại sao chúng ta không chỉ cần lưu nó như là một Bitmap cho đến khi chúng ta cần nó để được rút ra (mà chắc chắn sẽ xảy ra trong một lớp học Context hoặc Activity).

Tôi đã tạo một lớp có tên là BitmapImage. Nó trông giống như thế này:

public class BitmapImage { 

private final Bitmap bitmap; 

public BitmapImage (Bitmap bitmap) { 
    this.bitmap = bitmap; 
} 


public Bitmap getBitmap() { 
    return bitmap; 
} 

public Drawable getDrawable(Resources res) { 
    return new BitmapDrawable(res,getBitmap()); 
} 

này rất đơn giản lớp "tiết kiệm" Bitmap. Vì vậy, thay vì sau đó làm việc với một Drawable bạn làm việc với các BitmapImage cho đến khi bạn thực sự tuyệt vọng cần Drawable.

Tại thời điểm đó, bạn phải ở trong số Activity hoặc Context và tại đó bạn có thể gọi Drawable foo = anyBitmapImage.getDrawable(getResource()).

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