2012-01-10 28 views
5

Rõ ràng đây là một hoạt động tốn kém/tốn thời gian. Bất kỳ cách nào để cải thiện điều này?Bất kỳ cách nào để cải thiện tốc độ bitmapFactory.decodeStream()?

Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL(
              someUrl).getContent()); 

Tôi đoán có thực sự không có cách nào để tránh hoạt động tương đối mãnh liệt này, nhưng muốn để xem nếu có ai có bất kỳ chỉnh họ có thể đề nghị (ngoài bộ nhớ đệm bitmap thực tế, mà đối với bất cứ lý do đơn giản là không là có liên quan ở đây)

Trả lời

6

Nếu bạn không cần độ phân giải đầy đủ, bạn có thể chỉ đọc pixel thứ n, trong đó n là công suất 2. Bạn làm điều này bằng cách đặt inSampleSize trên đối tượng Options mà bạn chuyển đến BitmapFactory.decodeFile. Bạn có thể tìm thấy kích thước mẫu bằng cách chỉ đọc siêu dữ liệu từ tệp trong lần truyền đầu tiên bằng cách đặt inJustDecodeBounds trên đối tượng Options. Bên cạnh đó - không, tôi không nghĩ rằng có một cách dễ dàng để thực hiện để đi nhanh hơn nó đã làm.

Chỉnh sửa, ví dụ:

Options opts = new Options(); 
    // Get bitmap dimensions before reading... 
    opts.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, opts); 
    int width = opts.outWidth; 
    int height = opts.outHeight; 
    int largerSide = Math.max(width, height); 
    opts.inJustDecodeBounds = false; // This time it's for real! 
    int sampleSize = ??; // Calculate your sampleSize here 
    opts.inSampleSize = sampleSize; 
    Bitmap bmp = BitmapFactory.decodeFile(path, opts); 
+0

Cảm ơn rất nhiều! Bạn có thể xây dựng trên "Bạn có thể tìm thấy kích thước mẫu bằng cách chỉ đọc siêu dữ liệu từ tệp trong lần truyền đầu tiên bằng cách đặt inJustDecodeBounds trên đối tượng Tùy chọn". một chút nữa? Có lẽ với một ví dụ? – LuxuryMode

+0

Tôi đã thêm một ví dụ về mã. Nếu sampleSize của bạn là hai, thì chiều rộng và chiều cao sẽ được giảm đi một nửa. Nếu nó là 4 nó sẽ là một thứ tư và như vậy. –

+0

Đã kết thúc thực hiện việc này: (hầu hết được lấy từ fedorvlasov.lazylist) https://gist.github.com/1589700 – LuxuryMode

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