You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Java组件渲染为高分辨率图像,解决放大后仅左上角显示问题

问题根因

自定义GraphicsConfiguration类缺少HiDPI缩放适配逻辑。原生sun.awt.Win32GraphicsConfig内部会绑定系统DPI缩放因子,在生成加速图像并返回对应Graphics上下文时,会自动应用缩放变换,保证组件绘制尺寸和物理像素尺寸匹配。你当前的实现仅复制了图像创建逻辑,缺失缩放映射部分,导致组件仍按原始逻辑像素尺寸绘制,仅占2倍尺寸图像的左上角区域。

解决方案

  • 补充缩放因子获取逻辑:给自定义GraphicsConfiguration类添加缩放因子属性,如果是Windows平台可通过Win32 API GetDpiForWindow获取目标组件所在窗口的DPI,除以基准DPI 96得到缩放比例,200%缩放下比例值为2.0;如果是强制生成固定2倍分辨率的图像,可直接将缩放因子固定为2.0。
  • 重写Graphics创建方法:在生成图像对应的Graphics2D实例时主动应用缩放变换,示例代码如下:
@Override
public Graphics2D createGraphics(WritableRaster raster) {
    Graphics2D g2d = super.createGraphics(raster);
    // 应用提前计算好的x、y轴缩放因子
    g2d.scale(scaleFactorX, scaleFactorY);
    // 保留原有其他配置逻辑
    return g2d;
}
  • 调整绘制调用逻辑:调用组件paint方法绘制时,直接使用从加速图像中获取的Graphics实例即可,不需要手动调整组件的大小或坐标,缩放矩阵会自动将逻辑像素映射到你传入的2倍物理像素尺寸上,完整铺满整个图像区域。

内容的提问来源于stack exchange,提问作者CooderSK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 06:36:04