因为soImage比较大,所以想用标准库的com.picture.snap()来抓屏合成gif,但发现抓到的图片像素丢失严重,特别是抓aardio的IDE里的代码时,或者抓网页上的内容时,发现文字的笔画丢失太严重了,甚至会大片大片的字母丢失.
问题:
1.怎么解决com.picture.snap()抓屏失真的问题?
2.com.picture.snap()抓屏怎么在内存中合成GIF动画图片然后写出到本地文件?
3.在内存中合成GIF动画后怎么写入到剪贴板?
下面是源码,发给大家研究研究:
import win.ui;
/*DSG{{*/
var winform = win.form(text="GIF录制器";right=636;bottom=233;bgcolor=16777215;border="none";parent=...)
winform.add(
plus={cls="plus";left=401;top=30;right=601;bottom=230;z=7};
plusStart={cls="plus";text="开始";left=220;top=47;right=271;bottom=73;bgcolor=11124224;color=16777215;dr=1;dt=1;notify=1;z=5};
plusStop={cls="plus";text="停止";left=279;top=47;right=330;bottom=73;bgcolor=11124224;color=16777215;dr=1;dt=1;notify=1;z=6};
static={cls="static";left=0;top=0;right=644;bottom=27;aw=1;bgcolor=11124224;color=16777215;dl=1;dr=1;dt=1;z=2};
static2={cls="static";text="帧数:";left=222;top=96;right=333;bottom=114;color=11124224;dr=1;dt=1;transparent=1;z=1};
static3={cls="static";text="GIF录制器";left=8;top=6;right=77;bottom=21;color=16777215;dl=1;dt=1;transparent=1;z=3};
staticBlackbox={cls="static";left=3;top=30;right=203;bottom=230;ah=1;aw=1;bgcolor=0;border=1;db=1;dl=1;dr=1;dt=1;z=4}
)
/*}}*/
import console;
import com.picture;
import win.ui.simpleWindow;
var sfm = win.ui.simpleWindow(winform)
/*自定义标题栏关闭、最大化、最小化按钮样式用法与plus控件的skin函数相同*/
sfm.skin(
background = {
hover = 0xAA00bea9;
active = 0xAA00bea9;
default = 0xFF00bea9;
}
color = {
hover = 0xffffffff;
active = 0xff202020;
default = 0xffffffff;
}
)
//console.varDump(sfm.titlebar)
winform.plusStart.skin(
background = {
hover = 0xEF00bea9;
}
)
winform.plusStop.skin(
background = {
hover = 0xEF00bea9;
}
)
winform.plusStart.oncommand = function(id,event){
//winform.msgbox("开始")
var 左坐标 = winform.left + winform.staticBlackbox.left;
var 顶坐标 = winform.top + winform.staticBlackbox.top;
var 宽度 = winform.staticBlackbox.width;
var 高度 = winform.staticBlackbox.height;
var bmp = com.picture.snap(,左坐标,顶坐标,宽度,高度)//窗口句柄,左坐标,顶坐标,宽,高
//winform.plus.setBackground(bmp,,true)//不清晰
winform.plus.foreground = bmp
}
winform.plusStop.oncommand = function(id,event){
winform.msgbox("停止")
}
//窗体开洞
winform.transparent(128,0);
winform.enableDpiScaling();
winform.show();
win.loopMessage();
return winform;
/*
窗口上所有黑色的都会被透明化,包括外边框/标题/控件文字等,所以要用plus模拟无黑色像素的界面.
*/