Die Pixeldaten eines PufferedImage werden in Raster gespeichert, und Colormodel speichert Farbraum, Typ und andere Informationen. Bild lesen und schreiben Sie die Schnittstelle, geben Sie es in ein Glas ein und fügen Sie die Startparameter hinzu - XbootClassPath/pnewimageFormatio.jar.
So lesen und schreiben Sie eine Bilddatei in Java, verwenden Sie einfach das ImageIo -Objekt. Der Code zum Lesen von Bilddateien lautet wie folgt:
Die Codekopie lautet wie folgt:
Datei Datei = neue Datei ("d: //test//blue_flower.jpg");
Bufferedimage image = imageio.read (Datei);
Der Code zum Schreiben einer Bilddatei lautet wie folgt:
Die Codekopie lautet wie folgt:
Datei outputFile = new Datei ("gespeichert.png");
Imageio.Write (BufferedImage, "PNG", OutputFile);
Der Code zum Lesen von Pixeldaten aus einem BufferedImage -Objekt lautet wie folgt:
Die Codekopie lautet wie folgt:
int type = image.gettType ();
if (type == bufferedimage.type_int_argb || type == bufferedimage.type_int_rgb)
return (int []) image.getRaster (). getDataElements (x, y, breite, Höhe, Pixel);
anders
return image.getRGB (x, y, width, Höhe, Pixel, 0, Breite);
Erstens, wenn der Bildtyp nicht 32-Bit-Int-Typ-Daten ist, lesen Sie einfach den RGB-Wert direkt und schreiben Sie direkt, andernfalls müssen Sie vom Raster gehen
Im Objekt lesen.
Das Schreiben von Pixeldaten in das BufferedImage -Objekt folgt auch den obigen Regeln. Der Code ist wie folgt:
Die Codekopie lautet wie folgt:
int type = image.gettType ();
if (type == bufferedimage.type_int_argb || type == bufferedimage.type_int_rgb)
Image.getRaster (). setDataElements (x, y, width, Höhe, Pixel);
anders
Image.SetRGB (x, y, Breite, Höhe, Pixel, 0, Breite);
Das Lesen von Bildern erfordert möglicherweise eine gewisse Zeit, um zu warten, da die Bilddatei relativ groß ist
Die Prozessor -API bietet das Mediendracker -Objekt, um das Laden von Bild zu verfolgen und andere Vorgänge zu synchronisieren.
Mediathracker Tracker = new MediaTracker (this);
Tracker.addimage (Image_01, 1);
Tracker.waitforid (1, 10000) // Warte 10 Sekunden lang, um das Bild iamge_01 zu laden
Der Code zum Lesen des Bild-RGB-Farbwerts von einem 32-Bit-Int-Daten-CARGB lautet wie folgt:
1 int alpha = (CARGB >> 24) & 0xff;
2 int rot = (cargb >> 16) & 0xff;
3 int green = (cargb >> 8) & 0xff;
4 int blau = cargb & 0xff;
Der Code zum Schreiben von RGB -Farbwerten in einen Int -Typ -Daten -CRGB lautet wie folgt:
CRGB = (Alpha << 24) |
Der Code zum Erstellen eines BufferedImage -Objekts lautet wie folgt:
BufferedImage image = newbuffenedImage (256, 256, bufferedimage.type_int_argb);
Eine vollständige Quellcode -Demo lautet wie folgt:
Die Codekopie lautet wie folgt:
Paket com.gloomyfish.swing;
Import Java.awt.BorderLayout;
Import Java.awt.Dimension;
importieren java.awt.graphics;
Import Java.awt.Graphics2d;
importieren java.awt.renderingHINDINTS;
Import Java.awt.image.BuffenedImage;
Import Java.io.file;
importieren java.io.ioException;
import Javax.imageo.imageo;
import Javax.swing.jcomponent;
importieren javax.swing.jframe;
Public Class Plasmademo erweitert JComponent {
/**
*
*/
Private statische endgültige lange Serialversionuid = -2236160343614397287L;
privates bufferedimage Image = null;
private int size = 256;
public plasmademo () {
super();
this.setopaque (falsch);
}
Protected void PaintComponent (Grafik g) {
Graphics2d G2 = (Graphics2d) g;
g2.setRenderingHint (renderingHints.key_antialiasing, renderingHints.value_antialias_on);
G2.Drawimage (getImage (), 5, 5, Image.getWidth (), Image.Getheight (), NULL);
}
private bufferedimage getImage () {
if (image == null) {
Image = new bufferedImage (Größe, Größe, bufferedimage.type_int_argb);
int [] rgbdata = new int [Größe*Größe];
GenerateNoiseImage (rgbdata);
setRGB (Bild, 0, 0, Größe, Größe, rgbdata);
Datei outfile = new Datei ("plasma.jpg");
versuchen {
Imageio.Write (Bild, "JPG", Outfile);
} catch (ioException e) {
E. printstacktrace ();
}
}
Return Image;
}
public void generatenoiseImage (int [] rgbdata) {
int index = 0;
int a = 255;
int r = 0;
int g = 0;
int b = 0;
für (int row = 0; Zeile <Größe; Zeile ++) {
für (int col = 0; col <size; col ++) {
// Setzen Sie den zufälligen Farbwert für jedes Pixel
r = (int) (128.0 + (128,0 * Math.sin ((Reihe + col) / 8.0));
g = (int) (128.0 + (128,0 * Math.sin ((Reihe + col) / 8.0));
B = (int) (128,0 + (128,0 * Math.sin ((Reihe + col) / 8.0));
rgbdata [index] = ((a) & 0xff) << 24) |
((Clamp (R) & 0xff) << 16) |
((Clamp (g) & 0xff) << 8) |
((Clamp (b) & 0xff));
Index ++;
}
}
}
Private INT Clamp (int rgb) {
if (rgb> 255)
Rückkehr 255;
if (rgb <0)
Rückkehr 0;
RGB zurückgeben;
}
public void setRGB (BufferedImage -Bild, int x, int y, int width, inthohe, int [] pixel) {
int type = image.gettType ();
if (type == bufferedimage.type_int_argb || type == bufferedimage.type_int_rgb)
Image.getRaster (). setDataElements (x, y, width, Höhe, Pixel);
anders
Image.SetRGB (x, y, Breite, Höhe, Pixel, 0, Breite);
}
public static void main (String [] args) {
JFrame Frame = New JFrame ("Noise Art Panel");
Frame.SetDefaultCloseOperation (jframe.exit_on_close);
Frame.GetContentPane (). setLayout (new BorderLayout ());
Frame.GetContentPane (). Add (New Plasmademo (), BorderLayout.Center);
Frame.SetPreferredSize (neue Dimension (400 + 25.450));
Frame.Pack ();
Frame.SetVisible (True);
}
}