/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
outOfMemory ved print af BufferedImage
Fra : Morten Nørgaard


Dato : 27-11-03 11:58

Hej,

håber nogen kan hjælpe mig med denne her: Jeg får en outOfMemory når jeg
prøver at pringe mit BufferedImage, en JPEG i 2400x3000 pixels, omkring 900
kb (diskstrørrelse). Det synes jeg ikke er meget - men åbenbart synes JVM'en
det. Jeg kunne selvfølgelig forøge heap-størrelsen - og det virker da også
fint, når jeg gør det. Men det er jeg ikke vild med, da min applikation
forhåbentlig med tid skal distribueres til folk der ikke har en anelse om
hvad heap-size er. Der må være en både - men... hvordan?

Koden er nedenfor (2 klasser, en main og en printable-klasse, den nederste).
Jeg har kogt det ned til det absolut essentielle):

import java.awt.print.*;
import javax.swing.*;

public class printTest
{
public printTest()
{
PrinterJob printJob = PrinterJob.getPrinterJob();
Book book = new Book();
PageFormat pg = printJob.defaultPage();

book.append( new printablePage( "C:\\imageTest.tif"), pg );
// printablePage class follows below.

printJob.setPageable( book );
if ( printJob.printDialog() )
{
try
{
printJob.print();
JOptionPane.showMessageDialog( null, "succes" );
}
catch ( Exception ex )
{
JOptionPane.showMessageDialog( null, "succes not so much" );
ex.printStackTrace();
}
}
}

public static void main( String[] args )
{
new printTest();
}
}
// end of printTest class

// beg. of printablePage class
import java.awt.*;
import java.awt.print.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;

public class printablePage implements Printable, ImageObserver
{
File file = null;

public printablePage( String s )
{
file = new File("c:\\ImageTest.jpg");
}

public int print( Graphics g, PageFormat pageFormat, int page )
{
try
{
BufferedImage img = ImageIO.read( file );
g.drawImage( img, (int) pageFormat.getImageableX() , (int)
pageFormat.getImageableY() , (int) pageFormat.getImageableWidth() , (int)
pageFormat.getImageableHeight(), 0,0,(int)img.getWidth() ,
(int)img.getHeight(), this );
}
catch (Exception ex )
{
ex.printStackTrace();
}

return (PAGE_EXISTS);
}

public boolean imageUpdate(Image img, int infoflags, int x, int y, int
width, int height)
{
return false;
}

}



På forhånd tak for al den input i kan undvære,



/Morten



 
 
Claus L. Petersen (28-11-2003)
Kommentar
Fra : Claus L. Petersen


Dato : 28-11-03 08:49

Hej Morten

Jeg tror at problemet ligger i at når først dit jpeg ligger i hukommelsen
fylder det 2400*3000*(fx 32 bit farver == 4byte) == 28.8Mbyte og så er det
jo en helt anden snak

Håber du kan bruge mit svar.

Claus
"Morten Nørgaard" <morten.norgaardSPAMMINGNOTHANKS@uni-c.dk> wrote in
message news:bq4l3o$1ag$1@news.net.uni-c.dk...
> Hej,
>
> håber nogen kan hjælpe mig med denne her: Jeg får en outOfMemory når
jeg
> prøver at pringe mit BufferedImage, en JPEG i 2400x3000 pixels, omkring
900
> kb (diskstrørrelse). Det synes jeg ikke er meget - men åbenbart synes
JVM'en
> det. Jeg kunne selvfølgelig forøge heap-størrelsen - og det virker da også
> fint, når jeg gør det. Men det er jeg ikke vild med, da min applikation
> forhåbentlig med tid skal distribueres til folk der ikke har en anelse om
> hvad heap-size er. Der må være en både - men... hvordan?

>
> På forhånd tak for al den input i kan undvære,
>
>
>
> /Morten
>
>


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.541 / Virus Database: 335 - Release Date: 22-11-2003



Morten Nørgaard (28-11-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 28-11-03 09:19


"Claus L. Petersen" <clausp@softhome.net> skrev i en meddelelse
news:bq6uid$11gg$1@news.cybercity.dk...
> Hej Morten
>
> Jeg tror at problemet ligger i at når først dit jpeg ligger i hukommelsen
> fylder det 2400*3000*(fx 32 bit farver == 4byte) == 28.8Mbyte og så er det
> jo en helt anden snak

Du har jo måske ret i din formodning. Men - jeg kan se at java-processen,
incl. jvm og det hele, tager op til 42 MB plads i hukommelsen. Og det er jo
væsentligt under de 64MB som heapstørrelsen er sat til som default. Hvorom
alting er: Hvordan bør jeg gøre det, så jeg kan printe mit billede, uden at
røre ved heap-størrelsen. Er det umuligt?

Tak,

/Morten



> Håber du kan bruge mit svar.
>
> Claus
> "Morten Nørgaard" <morten.norgaardSPAMMINGNOTHANKS@uni-c.dk> wrote in
> message news:bq4l3o$1ag$1@news.net.uni-c.dk...
> > Hej,
> >
> > håber nogen kan hjælpe mig med denne her: Jeg får en outOfMemory når
> jeg
> > prøver at pringe mit BufferedImage, en JPEG i 2400x3000 pixels, omkring
> 900
> > kb (diskstrørrelse). Det synes jeg ikke er meget - men åbenbart synes
> JVM'en
> > det. Jeg kunne selvfølgelig forøge heap-størrelsen - og det virker da
også
> > fint, når jeg gør det. Men det er jeg ikke vild med, da min applikation
> > forhåbentlig med tid skal distribueres til folk der ikke har en anelse
om
> > hvad heap-size er. Der må være en både - men... hvordan?
>
> >
> > På forhånd tak for al den input i kan undvære,
> >
> >
> >
> > /Morten
> >
> >
>
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.541 / Virus Database: 335 - Release Date: 22-11-2003
>
>



Daniel Jacobsen (29-11-2003)
Kommentar
Fra : Daniel Jacobsen


Dato : 29-11-03 01:11

Så vidt jeg kan se har du to muligheder at afprøve:
1. Du sætter heap-størrelsen via en bat-fil som du distribuerer med dit
program, hvilket gør at folk ikke selv skal rode med det. Om der findes en
JVM parameter til dette formål har jeg ikke lige undersøgt, men det ville da
være mærkeligt andet.
2. Om denne kan lade sig gøre i forbindelse med print af billede har jeg
ikke lige afprøvet i praksis, men du kan forsøge at anvende java-nio (NIO)
til indlæsning af billedfilen. NIO giver nemlig mulighed for at læse filer
uden nødvendigvis at skulle indlæse det hele til ram, som streams jo gør. På
denne måde bliver det ikke nødvendigt at bruge så meget ram, da du måske kan
nøjes med at indlæse den del af filen, som skal udskrives. Du kan finde lidt
om NIO og filer her:

Meget overordnet: http://www.pcworld.dk/default.asp?Mode=2&ArticleID=4250
Mere i dybden:
http://www.onjava.com/pub/a/onjava/2002/10/02/javanio.html?page=1
Sun's eget (lidt mangelfuldt):
http://java.sun.com/j2se/1.4.1/docs/guide/nio/

// Daniel J.



Morten Nørgaard (01-12-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 01-12-03 08:46


"Daniel Jacobsen" <dj@g-a-f.dk> skrev i en meddelelse
news:bq8nul$2mka$1@news.cybercity.dk...
> Så vidt jeg kan se har du to muligheder at afprøve:
> 1. Du sætter heap-størrelsen via en bat-fil som du distribuerer med dit
> program, hvilket gør at folk ikke selv skal rode med det. Om der findes en
> JVM parameter til dette formål har jeg ikke lige undersøgt, men det ville
da
> være mærkeligt andet.
> 2. Om denne kan lade sig gøre i forbindelse med print af billede har jeg
> ikke lige afprøvet i praksis, men du kan forsøge at anvende java-nio (NIO)
> til indlæsning af billedfilen. NIO giver nemlig mulighed for at læse filer
> uden nødvendigvis at skulle indlæse det hele til ram, som streams jo gør.

> denne måde bliver det ikke nødvendigt at bruge så meget ram, da du måske
kan
> nøjes med at indlæse den del af filen, som skal udskrives. Du kan finde
lidt
> om NIO og filer her:

Det ser umiddelbart tiltalende ud. Jeg ser på det - tak for hjælpen.

/Morten



> Meget overordnet: http://www.pcworld.dk/default.asp?Mode=2&ArticleID=4250
> Mere i dybden:
> http://www.onjava.com/pub/a/onjava/2002/10/02/javanio.html?page=1
> Sun's eget (lidt mangelfuldt):
> http://java.sun.com/j2se/1.4.1/docs/guide/nio/
>
> // Daniel J.
>
>



Claus L. Petersen (01-12-2003)
Kommentar
Fra : Claus L. Petersen


Dato : 01-12-03 09:26

Hej Morten,

Det billede som du vil printe ud, skal det overhovedet vises på slærmen??
for hvis det ikke skal så kunne du måske åbne billed filen som en binær fil
og så på den måde sende x antal bytes videre til din printer. Det kræver
selvfølgelig at du har en funktion til at 'pakke' filen ud løbende.

Claus

"Morten Nørgaard" <morten.norgaardSPAMMINGNOTHANKS@uni-c.dk> wrote in
message news:bqerak$f90$1@news.net.uni-c.dk...
>
> "Daniel Jacobsen" <dj@g-a-f.dk> skrev i en meddelelse
> news:bq8nul$2mka$1@news.cybercity.dk...
> > Så vidt jeg kan se har du to muligheder at afprøve:
> > 1. Du sætter heap-størrelsen via en bat-fil som du distribuerer med dit
> > program, hvilket gør at folk ikke selv skal rode med det. Om der findes
en
> > JVM parameter til dette formål har jeg ikke lige undersøgt, men det
ville
> da
> > være mærkeligt andet.
> > 2. Om denne kan lade sig gøre i forbindelse med print af billede har jeg
> > ikke lige afprøvet i praksis, men du kan forsøge at anvende java-nio
(NIO)
> > til indlæsning af billedfilen. NIO giver nemlig mulighed for at læse
filer
> > uden nødvendigvis at skulle indlæse det hele til ram, som streams jo
gør.
> På
> > denne måde bliver det ikke nødvendigt at bruge så meget ram, da du måske
> kan
> > nøjes med at indlæse den del af filen, som skal udskrives. Du kan finde
> lidt
> > om NIO og filer her:
>
> Det ser umiddelbart tiltalende ud. Jeg ser på det - tak for hjælpen.
>
> /Morten
>
>
>
> > Meget overordnet:
http://www.pcworld.dk/default.asp?Mode=2&ArticleID=4250
> > Mere i dybden:
> > http://www.onjava.com/pub/a/onjava/2002/10/02/javanio.html?page=1
> > Sun's eget (lidt mangelfuldt):
> > http://java.sun.com/j2se/1.4.1/docs/guide/nio/
> >
> > // Daniel J.
> >
> >
>
>


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.541 / Virus Database: 335 - Release Date: 25-11-2003



Morten Nørgaard (01-12-2003)
Kommentar
Fra : Morten Nørgaard


Dato : 01-12-03 12:27


"Claus L. Petersen" <clausp@softhome.net> skrev i en meddelelse
news:bqetrr$1bdq$1@news.cybercity.dk...
> Hej Morten,
>
> Det billede som du vil printe ud, skal det overhovedet vises på slærmen??
> for hvis det ikke skal så kunne du måske åbne billed filen som en binær
fil
> og så på den måde sende x antal bytes videre til din printer. Det kræver
> selvfølgelig at du har en funktion til at 'pakke' filen ud løbende.

Det skal ikke vises på skærmen. Jeg har ikke overvejet denne løsning - men
den lyder da tiltalende. Ligger du tilfældigvis inde med et lille eksempel
på det, eller kan henvise mig til et sådant?

Mhv.

Morten



--
Morten Nørgaard
A.D. Jørgensensvej 73, 2. tv.
2000 Frederiksberg
Homepage: https://www.e-report.dk/mno/homepage


> Claus
>
> "Morten Nørgaard" <morten.norgaardSPAMMINGNOTHANKS@uni-c.dk> wrote in
> message news:bqerak$f90$1@news.net.uni-c.dk...
> >
> > "Daniel Jacobsen" <dj@g-a-f.dk> skrev i en meddelelse
> > news:bq8nul$2mka$1@news.cybercity.dk...
> > > Så vidt jeg kan se har du to muligheder at afprøve:
> > > 1. Du sætter heap-størrelsen via en bat-fil som du distribuerer med
dit
> > > program, hvilket gør at folk ikke selv skal rode med det. Om der
findes
> en
> > > JVM parameter til dette formål har jeg ikke lige undersøgt, men det
> ville
> > da
> > > være mærkeligt andet.
> > > 2. Om denne kan lade sig gøre i forbindelse med print af billede har
jeg
> > > ikke lige afprøvet i praksis, men du kan forsøge at anvende java-nio
> (NIO)
> > > til indlæsning af billedfilen. NIO giver nemlig mulighed for at læse
> filer
> > > uden nødvendigvis at skulle indlæse det hele til ram, som streams jo
> gør.
> > På
> > > denne måde bliver det ikke nødvendigt at bruge så meget ram, da du
måske
> > kan
> > > nøjes med at indlæse den del af filen, som skal udskrives. Du kan
finde
> > lidt
> > > om NIO og filer her:
> >
> > Det ser umiddelbart tiltalende ud. Jeg ser på det - tak for hjælpen.
> >
> > /Morten
> >
> >
> >
> > > Meget overordnet:
> http://www.pcworld.dk/default.asp?Mode=2&ArticleID=4250
> > > Mere i dybden:
> > > http://www.onjava.com/pub/a/onjava/2002/10/02/javanio.html?page=1
> > > Sun's eget (lidt mangelfuldt):
> > > http://java.sun.com/j2se/1.4.1/docs/guide/nio/
> > >
> > > // Daniel J.
> > >
> > >
> >
> >
>
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.541 / Virus Database: 335 - Release Date: 25-11-2003
>
>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408918
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste