gpt4 book ai didi

java - 没有光栅化的 Graphics.fill(Shape)

转载 作者:行者123 更新时间:2023-11-30 11:48:11 25 4
gpt4 key购买 nike

我正在将一个 swing 组件打印到各种打印机上。其中一台打印机在 alpha channel 方面存在很大问题。如果屏幕上的任何内容都有 alpha channel ,则生成的线轴大小会很大。大多数情况下,我已经消除了 alpha channel 。但是,有一个元素使用 Graphics2d.fill(Shape) 用一些散列线填充形状,因此您可以看到散列背后的内容。有没有办法在打印期间不将 alpha 信息光栅化到 Graphics 对象的情况下实现此目的?

我相信如果通过调用 Graphics.drawLine() 而不是 fill(Shape) 来生成散列线,打印机会更快乐,但是我的形状'm 填充非常复杂(是折线图)。有没有办法用画线填充形状,这会让​​打印机更快乐?似乎所有 Paint 实现本质上都是基于光栅的。

除此之外,有没有办法告诉图像是完全透明还是完全不透明?这对打印机的线轴尺寸有帮助吗?

下面的代码用垂直散列线填充一个圆圈,允许水平散列线显示出来。

public class BufferedImagePrint extends JComponent implements Runnable, Printable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new BufferedImagePrint());
}

public void run() {
setPreferredSize(new Dimension(128, 128));
final JOptionPane optionPane = new JOptionPane(this, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, new Object[]{
"Print",
"Cancel"});
final JDialog dialog = optionPane.createDialog("Painting Transparent Image");
dialog.setResizable(true);
dialog.setVisible(true);
if ("Print".equals(optionPane.getValue())) {
doPrint();
}
}

private void doPrint() {
try {
final PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintable(this);
if(printerJob.printDialog()) {
printerJob.print();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}

@Override
protected void paintComponent(final Graphics g) {
// draw horizontal lines
g.setColor(Color.BLACK);
for (int i=0; i<getWidth(); i+=3) {
g.drawLine(0, i, getWidth(), i);
}

final BufferedImage img = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB_PRE);
final Graphics2D textureGraphics = img.createGraphics();
textureGraphics.setColor(Color.BLACK);
for (int i=0; i<32; i+=4) {
textureGraphics.drawLine(i, 0, i, 32);
}
textureGraphics.dispose();
final TexturePaint paint = new TexturePaint(img, new Rectangle(32, 32));
((Graphics2D)g).setPaint(paint);
g.fillOval(0, 0, getWidth(), getHeight());
}

public int print(final Graphics graphics, final PageFormat pageFormat, final int pageIndex) throws PrinterException {
if (pageIndex == 0) {
paintComponent(graphics);
return PAGE_EXISTS;
} else {
return NO_SUCH_PAGE;
}
}
}

最佳答案

您可以将形状绘制到临时图像,然后将图像(而不是形状)绘制到打印机吗?

关于java - 没有光栅化的 Graphics.fill(Shape),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com