Ich möchte die JPEG-Bild R_G_B Kanäle als getrennte Bilder in Jlabel und die Y-Cb-Cr-Kanäle auch zeigen, ich habe die Arrays, aber nicht wissen, wie sie in Bilder konvertieren ///bekommen RGB-YCbCr Komponenten des Bildes
Edit: thanx sehr viel, das ist die Methode, die ich hier schreibe, jetzt kann es angezeigt werden nur das linke obere Viertel des Bildes und zeigt es in einer blauen Farbe unabhängig von dem Farbkanal war?
public void getRGB_YCC(int width,int height,String inFileName) {
R=new int[height][width];G=new int[height][width];
B=new int[height][width];Y=new int[height][width];
Cb1=new int[height][width];Cr1=new int[height][width];
final int values[] = new int[width * height];
int r, g, b, Y_ch,Cb,Cr, y, x;
final PixelGrabber grabber = new PixelGrabber(image.getSource(), 0, 0,width,height, values, 0, width);
try {
if (grabber.grabPixels() != true) {
try {
throw new AWTException("Grabber returned false: " + grabber.getStatus());
} catch (final Exception e) {};
}
} catch (final InterruptedException e) {};
int index = 0;
for (y = 0; y < height; ++y) {
for (x = 0; x < width; ++x) {
r = values[index] >> 16 & 0xff;
g = values[index] >> 8 & 0xff;
b = values[index] & 0xff;
Y_ch= (int)(0.299 * r + 0.587 * g + 0.114 * b);
Cb= 128 + (int) (-0.16874 * r - 0.33126 * g + 0.5 * b);
Cr= 128 + (int)(0.5 * r - 0.41869 * g - 0.08131 * b);
R [y][x]=r;
G [y][x]=g;
B [y][x]=b;
Y [y][x]=Y_ch;
Cb1[y][x]=Cb;
Cr1[y][x]=Cr;
index++;
}
}
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int[] pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
for( y=0;y<height;y++)
{
for( x=0;x<width;x++)
{
pixels[x + y*width] =R[y][x]<<16;
}
}
jLabel15.setIcon(new ImageIcon(img));
}
Ich habe diesen Code verwendet, aber es gibt eine Ausnahme "java.lang.ArrayIndexOutOfBoundsException" Was ist los? BufferedImage img = neu BufferedImage (width, height, BufferedImage.TYPE_INT_RGB); int [] Pixel = ((DataBufferInt) img.getRaster(). GetDataBuffer()). GetData(); for (y = 0; y
muhannad
Erstens, ohne weitere Informationen kann ich wirklich nicht beantworten Sie Frage (in welcher Zeile des obigen Codes wird die Ausnahme ausgelöst?), Und zweitens: Sie müssen keine 'raster.setPixel' oder andere Sachen, wie ich sagte: ... und die Ergebnisse sind sofort sichtbar. Sie arbeiten direkt an den gepufferten Bilddaten. – Neet
der bearbeitete Code ist über – muhannad