0

指定されたフォントと透明な背景を持つ単一の文字をSWTイメージに描画し、後でファイルに保存したいと思います。私はこのようにします:

FontData fontData; // info about the font
char ch = 'a'; // character to draw

Display display = Display.getDefault();
TextLayout textLayout = new TextLayout(display);
textLayout.setAlignment(SWT.CENTER);
textLayout.setFont(font);
textLayout.setText("" + ch);
Rectangle r = textLayout.getBounds();
Image img = new Image(display, r.width, r.height);
GC gc = new GC(img);
textLayout.draw(gc, 0, 0);

キャラクターは描かれていますが、背景は白になっています。私はtransparentPixelを白色に設定して解決しようとしました。これにより、背景は透明になりますが、文字は見苦しくなります。また、画像に何かを描画する前に、画像のalphaDataを0(完全に透明)に設定しようとしましたが、画像に何かを描画した後、alphaDataは更新されず、常に透明のままです。画像に背景が透明なキャラクターを描くには?

4

2 に答える 2

0

TYPE_INT_ARGB で BufferedImage に描画しようとしましたか?

Image fontImage= new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = fontImage.createGraphics();

//here u write ur code with g2d Graphics

g2d.drawImage(fontImage, 0, 0, null);
g2d.dispose();
于 2012-07-25T18:43:53.887 に答える
0

透明性を有効にするには、中間の ImageData を使用する必要があります

TextLayout textLayout = new TextLayout(font.getDevice());
textLayout.setText(s);
textLayout.setFont(font);
Rectangle bounds = textLayout.getBounds();
PaletteData palette = new PaletteData(0xFF, 0xFF00, 0xFF0000);
ImageData imageData = new ImageData(bounds.width, bounds.height, 32, palette);
imageData.transparentPixel = palette.getPixel(font.getDevice().getSystemColor(SWT.COLOR_TRANSPARENT).getRGB());
for (int column = 0; column < imageData.width; column++) {
    for (int line = 0; line < imageData.height; line++) {
        imageData.setPixel(column, line, imageData.transparentPixel);
    }
}
Image image = new Image(font.getDevice(), imageData);
GC gc = new GC(image);
textLayout.draw(gc, 0, 0);
return image;
于 2016-11-29T08:31:27.360 に答える