Portál AbcLinuxu, 12. května 2025 06:50
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?
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.
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?
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.