Feladatok‎ > ‎

Kép kitöltése

Feladat

Olvasd be a kep.png képet, majd a standard inputon beérkező koordinátában alkalmazz egy piros színű "kitöltést".

A kitöltés élben szomszédos pixeleken át halad, de elakad az eltérő színű pixeleknél.

Példa bemenet

kep.png
51 213

Hasznos lehet

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageEditor {

	public static void main(String[] args) {
		int[][] pixels = read("kep.png");
		int h = pixels.length,
				w = pixels[0].length;
		pixels[h/2][w/2] = 0xFF0000; // #FF0000 = rgb(255,0,0)
		write("kep2.png", pixels);
	}

	private static int[][] read(String path) {
		try {
			BufferedImage img = ImageIO.read(new File(path));
			int w = img.getWidth(),
					h = img.getHeight();
			int[][] out = new int[h][w];
			for(int i=0;i<w;++i)
				for(int j=0;j<h;++j)
					out[j][i] = img.getRGB(i,j);
			return out;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

	private static void write(String path, int[][] pixels) {
		int h = pixels.length,
				w = pixels[0].length;
		BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
		for(int i=0;i<w;++i)
			for(int j=0;j<h;++j)
				img.setRGB(i,j,pixels[j][i]);
		try {
			ImageIO.write(img,"png",new File(path));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

A read(String) egy kétdimenziós int tömbbel tér vissza, ahol az [i][j]-edik az i-edik sor j-edik oszlopában szereplő pixel színe. A színt egy tizenhatos számrendszerbeli számként könnyű elképzelni, ahol RRGGBB formátumban tudunk egy színt megadni. Javában a 0x… előtaggal lehet tizenhatos számrendszerbeli számot megadni. (Tehát a 0x3A = 3×161+10×160=48+10=58.) A 0x00FF00 a "legzöldebb" szín.

Hasonló

ą
kep.png
(11k)
Bence Hornák,
2016. máj. 5. 7:16
Comments