_________________________________________________________________________
We are pretty sure you have seen this image before. It is time to take a closer look at it… hmmmm… lots of blue…
But there are also lots of others, as you are seeing a 24 bit color image. And to get those, every pixel has some information about the red, green and blue components in it.
Given a line of pixels in the image and a component color (RGB), you should compute the sum of that component for every pixel in the line + 1. In decimal.
Sample input
B515
G335
R380
Sample output
25763
93405
89089
TEST
G73R481B126
_________________________________________________________________________
UserInterface Class:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Clase encargada de mantener el bucle de ejecución del programa hasta el fin de linea.
* @author Javier de Pedro López
*/
public class UserInterface {
/**
* Permite mantener el bucle de lecutra.
*/
public void run() throws IOException{
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//Bucle que realiza las lecturas hasta que lo recibido sea EOF (null)
ImageLineReader imReader = new ImageLineReader("../trabaja.bmp");
do{
line = reader.readLine();
if (line != null && !line.trim().equals("")){
char component = line.charAt(0);
int lineImage = Integer.valueOf(line.substring(1));
System.out.println(imReader.getSumComponent(lineImage, component));
}
} while(line != null);
}
}
ImageLineReader Class:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* Clase encargada de leer las lineas de una imagen y devolver la suma de su componente.
* @author Javier de Pedro López
*/
class ImageLineReader {
//ATRIBUTOS//
private BufferedImage _image;
//CONSTRUCTORES//
/**
* Instancia una nueva imagen.
* @param nameImage nombre de la imagen a guardar en el buffer.
* @throws IOException error si no se encuentra la imagen.
*/
public ImageLineReader(String nameImage) throws IOException{
_image = ImageIO.read(new File(nameImage));
}
//METODOS//
/**
* Permite obtener la suma de una fila de una imagen determinada.
* @param line la linea de la que se quiere obtener la suma.
* @param component componente r, g o b que se quiere obtener.
* @return la suma de la componente en la fila.
*/
public int getSumComponent(int line, char component){
int sum = 0;
for (int i = 0; i < _image.getWidth(); i++){
Color color = new Color(_image.getRGB(i, line));
if (component == 'R'){
sum += color.getRed();
}else if(component == 'G'){
sum += color.getGreen();
}else if (component == 'B'){
sum += color.getBlue();
}
}
return sum + 1;
}
}
Pingback: Poesía binaria » Recopilación de soluciones para los retos de #tuentiContest . Challenge #14