2011-11-30:
Dzięki,
zacząłem w ten sposób, że z dokumentacji Oracle wrzuciłem fragment kodu do kolejnej pozycji menu:
else if (menuOpen.equals("Tworz obraz")) {
//kod: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/image/MemoryImageSource.html
int w = 100;
int h = 100;
int pix[] = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
int red = (y * 255) / (h - 1);
for (int x = 0; x < w; x++) {
int blue = (x * 255) / (w - 1);
pix[index++] = (255 << 24) | (red << 16) | blue;
}
}
Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
}
Czyli jak rozumiem teraz mam stworzony w pamięci obrazek. Muszę go następnie wyświetlić w oknie lub zapisać do pliku (interesuje mnie i jedno i drugie). W jaki sposób wrzucić go do pliku?
Prócz tego zastanawiam się, jak np. narysować prostokąt czy napisać tekst. Do tej pory robiłem to poprzez
gDC.drawRect(int1,int2,int3,int4);
gDC.drawString("tekst");
nie wiem, jak powyższe zastosować dla pix[].
Pozdrawiam!
2011-12-01:
Witam,
teraz kod związany z otwarciem pozycji menu "rysowanie" jest taki:
else if (menuOpen.equals(cmd)) {
//http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/image/MemoryImageSource.html
//======== RYSOWANIE W PAMIĘCI ========
int w = 100;
int h = 100;
int pix[] = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
int red = (y * 255) / (h - 1);
for (int x = 0; x < w; x++) {
int blue = (x * 255) / (w - 1);
pix[index++] = (255 << 24) | (red << 16) | blue;
}
}
Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
//http://docs.oracle.com/javase/7/docs/api/javax/swing/JFileChooser.html
//=== WYBIERANIE MIEJSCA ZAPISU PLIKU ======
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
//===== EDYCJA RYSUNKU =======
int type = BufferedImage.TYPE_INT_ARGB;
BufferedImage bi = new BufferedImage(width, height, type);
Graphics2D g2d = bi.createGraphics();
//najpierw zapisuje istniejący obraz
g2d.drawImage(img, 0, 0, null);
//rysowanie czegokolwiek innego
//zwolnienie
g2d.dispose();
}
Kłopotem jest dla mnie zakres zmiennych parent (oraz analogicznie width i height):
parent is not public in java.awt.Component; cannot be accessed from outside package
oraz zastosowanie drawRect i drawString w kontekście powyższego kodu.
Pozdrawiam!