2012-07-25 27 views
0

我想用指定的字體和透明背景繪製單個字符到SWT圖像,稍後將其保存到文件。我不喜歡這樣寫道:字體到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不會更新,它始終保持透明。 如何在圖像上繪製具有透明背景的字符?

+0

SWT的功能要求:https://bugs.eclipse.org/bugs/show_bug.cgi?id=508299 – 2016-11-28 20:15:25

回答

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(); 
+0

是(as [here](http://stackoverflow.com/questions/4285464/java2d-graphics-anti-aliased/4287269#4287269)),但我試圖避免混合SWT和AWT,有沒有一種方法來做到這一點只有SWT? – 2012-07-26 07:20:01

+0

很難說,我不是專家;但是如果我的內存工作的很好,swt就是基於awt開發的,所以完全關閉uwt代碼可能非常棘手。無論如何,祝你好運! – 2012-07-26 20:18:20

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;