# Stringtext mit BufferedImage Textur.



## radiac (22. Okt 2009)

Hallo Leute,


ich habe mal versucht ein Stringtext zeichnen zu lassen und dazu ein BufferedImage als Textur.
Funktionierte irgendwie nicht .
Normale paints funktionieren.

Weis jemand, ob sowas überhaupt möglich ist?
Wenn ja, gibts dafür ein Beispiel???


Vielen Dank

Radiac


----------



## Steev (22. Okt 2009)

radiac hat gesagt.:


> ich habe mal versucht ein Stringtext zeichnen zu lassen und dazu ein BufferedImage als Textur.
> Funktionierte irgendwie nicht .



Ich wiederhole mal kurz:

Du willst einen String zeichnen und dafür eine Textur verwenden?

[Java]
...
private TexturePaint texture = new TexturePaint(yourImage, yourAnchor);
...

public void paint(Graphics g) {
  Graphics2D g2  =  (Graphics2D) g;
  g2.setPaint(texture);
  g2.drawString(0, 0, yourString);
}[/Java]

TexturePaint (Java 2 Platform SE v1.4.2)


----------



## radiac (22. Okt 2009)

Hi Steev,

ich will ein String, anstatt mit einer g.setColor(Color c) mit einem Bild füllen.
Das Bild soll natürlich nur da zu sehen sein, wo auch die Buchstaben angezeigt werden.


```
Graphics2D g2d = (Graphics2D) g; 
      BufferedImage bi = new BufferedImage (5,5,BufferedImage.TYPE_INT_RGB);
      Graphics2D textur = bi.createGraphics();

      // Füllen des BuffImage mit Muster

      Rectangle r = new Rectangle (0,0,5,5);
      TexturePaint tb = new TexturePaint(bi,r);
      g2d.setFont(new Font("Arial",Font.BOLD,14));
      g2d.drawString("TEXTUR",10,10);
```

Hier wird der String mit bi gefüllt.
Jetzt will ich aber anstatt RGB Farben ein Bild da reinladen.

Meine Frage ist nun ob das überhaupt möglich ist. Ich hab es nicht hinbekommen


----------



## radiac (22. Okt 2009)

Weis niemand was?


----------



## madboy (22. Okt 2009)

Ich weiß nicht, ob das der optimale Weg ist, aber funktionieren sollte es:
Male zwei Bilder. Eins mit der Textur (Bild1), eins mit weißem Text auf schwarzem Grund (Bild2).
Such dir eine Operation auf zwei Bildern, mit der du die Bilder "verknüpfen" kannst, sodass überall wo im Text-Bild weiß ist, das Originalbild stehen bleibt, sonst nicht.

Naiver Ansatz:
for alle Pixel aus Bild1 
{
  if(Bild2.Pixel == schwarz)
  { 
    Bild1.setPixel = schwarz 
  }
}


----------



## Steev (22. Okt 2009)

radiac hat gesagt.:


> Weis niemand was?



Doch, hier weis jemand was 

Die Lösung, die ich oben gepostet habe funktioniert doch einwandfrei...

Hier mal ein vollständiges Beispiel (Achtung, nur schnell gecodet...)

[Java]import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.TexturePaint;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TexturePaintTest extends JPanel {

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        frame.setTitle("TexturePaintTest#1");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension d = tk.getScreenSize();
        frame.setSize(800, 600);
        frame.setLocation((d.width - frame.getWidth()) / 2, (d.height - frame.getHeight()) / 2);

        frame.setLayout(new BorderLayout());
        frame.add(new TexturePaintTest());

        frame.setVisible(true);
    }

    private static final long serialVersionUID = 6796947238573004947L;

    private BufferedImage     img              = null;
    private TexturePaint      texture          = null;
    private Font              font             = null;

    public TexturePaintTest() {}

    private void init() {
        try {
            URL url = getClass().getResource("texture.png");
            img = ImageIO.read(url);

            Rectangle anchor = new Rectangle(img.getWidth(), img.getHeight());
            texture = new TexturePaint(img, anchor);

            font = new Font("Arial Black", Font.BOLD, 120);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void paint(Graphics g) {
        if (img == null)
            init();

        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setPaint(texture);
        g2.setFont(font);
        g2.drawString("String", 100, 100);
    }
}
[/Java]


----------



## radiac (23. Okt 2009)

Jo, jetzt klappt es auch  Super Sache 


Danke Steev . Das erspart mir jetzt massig Zeit


----------

