2013-03-03 26 views
9

Tôi có hình ảnh có độ phân giải 543 * 6423, tôi muốn hiển thị nó ở tất cả các thiết bị. Nó được hiển thị trong vài điện thoại Android cho phép độ phân giải cao. Tôi đã thử vớiBitmap quá lớn để được tải lên kết cấu trong một số điện thoại

android:hardwareAccelerated="false" 

Đây là mã java của tôi.

File storagePath =Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS+ 
        "abc.png"); 
      InputStream is = this.getContentResolver().openInputStream(Uri.fromFile(storagePath)); 
      Bitmap b = BitmapFactory.decodeStream(is, null, null); 
      is.close(); 
      image.setImageBitmap(b); 

Tính năng này hoạt động trong điện thoại di động (sony xperia) nhưng một số điện thoại khác không hiển thị. Vui lòng giúp tôi làm cách nào để hiển thị hình ảnh này độc lập với độ phân giải màn hình.

Cảm ơn, Aman

+1

xem câu trả lời (http://stackoverflow.com/a/15136744/1289716) [này], hy vọng nó sẽ giúp bạn. – MAC

+0

http://stackoverflow.com/questions/22633638/prevent-bitmap-too-large-to-be-uploaded-into-a-texture-android/24123605#24123605 Xem câu trả lời của tôi – Gilbert92

Trả lời

4

Hình ảnh của bạn có lẽ là quá lớn để được hiển thị trên hầu hết các thiết bị này. Vì vậy, bạn phải tải một phiên bản thu nhỏ của hình ảnh. Hãy xem Loading Large Bitmaps Efficiently để xem cách thực hiện điều này và tính toán kích thước mẫu thích hợp. Nếu bạn cần chiều rộng/chiều cao hiển thị (trong trường hợp hình ảnh toàn màn hình), bạn có thể sử dụng getResources().getDisplayMetrics().

0

Vâng, có thể tôi đã quá muộn để giúp bạn nhưng điều này hy vọng có thể giúp đỡ người khác. Gần đây tôi đã phát triển một thư viện nguồn mở có thể xử lý tải hình ảnh lớn. Các mã nguồn và các mẫu có sẵn tại https://github.com/diegocarloslima/ByakuGallery

0

Các giải pháp trong blog là sai bởi một sức mạnh của 2 ...

Dưới đây là giải pháp:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 

// Set height and width in options, does not return an image and no resource taken 
BitmapFactory.decodeStream(imagefile, null, options); 

int pow = 0; 
while (options.outHeight >> pow > reqHeight || options.outWidth >> pow > reqWidth) 
    pow += 1; 
options.inSampleSize = 1 << pow; 
options.inJustDecodeBounds = false; 
image = BitmapFactory.decodeStream(imagefile, null, options); 

Hình ảnh sẽ được thu nhỏ lại với kích thước reqHeight và reqWidth. Vì tôi hiểu inSampleSize chỉ nhận được một sức mạnh của 2 giá trị.

3

thử với

android:hardwareAccelerated="false" 
android:largeHeap="true" 
0

Thay vì dành hàng giờ sau khi giờ cố gắng để viết và gỡ lỗi tất cả các mã downsampling này bằng tay, tại sao không thử sử dụng Picasso? Nó là một thư viện tải hình ảnh phổ biến và được tạo ra để xử lý các bitmap của tất cả các loại và/hoặc kích cỡ. Tôi đã sử dụng dòng mã này để loại bỏ tôi "bitmap quá lớn ...." Vấn đề:

Picasso.with(image.getContext()).load(storagePath).fit().centerCrop().into(image); 
Các vấn đề liên quan