Avatar billede myplacedk Nybegynder
23. november 2004 - 20:31 Der er 2 kommentarer og
1 løsning

Pæn nedskalering af raster-billede

Jeg har et billede som Image-objekt, og skal bruge billedet som BufferedImage-objekt, skaleret til en anden størrelse.

Hvis jeg gjorde det med et grafik-program, ville jeg vælge "bilinear interpolation" for at få den effekt jeg ønsker, uanset jeg der skaleres op eller ned.

Det virker også fint når der skaleres op, men når der skaleres ned fås effekten "nearest neighbor", dvs. pixels smides væk, uden at flytte indholdet til andre pixels.

Koden jeg bruger nu er:

Image image1;
BufferedImage image2;
int width, height; // Ønsket størrelse på image2
[...]
Graphics2D graphics2D = image2.createGraphics();
graphics2D.setRenderingHint(
  RenderingHints.KEY_INTERPOLATION,
  RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image1, 0, 0, width, height, null);

Jeg har prøvet at sætte KEY_ANTIALIASING til VALUE_ANTIALIAS_ON, men uden synlig effekt.

Hvordan opnår jeg en pæn nedskalering, hvor der ikke bare bliver smidt pixels væk?

(Jeg bruger Sun's j2se 1.5)
Avatar billede _carsten Nybegynder
24. november 2004 - 08:34 #1
Nu er grafik ikke det jeg bruger mest tid på, men jeg tror at getScaledInstance(int w, int h, int hints) i Image klassen er den du søger.
Avatar billede myplacedk Nybegynder
25. november 2004 - 20:26 #2
Ah ja, den nedskalerer som jeg vil have det. Det er så ikke så pænt, hvis man skalerer op, men det er ikke så vigtigt her. :)

Lægger du et svar?
Avatar billede _carsten Nybegynder
25. november 2004 - 21:04 #3
Yes !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester