swt 设为背景的图片为什么会消失

yzg000123 2009-05-25 10:37:50
先把代码看下
if(enforc == true){
image = new Image(display, compositeImage.getClientArea().width,
compositeImage.getClientArea().height);
image.type = SWT.BITMAP;
r_gc = new GC(image);
int min_x = table_min_x;
int max_y = table_max_y;
// 画图开始位置
for (int i = 0; i < LIST_R_SIZE; i++) {
r_coordinate_x = (file_r_x[i] - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
r_coordinate_y = (drawpictureRate_y * picture_h - file_r_y[i] + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
r_gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
r_gc.drawOval(r_coordinate_x, r_coordinate_y, diameter, diameter);
}
for (int i = 0; i < LIST_S_SIZE; i++) {
s_coordinate_x = (file_s_x[i] - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
s_coordinate_y = (drawpictureRate_y * picture_h - file_s_y[i] + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
r_gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
r_gc.drawLine(s_coordinate_x, s_coordinate_y - s_length,
s_coordinate_x, s_coordinate_y + s_length);
r_gc.drawLine(s_coordinate_x - s_length, s_coordinate_y,
s_coordinate_x + s_length, s_coordinate_y);
}

// 竖线
picture_table_min_x = (table_min_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
picture_table_max_x = (table_max_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
picture_table_max_y = (drawpictureRate_y * picture_h - table_min_y + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
picture_table_min_y = (drawpictureRate_y * picture_h - table_max_y + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);

for (int i = 0; i < table_width_line; i++) {
picture_table_min_x = (min_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
r_gc.setAlpha(35); // 透明度
r_gc.drawLine(picture_table_min_x, picture_table_min_y,
picture_table_min_x, picture_table_max_y);
min_x += table_scale_w;
}
// 横线
picture_table_min_x = (table_min_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
for (int i = 0; i < table_height_line; i++) {
picture_table_min_y = (drawpictureRate_y * picture_h - max_y + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
r_gc.setAlpha(35); // 透明度
r_gc.drawLine(picture_table_min_x, picture_table_min_y,
picture_table_max_x, picture_table_min_y);
max_y -= table_scale_h;
}
r_gc.copyArea(image, 0, 0);
r_gc.drawImage(image, 0, 0);
r_gc.dispose();
compositeImage.setBackgroundImage(image);
enforc = false;
}

因为对画图生成不太了解,上面的代码我认为是直接将图片画到了内存当中然后在设为Composite 的背景的,问题是我在一个放大的功能里重新画图设为背景,开始没什么问题,到了最后放的较大的时候图片北京图片就消失了。不知道是为甚么。有没有解决办法。谢谢各位高手了帮忙解决下好吗?

...全文
163 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
njclsc 2009-05-26
  • 打赏
  • 举报
回复
背景容器添加一个滚动条,这样放的在大都可以看到了,还有你的控件要有向对应的类型,
yzg000123 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yzg000123 的回复:]
放大的时候我将图片image.dispose();了,然后又重新画图设为背景的。
[/Quote]
不是图片大的看不到了,是报异常了。
Exception in thread "main" org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:3589)
at org.eclipse.swt.graphics.Image.init(Image.java:1577)
at org.eclipse.swt.graphics.Image.<init>(Image.java:174)
at new_picture.Draw3D.drawPicture3D(Draw3D.java:520)
at new_picture.Draw3D.magnify(Draw3D.java:871)
at new_picture.Interface$10.widgetSelected(Interface.java:318)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at new_picture.Interface.main(Interface.java:360)
yzg000123 2009-05-25
  • 打赏
  • 举报
回复
放大的时候我将图片image.dispose();了,然后又重新画图设为背景的。
termux-app_v0.118.3+github-debug_arm64-v8a.apk是专为安卓arm64-v8a架构设备打造的开源终端模拟器安装包,为GitHub编译的debug调试版本,适配主流64位安卓手机、平板设备。该工具最大的核心优势是无需设备ROOT权限,即可在安卓系统中搭建完整且独立的轻量化Linux运行环境,打破移动端系统限制,为移动开发、远程运维、程序调试提供便携的终端工作场景,区别于普通正式版,该调试版本保留完整运行日志,适配开发调试场景。 该软件内置专属Linux包管理体系,搭载pkg包管理器,支持在线安装Python、Git、SSH、编译工具链、网络工具等海量开源组件,完整复刻电脑端Linux常用命令操作,可直接在移动端执行代码编译、脚本运行、网络测试、文件处理等操作。软件采用独立沙盒目录运行,所有程序、配置文件均隔离存储,不会篡改、污染安卓原生系统文件,保障设备系统安全稳定。 在实用功能上,软件支持双向SSH远程运维,既可作为客户端远程连接云服务器、本地主机完成运维工作,也可搭建本地服务端实现电脑反向连接移动端终端。同时支持自定义Shell脚本、自动化任务编写,能够实现文件批量处理、定时任务执行等功能,适配轻量化开发需求。适配手机本地存储读写,可自由调用设备本地文件,实现数据互通处理。 本次arm64架构版本针对64位移动处理器深度优化,运行流畅、资源占用低,后台驻留稳定性更强。Debug调试版本可全程记录程序运行日志、报错信息,方便开发者排查程序异常、调试代码漏洞,是开发测试专用版本。该软件广泛应用于移动轻量开发、便携式服务器运维、网络环境调试等合法场景,是移动端高效的便携Linux终端工具。

58,439

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧