Portál AbcLinuxu, 12. května 2025 06:50

Dotaz: Zmenseni obrazku - Java

8.8.2009 08:58 Kahler
Zmenseni obrazku - Java
Přečteno: 647×
Odpovědět | Admin

Dobry den, ve sve aplikaci zobrazuji na panel obrazky (jpg, png), pokud je obrazek tak velky, ze by se nevlezl na monitor snazim se ho zmensit timto kodem:

source = source.getScaledInstance(300, 200, Image.SCALE_SMOOTH);

Problem vsak je, ze pak se obrazek nezobrazi vubec. Hned za radkem vyse nasleduje

int width = source.getWidth(null);
int height = source.getHeight(null);

Coz vypise

-1
-1

Nikde jsem nenasel zadny funkci postup, vsude uvadeji tento pomoci getScaledInstance, nevite prosim kde muze byt chyba?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

kouby avatar 8.8.2009 10:51 kouby | skóre: 27 | blog: init | Praha
Rozbalit Rozbalit vše Re: Zmenseni obrazku - Java
Odpovědět | | Sbalit | Link | Blokovat | Admin

Z vašeho popisu mi není moc jasné jak přesně se snažíte obrázek vyrenderovat. Zde je odkaz na návod, jak správně užít getScaledInstance(). today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html, třeba vám to v něčem pomůže.

That's thirty minutes away. I'll be there in ten.
8.8.2009 11:05 Kahler
Rozbalit Rozbalit vše Re: Zmenseni obrazku - Java
Odpovědět | | Sbalit | Link | Blokovat | Admin

Takze novy poznatek. Kod:

ImageIcon imageIcon = new ImageIcon(getClass().getResource("test.jpg"));
Image source = imageIcon.getImage();
source = source.getScaledInstance(50, 50, Image.SCALE_SMOOTH);

int width = source.getWidth(null);
int height = source.getHeight(null);

System.out.println(width);
System.out.println(height);

jButton1.setIcon(new ImageIcon(source));

Tento kod, relativne funguje, obrazek se nacte, zmensi se na velikost 50x50px a zobrazi se na buttonu. Problem vsak delaji funkce getWidth a getHeight, protoze pro zmenseny obrazek vrati misto rozmeru 50 a 50 to co jsem psal vyse -1 a -1. V mem programu totiz nedavam obrazek na button tak jednoduse, ale vytvarim urcity vyrez prave na zaklade promennych width a height a jelikoz se nastavi obe na -1, je v tom pak chaos. Netusite proc tyto metody nevrati korektni rozmery?

kouby avatar 8.8.2009 11:36 kouby | skóre: 27 | blog: init | Praha
Rozbalit Rozbalit vše Re: Zmenseni obrazku - Java

Obecně metoda getScaledInstance je dosti pomalá. Je možné, že v době volání těchto metod nejsou rozměry zmenšeného obrázku ještě známy.

Můžete do kódu přidat cyklus, který bude iterovat do doby dokud nebudou rozměry známy. Například takto:

int width = -1;
int height = -1;
while (width == -1 || height == -1) {
  width = image.getWidth(null);
  height = image.getHeight(null);
}

Samozřejmě, že toto řešení není příliš elegantní. Ale mohlo by fungovat. Ještě by možná bylo vhodné cyklus

korektně ukončit, pokud se šířku a výšku nepodaří zjistit.

 

That's thirty minutes away. I'll be there in ten.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.