Browse Source

REPORT-55743 【组件背景分离】组件复用-在新jar下新建的报表块,放到旧版本jar下设计器显示黑色缩略图

【问题原因】
1. 新设计器要能在布局画布上预览背景图,所以报表块的缩略图要变成支持透明的,
但是创建的缩略图BufferImage的透明背景时(0, 0, 0, 0)
2. 旧设计器在从XML中读取缩略图时,只读取RGB数据,也就是只读取了(0, 0, 0),
所以显示了黑色
【改动思路】
新设计器创建的缩略图透明背景为(255, 255, 255, 1)
final/10.0
Starryi 3 years ago
parent
commit
b24f4e9262
  1. 16
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java

16
designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java

@ -39,14 +39,17 @@ import com.fr.report.elementcase.TemplateElementCase;
import com.fr.report.worksheet.FormElementCase; import com.fr.report.worksheet.FormElementCase;
import com.fr.report.worksheet.WorkSheet; import com.fr.report.worksheet.WorkSheet;
import javax.imageio.ImageIO;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollBar; import javax.swing.JScrollBar;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Transparency; import java.awt.Transparency;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File;
/** /**
* 表单中的ElementCase编辑面板 * 表单中的ElementCase编辑面板
@ -132,13 +135,22 @@ public class FormElementCaseDesigner
int width = size.width; int width = size.width;
int height = size.height; int height = size.height;
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); // 使用TYPE_INT_RGB和new Color(255, 255, 255, 1)设置有透明背景buffer image,
// 使得创建出来的透明像素是(255, 255, 255, 1),而不是(0, 0, 0, 0)
// 这样不支持透明通道缩略图的旧设计器打开新设计器创建的模版时,就不会创建出拥有黑色背景的缩略图
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics(); Graphics2D g2d = image.createGraphics();
// 创建一个支持透明背景的buffer image // 创建一个支持透明背景的buffer image
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT); image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose(); g2d.dispose();
g2d = image.createGraphics(); g2d = image.createGraphics();
// 使用TYPE_INT_RGB和new Color(255, 255, 255, 1)设置有透明背景buffer image,
// 使得创建出来的透明像素是(255, 255, 255, 1),而不是(0, 0, 0, 0)
// 这样不支持透明通道缩略图的旧设计器打开新设计器创建的模版时,就不会创建出拥有黑色背景的缩略图
g2d.setColor(new Color(255, 255, 255, 1));
g2d.fillRect(0, 0, (int) size.getWidth(), (int) size.getHeight());
Grid grid = this.elementCasePane != null ? this.elementCasePane.getGrid() : null; Grid grid = this.elementCasePane != null ? this.elementCasePane.getGrid() : null;
if (grid != null) { if (grid != null) {
boolean oldTranslucent = grid.isTranslucent(); boolean oldTranslucent = grid.isTranslucent();
@ -148,6 +160,8 @@ public class FormElementCaseDesigner
grid.setTranslucent(oldTranslucent); grid.setTranslucent(oldTranslucent);
} }
ImageIO.write(image, "png", new File("/Users/Starryi/test.png"));
} catch (Exception e) { } catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
} }

Loading…
Cancel
Save