दिलचस्प पोस्ट
मैं AJAX का उपयोग करके आंशिक रूप तत्व कैसे प्रदान करूं? विश्व स्तर पर चर को साझा करने के लिए आवेदन प्रदान करना <Li> तत्वों <ul> के लिए कस्टम बुलेट प्रतीक यह एक नियमित वर्ण है, और एक छवि नहीं है सूचियों की सूची का योग; रिटर्न की सूचि सूची विधि प्रविष्टि डीबगिंग का उपयोग करते समय डीबग किए गए प्रोग्राम धीमा क्यों करता है? उद्देश्य सी – आज से कल (कल) प्राप्त करें आईफोन ओएस मेमोरी चेतावनी अलग स्तर क्या मतलब है? सीओआरएस PHP काम नहीं कर रहा है पीएचपी में, क्या 0 को रिक्त माना जाता है? जावास्क्रिप्ट RegExp का दिलचस्प परीक्षण वेक्टर से कितने मूल्य हटाना है? सरणी में तत्वों को खोजने के लिए जावास्क्रिप्ट एल्गोरिथ्म जो किसी दूसरे सरणी में नहीं हैं IOS अनुप्रयोग द्वारा एक उपकरण पर बनाई गई फ़ाइलों को ब्राउज़ करें, मैं वर्कस्टेशन पर विकासशील हूं? जावा एफएक्स एफएक्सएमएल नियंत्रक – कन्स्ट्रक्टर बनाम प्रारंभिक विधि विभाजित स्क्रीन emacs windows का आकार कैसे बदल सकता है?

"बिटमैप बनावट में अपलोड होने के लिए बहुत बड़ी है"

मैं एक बिटमैप को एक छवि दृश्य में लोड कर रहा हूं, और इस त्रुटि को देख रहा हूं मैं यह सीमा ओपनजीएल हार्डवेयर बनावट (2048×2048) के लिए एक आकार सीमा से संबंधित है। जिस चित्र को मुझे लोड करने की आवश्यकता है वह लगभग 4,000 पिक्सल की एक चुटकी-ज़ूम छवि है

मैंने मैनिफेस्ट में हार्डवेयर त्वरण को बंद करने की कोशिश की है, लेकिन कोई खुशी नहीं।

<application android:hardwareAccelerated="false" .... > 

क्या छवि को 2048 पिक्सल से बड़ा छवि लोड करना संभव है?

Solutions Collecting From Web of ""बिटमैप बनावट में अपलोड होने के लिए बहुत बड़ी है""

सभी प्रतिपादन ओपनजीएल पर आधारित है, इसलिए आप इस सीमा से अधिक नहीं जा सकते ( GL_MAX_TEXTURE_SIZE डिवाइस पर निर्भर करता है, लेकिन न्यूनतम 2048×2048 है, इसलिए 2048×2048 से कम कोई भी चित्र फिट होगा)।

ऐसी बड़ी छवियों के साथ, यदि आप ज़ूम आउट करना चाहते हैं, और मोबाइल में, तो आपको सिस्टम के समान सेट करना चाहिए जो आप उदाहरण के लिए Google मैप्स में देखते हैं। छवि के साथ कई टुकड़ों में विभाजित है, और कई परिभाषाएं

या आप इसे प्रदर्शित करने से पहले छवि को स्केल कर सकते हैं (इस सवाल पर user1352407 का उत्तर देखें)।

और भी, जिस फ़ोल्डर में आप छवि डालते हैं, उसके लिए सावधान रहें, एंड्रॉइड अपने आप छवियों को स्वचालित रूप से बढ़ा सकता है। इस प्रश्न पर नीचे Pilot_51 का जवाब देखें।

यह प्रश्न का सीधे उत्तर नहीं है (छवियां लोड करने से> 2048), लेकिन त्रुटि का सामना करने वाले किसी भी व्यक्ति के लिए संभावित समाधान।

मेरे मामले में, छवि दोनों आयामों में से 2048 से कम थी (1280×727 सटीक होना) और समस्या गैलेक्सी नेक्सस पर विशेष रूप से अनुभव की गई थी। छवि drawable फ़ोल्डर में थी और योग्य फ़ोल्डर में से कोई भी नहीं था एंड्रॉइड घनत्व क्वालिफायर के बिना डिज़ाइन मानते हैं एमडीपीआई और अन्य घनत्व के लिए उन्हें ऊपर या नीचे ढेर कर दिया जाता है, इस मामले में एक्सएचडीपी के लिए 2x बढ़ाए गए स्केलिंग को रोकने के लिए drawable-nodpi छवि को drawable-nodpi जाने में समस्या हल हो गई।

मैंने इस तरह से छवि को छोटा कर दिया है:

 ImageView iv = (ImageView)waypointListView.findViewById(R.id.waypoint_picker_photo); Bitmap d = new BitmapDrawable(ctx.getResources() , w.photo.getAbsolutePath()).getBitmap(); int nh = (int) ( d.getHeight() * (512.0 / d.getWidth()) ); Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true); iv.setImageBitmap(scaled); 

इस डाउनसैम्पलिंग कोड को मैन्युअल रूप से लिखने / डीबग करने के लिए घंटों तक घंटों खर्च करने के बजाय, पिकासो का उपयोग क्यों नहीं करें? यह सभी प्रकार और / या आकारों के बिटमैप से निपटने के लिए बनाया गया था
मैंने अपने "बिटमैप बहुत बड़ी …." समस्या को दूर करने के लिए कोड की इस एक पंक्ति का उपयोग किया है:

 Picasso.with(context).load(resourceId).fit().centerCrop().into(imageView); 

चित्र फ़ाइल को drawable-nodpi फ़ोल्डर में बदलने drawable-nodpi फ़ोल्डर से बदलने के लिए मेरे लिए काम किया

मैंने पिकासो का इस्तेमाल किया और एक ही समस्या थी। छवि आकार, चौड़ाई या ऊंचाई पर कम से कम थी आखिरकार मैंने यहां समाधान पाया आप प्रदर्शन आकार के अनुसार बड़ी छवि को स्केल कर सकते हैं और पहलू अनुपात भी रख सकते हैं:

  public Point getDisplaySize(Display display) { Point size = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { display.getSize(size); } else { int width = display.getWidth(); int height = display.getHeight(); size = new Point(width, height); } return size; } 

और पिकासो द्वारा चित्र लोड करने के लिए इस पद्धति का उपयोग करें:

  final Point displySize = getDisplaySize(getWindowManager().getDefaultDisplay()); final int size = (int) Math.ceil(Math.sqrt(displySize.x * displySize.y)); Picasso.with(this) .load(urlSource) .resize(size, size) .centerInside() .into(imageViewd); 

भी बेहतर प्रदर्शन के लिए आप चित्र को चौड़ाई और ऊँचाई के अनुसार डाउनलोड कर सकते हैं, संपूर्ण छवि नहीं:

  public String reviseImageUrl(final Integer displayWidth, final Integer displayHeight, final String originalImageUrl) { final String revisedImageUrl; if (displayWidth == null && displayHeight == null) { revisedImageUrl = originalImageUrl; } else { final Uri.Builder uriBuilder = Uri.parse(originalImageUrl).buildUpon(); if (displayWidth != null && displayWidth > 0) { uriBuilder.appendQueryParameter(QUERY_KEY_DISPLAY_WIDTH, String.valueOf(displayWidth)); } if (displayHeight != null && displayHeight > 0) { uriBuilder.appendQueryParameter(QUERY_KEY_DISPLAY_HEIGHT, String.valueOf(displayHeight)); } revisedImageUrl = uriBuilder.toString(); } return revisedImageUrl; } final String newImageUlr = reviseImageUrl(displySize.x, displySize.y, urlSource); 

और फिर:

  Picasso.with(this) .load(newImageUlr) .resize(size, size) .centerInside() .into(imageViewd); 

संपादित करें: getDisplaySize ()

display.getWidth()/getHeight() नापसंद है Display उपयोग Display DisplayMetrics बजाय

 public Point getDisplaySize(DisplayMetrics displayMetrics) { int width = displayMetrics.widthPixels; int height = displayMetrics.heightPixels; return new Point(width, height); } 

बिटमैपरेगियनडिकोडर चाल करता है

आप ड्रॉ (कैनवास कैनवास) पर ओवरराइड कर सकते हैं, एक नया थ्रेड शुरू कर सकते हैं और उपयोगकर्ता के लिए दृश्यमान हो सकते हैं।

जैसा कि Larcho द्वारा इंगित किया गया है, एपीआई स्तर 10 से शुरू, आप छवि से विशिष्ट क्षेत्रों को लोड करने के लिए BitmapRegionDecoder का उपयोग कर सकते हैं और उसके साथ, आप मेमोरी में आवंटित क्षेत्रों को केवल आवश्यक क्षेत्रों में आवंटित करके एक बड़ी छवि दिखाने के लिए पूरा कर सकते हैं। मैंने हाल ही में एक ऐसी चीज विकसित की है जो टच जेस्चर हैंडलिंग के साथ बड़े चित्रों का दृश्य प्रदान करता है। स्रोत कोड और नमूने यहां उपलब्ध हैं ।

(AndroidManifest.xml) में निम्न 2 विशेषताओं के अलावा मेरे लिए काम किया:

  • एंड्रॉयड: largeHeap = "true"
  • एंड्रॉयड: hardwareAccelerated = "false"

मैं एक ही समस्या के माध्यम से भाग गया, यहाँ मेरा समाधान है एंड्रॉइड स्क्रीन चौड़ाई के समान छवि की चौड़ाई सेट करें और फिर ऊँचाई को ढेर कर दें

 Bitmap myBitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; Log.e("Screen width ", " "+width); Log.e("Screen height ", " "+height); Log.e("img width ", " "+myBitmap.getWidth()); Log.e("img height ", " "+myBitmap.getHeight()); float scaleHt =(float) width/myBitmap.getWidth(); Log.e("Scaled percent ", " "+scaleHt); Bitmap scaled = Bitmap.createScaledBitmap(myBitmap, width, (int)(myBitmap.getWidth()*scaleHt), true); myImage.setImageBitmap(scaled); 

यह किसी भी आकार एंड्रॉइड स्क्रीन के लिए बेहतर है। अगर यह आप के लिए काम करता है तो मुझे बतलाएगा।

छवि को स्केल करें:

 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); 

छवि reqHyight और reqWidth के आकार में कम हो जाएगा जैसा कि मैं समझता हूं नमूना आकार केवल 2 मानों की शक्ति में लेता है।

यहां सभी योगदानकर्ताओं के लिए धन्यवाद, परन्तु मैंने ऊपर के सभी समाधानों की कोशिश की, एक-दूसरे के बाद-कई घंटे तक, और कोई भी काम नहीं करता! अंत में, मैंने एंड्रॉइड के कैमरे के साथ छवियों को कैप्चर करने और उन्हें प्रदर्शित करने के बारे में एक आधिकारिक उदाहरण के लिए चारों ओर देखने का फैसला किया। आधिकारिक उदाहरण ( यहां ), आखिरकार मुझे काम करने वाली एकमात्र विधि दी नीचे मैं उस उदाहरण एप में मिला समाधान प्रस्तुत करता हूं:

 public void setThumbnailImageAndSave(final ImageView imgView, File imgFile) { /* There isn't enough memory to open up more than a couple camera photos */ /* So pre-scale the target bitmap into which the file is decoded */ /* Get the size of the ImageView */ int targetW = imgView.getWidth(); int targetH = imgView.getHeight(); /* Get the size of the image */ BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(imgFile.getAbsolutePath(), bmOptions); int photoW = bmOptions.outWidth; int photoH = bmOptions.outHeight; /* Figure out which way needs to be reduced less */ int scaleFactor = 1; if ((targetW > 0) || (targetH > 0)) { scaleFactor = Math.min(photoW/targetW, photoH/targetH); } /* Set bitmap options to scale the image decode target */ bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; bmOptions.inPurgeable = true; /* Decode the JPEG file into a Bitmap */ Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), bmOptions); /* Associate the Bitmap to the ImageView */ imgView.setImageBitmap(bitmap); imgView.setVisibility(View.VISIBLE); } 

काश मैं इस एक पहले पर जाना था … उन सभी घंटे: डी

देखें स्तर

आप निम्न कोड के साथ रनटाइम पर एक व्यक्तिगत दृश्य के लिए हार्डवेयर त्वरण अक्षम कर सकते हैं:

myView.setLayerType (देखें। PLAYER_LAYER_TYPE_SOFTWARE, शून्य);

छोटे आकार की छवियों को छोड़ना चाहते हैं उन लोगों के लिए ध्यान दें:

Pilot_51 का समाधान ( drawable-nodpi फ़ोल्डर में आपकी छवियों को स्थानांतरित करने) काम करता है, लेकिन इसमें एक और समस्या है: यह स्क्रीन पर स्क्रीन पर बहुत कम छवियों को बना देता है जब तक कि छवियों को स्क्रीन पर फिट करने के लिए बहुत बड़े (जैसे 2000 x 3800) रिज़ोल्यूशन में बदल दिया जाता है – तो यह बनाता है आपका ऐप भारी

समाधान : अपनी छवि फ़ाइलों को drawable-hdpi में रखो – यह मेरे लिए एक जादू की तरह काम करता है

सही ड्रॉबल सबफ़ोल्डर का उपयोग करना मेरे लिए हल किया मेरा समाधान ड्रॉएबल- xhdpi फ़ोल्डर में मेरे पूर्ण रिज़ोल्यूशन इमेज (1920×1200) डालने योग्य फ़ोल्डर के बजाय रखा गया था

मैंने ड्रॉएबल -एचडीपीआई फ़ोल्डर में भी एक स्केल डाउन इमेज (1280×800) डाल दी है।

ये दो प्रस्ताव 2013 और 2012 के नेक्सस 7 टैबलेट्स से मेल खाते हैं जो मैं प्रोग्रामिंग कर रहा हूं। मैंने कुछ अन्य गोलियों पर भी समाधान का परीक्षण किया।

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ///* if (requestCode == PICK_FROM_FILE && resultCode == RESULT_OK && null != data){ uri = data.getData(); String[] prjection ={MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(uri,prjection,null,null,null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(prjection[0]); ImagePath = cursor.getString(columnIndex); cursor.close(); FixBitmap = BitmapFactory.decodeFile(ImagePath); ShowSelectedImage = (ImageView)findViewById(R.id.imageView); // FixBitmap = new BitmapDrawable(ImagePath); int nh = (int) ( FixBitmap.getHeight() * (512.0 / FixBitmap.getWidth()) ); FixBitmap = Bitmap.createScaledBitmap(FixBitmap, 512, nh, true); // ShowSelectedImage.setImageBitmap(BitmapFactory.decodeFile(ImagePath)); ShowSelectedImage.setImageBitmap(FixBitmap); } } 

यह कोड काम है

मैं बहुत बड़ी संकल्प के लिए वेबव्यू का उपयोग करता हूं

1-) निम्नलिखित की तरह संवेदनशील HTML फ़ाइल बनाएं।

 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> html, body, img { margin: 0; padding: 0; height: 100%; display: block; } </style> </head> <body> <img src="img/program_first.png"> </body> </html> 

2-) मैं "आईएमजी" फ़ोल्डर में 5708×1634 छवि का उपयोग करता हूं जो कि क्षैतिज रूप से बहुत बड़ी है 3-) अपने लेआउट को "वेबव्यू" जोड़ें और इस तरह से लोड करें। "प्रोग्राम 1" WebView चर का नाम है

 program1.loadUrl("file:///android_asset/program/content.html");