Auf Image malen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen,

ich möchte eine Klasse schreiben die ein byte Array übergeben bekommt und daraus wieder ein Image herstellt(awt)...
auf dieses Image möchte ich gerne einen roten Kreis zeichnen und das Image wieder als byte array zurück geben...
Bis jetzt kenne ich das zeichnen nur mit der paintComponent methode... kann ich mir von dem Image das graphics objeckt holen und mit dem dann zeichnen???
 
Nimm ein BufferedImage (das vonImage erbt). Dort holst Du Dir über createGraphics() ein Graphics2D-Objekt und benutzt das zum Zeichnen (analog zum Graphics-Objekt in einer paintComponent(..)-Methode).
 
ok und wie kann ich ein BuffredImage mit einem byte array herstellen???
 
ok
Ich möchte eine util klasse herstellen sie soll mir auf ein (b)image etwas zeichnen und die byte[] zurückgeben... so die bytes können von einem awt oder swt image kommen...
wenn ich ein byte von swt übergebe ist bufferedImage immer null...
also denke ich so geht es nicht... 🙁 🙁

Code:
  public static byte [] markePicture(byte[] image,List points, String formatType) throws IOException
  {
    BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image));
    Graphics2D graphics2D = bufferedImage.createGraphics();
    graphics2D.setColor(Color.RED);
    graphics2D.setStroke(new BasicStroke(3));
    for (int i = 0; i < points.size(); i++)
    {
      Point point = (Point) points.get(i);
      graphics2D.drawOval(point.x, point.y, RADIUS, RADIUS);
    }
    ByteArrayOutputStream baos = new ByteArrayOutputStream( puffer );

    ImageIO.write(bufferedImage, formatType, baos );

    baos.flush();
    return baos.toByteArray();
  }
 
danke aber ich darf nur die awt klassen verwenden naja ich glaube sowas geht nicht
 
Code:
  public static BufferedImage markePicture(BufferedImage image,List points, String formatType) throws IOException
  {
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(), image.getHeight(),image.getType());
    Graphics2D graphics2D = bufferedImage.createGraphics();
    graphics2D.setColor(Color.RED);
    graphics2D.setStroke(new BasicStroke(3));
    for (int i = 0; i < points.size(); i++)
    {
      Point point = (Point) points.get(i);
      graphics2D.drawOval(point.x, point.y, RADIUS, RADIUS);
    }
    return bufferedImage;
  }

wenn ich sowas hier mache wird mein return bild imemr schwarz angezeigt.... außer die roten kreise warum das???
 
oder sowas

Code:
  public static BufferedImage markePicture(ImageIcon image,List points, String formatType)
  {
    BufferedImage bufferedImage = new BufferedImage(image.getIconWidth(),image.getIconWidth(), 5);
    Graphics2D graphics2D = bufferedImage.createGraphics();
    graphics2D.setColor(Color.RED);
    graphics2D.setStroke(new BasicStroke(3));
    for (int i = 0; i < points.size(); i++)
    {
      Point point = (Point) points.get(i);
      graphics2D.drawOval(point.x, point.y, RADIUS, RADIUS);
    }
  return bufferedImage;
  }
 
Anonymous hat gesagt.:
Code:
  public static BufferedImage markePicture(BufferedImage image,List points, String formatType) throws IOException
  {
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(), image.getHeight(),image.getType());
    Graphics2D graphics2D = bufferedImage.createGraphics();
    graphics2D.setColor(Color.RED);
    graphics2D.setStroke(new BasicStroke(3));
    for (int i = 0; i < points.size(); i++)
    {
      Point point = (Point) points.get(i);
      graphics2D.drawOval(point.x, point.y, RADIUS, RADIUS);
    }
    return bufferedImage;
  }

wenn ich sowas hier mache wird mein return bild imemr schwarz angezeigt.... außer die roten kreise warum das???

Vllt weil du ein neues BufferedImage in deiner Funktion erstellst, mit dem "BufferedImage image" welches du übergibst, machst du ja nichts? So werden die Kreise auf dein neu angelegtes BufferedImage gezeichnet, und dieses dann von der Funktion zurück gegeben. Oder sehe ich hier etwas falsch?
 
so soll es auch sein .... das alte bilde soll nicht übermalt werden darum stell ich ein neues her welches ich mit roten kreisen übermal... und dieses geb ich zurück und wird dann angezeigt mit einem byet[] funktioniert es die unteren 2 methode nicht es werden nur rote kreise angezeigt
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben