• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

java.lang.OutOfMemoryError when scaling images

 
Ranch Hand
Posts: 74
  • Number of slices to send:
    Optional 'thank-you' note:
Hi,

I'm trying to load, resize and display some jpg images. I'm not
having any problems with small images (<200 kb) but as the image sizes
grow to over 800 kb I'm running into problems.

Shrinking big files, in particular, is very slow and causing
java.lang.OutOfMemoryError (note I am running from an applet so -X
options are not available to me). First I tried

Image scaledImage
= origImage.getScaledInstance( (int) (scaler * origW),
(int) (scaler * origH),
//Image.SCALE_DEFAULT);
Image.SCALE_FAST);

which is very slow (many seconds) for an 800kb image. Next I tried
the ff. resize trick from one Shannon Hickey
(http://forum.java.sun.com/thread.jsp?forum=20&thread=365233&message=1548404#1548404):

double newW = scaler * origW;
double newH = scaler * origH;
BufferedImage scaledImage
= new BufferedImage((int)newW, (int)newH, BufferedImage.TYPE_INT_ARGB);
Graphics gr = scaledImage.getGraphics();
boolean drawOK = gr.drawImage(origImage, 0, 0, (int)newW, (int)newH, null);
gr.dispose();
scaledImage.flush(); // Not sure if this helps, but...

While this is much faster, it still suffers from OutOfMemoryError;
drawImage() returns false and I get a blank image. The other thing
I've tried is overriding paint() in a JLabel class so no intermediate
buffer is used, however this painted over my borders and I still got
OutOfMemoryError.

Is there a better way to do this?

Thanks,
Glenn
 
Greenhorn
Posts: 1
  • Number of slices to send:
    Optional 'thank-you' note:
I  am having the same issue, although I see the error when I run a Java app
(which I wrote) in my Windows XP laptop. Also in my case, the size of .jpg
files are about 4000 kB. Sometimes the error occurs after the 1st one is
displayed (after being resized) normally.

The .jpg files are converted from .pdf files which are scanned with my
3-on-1 printer. Nothing wrong with .jpg as I display them with software of
that kind or even File Explorer's slideshow.

So the issue is surely of Java's image handling.

By avoiding the use of Image.getScaledInstance(), the error does not seem
to occur, but in the case, the quality of the image is very dotty and scratchy.
(Using get...stance() with ..._SMOOTH or even ..._FAST produces smooth images.)

There are some articles about Java's Out Of Memory runtime error, but they
are not particularly addressed to this get...stance(), so I hesitate to take the
way presented. Also some parameters setting (about JVM or JRE) will differ OS
to OS, I guess and that is another reason I don't like to take. Another reason yet
is that such setting may not resolve the issue always, so they say...

Not much help but I wanted to share the issue with visitors.

There seems no sure answer to fix the issue, well at least from within a Java app...?
 
Saloon Keeper
Posts: 27871
196
  • Number of slices to send:
    Optional 'thank-you' note:
I may be horribly out of date on this, but originally PostScript/PDF images were embedded in their documents in TIFF (Tagged Image File Format). It's possible that you are losing picture quality when TIFF is being converted to JPG. Note that JPEG is a lossy image format, where TIFF is not.

Another issue would be if you're loading a PDF into memory and attempting to do the entire job in a single pass. The PDF would be exploded, including not only the image contents, but the text and metadata, so the actual RAM occupancy would be more than just the size of the PDF file itself. TIFF images are compressed using simple run-length encoding, so they are going to be larger than the lossy compression scheme formats even if they aren't decompressed as part of exploding the PDF.

So some recommendations. Try and do as much as possible via streaming instead of loading everything into memory wholesale. If you can't, or that isn't enough, try a multi-pass approach where the images go out to temporary work files.
reply
    Bookmark Topic Watch Topic
  • New Topic
vceplus-200-125    | boson-200-125    | training-cissp    | actualtests-cissp    | techexams-cissp    | gratisexams-300-075    | pearsonitcertification-210-260    | examsboost-210-260    | examsforall-210-260    | dumps4free-210-260    | reddit-210-260    | cisexams-352-001    | itexamfox-352-001    | passguaranteed-352-001    | passeasily-352-001    | freeccnastudyguide-200-120    | gocertify-200-120    | passcerty-200-120    | certifyguide-70-980    | dumpscollection-70-980    | examcollection-70-534    | cbtnuggets-210-065    | examfiles-400-051    | passitdump-400-051    | pearsonitcertification-70-462    | anderseide-70-347    | thomas-70-533    | research-1V0-605    | topix-102-400    | certdepot-EX200    | pearsonit-640-916    | itproguru-70-533    | reddit-100-105    | channel9-70-346    | anderseide-70-346    | theiia-IIA-CIA-PART3    | certificationHP-hp0-s41    | pearsonitcertification-640-916    | anderMicrosoft-70-534    | cathMicrosoft-70-462    | examcollection-cca-500    | techexams-gcih    | mslearn-70-346    | measureup-70-486    | pass4sure-hp0-s41    | iiba-640-916    | itsecurity-sscp    | cbtnuggets-300-320    | blogged-70-486    | pass4sure-IIA-CIA-PART1    | cbtnuggets-100-101    | developerhandbook-70-486    | lpicisco-101    | mylearn-1V0-605    | tomsitpro-cism    | gnosis-101    | channel9Mic-70-534    | ipass-IIA-CIA-PART1    | forcerts-70-417    | tests-sy0-401    | ipasstheciaexam-IIA-CIA-PART3    | mostcisco-300-135    | buildazure-70-533    | cloudera-cca-500    | pdf4cert-2v0-621    | f5cisco-101    | gocertify-1z0-062    | quora-640-916    | micrcosoft-70-480    | brain2pass-70-417    | examcompass-sy0-401    | global-EX200    | iassc-ICGB    | vceplus-300-115    | quizlet-810-403    | cbtnuggets-70-697    | educationOracle-1Z0-434    | channel9-70-534    | officialcerts-400-051    | examsboost-IIA-CIA-PART1    | networktut-300-135    | teststarter-300-206    | pluralsight-70-486    | coding-70-486    | freeccna-100-101    | digitaltut-300-101    | iiba-CBAP    | virtuallymikebrown-640-916    | isaca-cism    | whizlabs-pmp    | techexams-70-980    | ciscopress-300-115    | techtarget-cism    | pearsonitcertification-300-070    | testking-2v0-621    | isacaNew-cism    | simplilearn-pmi-rmp    | simplilearn-pmp    | educationOracle-1z0-809    | education-1z0-809    | teachertube-1Z0-434    | villanovau-CBAP    | quora-300-206    | certifyguide-300-208    | cbtnuggets-100-105    | flydumps-70-417    | gratisexams-1V0-605    | ituonline-1z0-062    | techexams-cas-002    | simplilearn-70-534    | pluralsight-70-697    | theiia-IIA-CIA-PART1    | itexamtips-400-051    | pearsonitcertification-EX200    | pluralsight-70-480    | learn-hp0-s42    | giac-gpen    | mindhub-102-400    | coursesmsu-CBAP    | examsforall-2v0-621    | developerhandbook-70-487    | root-EX200    | coderanch-1z0-809    | getfreedumps-1z0-062    | comptia-cas-002    | quora-1z0-809    | boson-300-135    | killtest-2v0-621    | learncia-IIA-CIA-PART3    | computer-gcih    | universitycloudera-cca-500    | itexamrun-70-410    | certificationHPv2-hp0-s41    | certskills-100-105    | skipitnow-70-417    | gocertify-sy0-401    | prep4sure-70-417    | simplilearn-cisa    |
http://www.pmsas.pr.gov.br/wp-content/    | http://www.pmsas.pr.gov.br/wp-content/    |