G
Guest
Gast
Hallo,
habe mich in der letzten Zeit darum bemüht mit einem BufferedImage pixel zu setzen/ zu lesen. Das funktioniert auch wenn man das BufferedImage selbst leer erstellt, aber ich möchte die pixel in einem bild von der Festplatte setzen.
Deshalb hab ich mir mit Codeschnipseln aus dem Java Almanac 1.4 folgendes zusammen gebaut:
Der Almanac sagt: ein Image kann nur zu einem BufferedImage gemacht werden indem man die Methode toBufferedImage siehe Quelltext verwendet. Trotzdem läuft der Quelltext nicht durch: z.b: findet er hasAlpha aus awt.Image nicht.
Vielleicht kann mir jemand sagen was am Quelltext falsch ist , oder eine andere Variante beschreiben Bildpixel zu lesen und zu setzen.
habe mich in der letzten Zeit darum bemüht mit einem BufferedImage pixel zu setzen/ zu lesen. Das funktioniert auch wenn man das BufferedImage selbst leer erstellt, aber ich möchte die pixel in einem bild von der Festplatte setzen.
Deshalb hab ich mir mit Codeschnipseln aus dem Java Almanac 1.4 folgendes zusammen gebaut:
Code:
import javax.imageio.*;
import java.io.*;
import java.awt.*;
import java.awt.Image.*;
import javax.swing.*;
public class pic {
public static void main(String[] args) {
Image im = null;
try {
// Read from a file
File file = new File("in.png");
im = ImageIO.read(file);
}
catch (IOException e) {}
BufferedImage b= null;
b=pic.toBufferedImage(im); // hier versuch ich dann das BufIm zu bekommen
// Use a label to display the image
/* JFrame frame = new JFrame();
JLabel label = new JLabel(new ImageIcon(image));
frame.getContentPane().add(label, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
*/
} //main -Ende-----------------------------------------------------------------------------------------------
// This method returns a buffered image with the contents of an image
public static BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return (BufferedImage)image;
}
// This code ensures that all the pixels in the image are loaded
image = new ImageIcon(image).getImage();
// Determine if the image has transparent pixels; for this method's
// implementation, see e661 Determining If an Image Has Transparent Pixels
boolean hasAlpha = hasAlpha(image);
// Create a buffered image with a format that's compatible with the screen
BufferedImage bimage = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
// Determine the type of transparency of the new buffered image
int transparency = Transparency.OPAQUE;
if (hasAlpha) {
transparency = Transparency.BITMASK;
}
// Create the buffered image
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(
image.getWidth(null), image.getHeight(null), transparency);
} catch (HeadlessException e) {
// The system does not have a screen
}
if (bimage == null) {
// Create a buffered image using the default color model
int type = BufferedImage.TYPE_INT_RGB;
if (hasAlpha) {
type = BufferedImage.TYPE_INT_ARGB;
}
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
}
// Copy image to buffered image
Graphics g = bimage.createGraphics();
// Paint the image onto the buffered image
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}
// This method returns an Image object from a buffered image
//diese Methode kann das ganze dann rückgängig machen , wenn man wieder ein Image haben will:
public static Image toImage(BufferedImage bufferedImage) {
return Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource());
}
}
Vielleicht kann mir jemand sagen was am Quelltext falsch ist , oder eine andere Variante beschreiben Bildpixel zu lesen und zu setzen.