2014-06-10 4 views
14

आप एक उरी है और आप Bitmap की जरूरत है, तो आप सैद्धांतिक रूप से इसवास्तविक उरी से बिटमैप के पूर्व अनुमान आकार, पहले पैमाने लोडिंग

Bitmap troublinglyLargeBmp = 
    MediaStore.Images.Media.getBitmap(
     State.mainActivity.getContentResolver(), theUri); 

कर सकता है, लेकिन यह हर बार

दुर्घटना होगा,

तो आप ऐसा करते हैं .........

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 4; 

AssetFileDescriptor fileDescriptor =null; 
fileDescriptor = 
    State.mainActivity.getContentResolver().openAssetFileDescriptor(theUri, "r"); 

Bitmap actuallyUsableBitmap 
    = BitmapFactory.decodeFileDescriptor(
    fileDescriptor.getFileDescriptor(), null, options); 

Utils.Log("'4-sample' method bitmap ... " 
    +actuallyUsableBitmap.getWidth() +" " 
    +actuallyUsableBitmap.getHeight()); 

कि शानदार है और काम कर समाधान है।

सामान्य कैमरे के आकार के साथ वर्तमान परिस्थितियों (2014) में "चार" के कारक पर ध्यान दें, हालांकि, यह अनुमानित होगा या यूरी में छवि डेटा का आकार बिल्कुल सही होगा, और फिर उस जानकारी का उपयोग कर, समझदारी से उस कारक को चुनें

संक्षेप में, जब आप उरी लोड करते हैं तो स्केल फैक्टर सही तरीके से कैसे चुनें?

एंड्रॉइड विशेषज्ञ, क्या यह एक प्रसिद्ध समस्या है, क्या कोई समाधान है? आपके आईओएस-> एंड्रॉइड दोस्तों से धन्यवाद! :)

उत्तर

22

handling large bitmaps पर एंड्रॉइड गाइड देखें।

विशेष रूप से इस खंड:

BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options); 
:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(getResources(), R.id.myimage, options); 
int imageHeight = options.outHeight; 
int imageWidth = options.outWidth; 
String imageType = options.outMimeType; 

संपादित

आपके मामले में, आप के साथ decodeResource लाइन से बदल देंगे

संबंधित मुद्दे