aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 14941|回复: 5

请问com.picture如何截图放大才不失真?

[复制链接]

4

主题

20

回帖

294

积分

二级会员

积分
294
发表于 2018-3-19 21:42:08 | 显示全部楼层 |阅读模式
本帖最后由 wedd 于 2018-3-19 21:44 编辑

经常使用一个取色工具,可以放大所选区域并显示在控件上,然后再对该控件进行取色。该软件在win10下无法使用。
于是想用aardio开发一个类似软件,但是发现截图放大后,图片是失真的,对比如图(win7环境下):
QQ截图20180319213239.jpg
左侧是aardio效果,右侧是该取色软件效果,都是4倍大小,可以看出图像窗口显示的不一样(猜测该软件未去锯齿)

请教一下,如何才能实现截图放大后不失真呢?

程序文件(含鼠标指针图片等素材)
屏幕取色器.7z (12.28 KB, 下载次数: 710)

源码:
import win.ui;
/*DSG{{*/
mainForm = win.form(text=
"aardio form";right=623;bottom=391)
mainForm.add(
edit={cls=
"edit";left=40;top=128;right=112;bottom=152;align="center";readonly=1;z=5};
pic_snap={cls=
"plus";left=272;top=8;right=608;bottom=312;foreRepeat="stretch";z=3};
plus_pick={cls=
"plus";left=40;top=72;right=72;bottom=104;bgcolor=16777215;border={width=1};foreRepeat="center";foreground="\res\pick.png";notify=1;x=16;z=1};
plus_zoom={cls=
"plus";left=96;top=72;right=128;bottom=104;bgcolor=16777215;foreRepeat="center";foreground="\res\zoom.png";hide=1;notify=1;z=2};
trackbar={cls=
"trackbar";left=280;top=336;right=608;bottom=366;max=16;min=1;z=4};
txt_zoom={cls=
"static";text="放大倍数: 1 倍";left=288;top=368;right=600;bottom=384;align="center";transparent=1;z=6}
)
/*}}*/

import gdi;
import mouse;
import com.picture;



import win.cur;
var hCursor = win.cur.loadfile("\res\pick.ico");
mainForm.plus_pick.onMouseDown =
function(wParam,lParam){
    win.cur.beginCur();
   
    mainForm.plus_pick.capture =
true;
}

mainForm.plus_pick.onMouseClick =
function(wParam,lParam){
    mainForm.plus_pick.capture =
false;
    win.cur.endCur();
}

var zoom_value=1;

mainForm.trackbar.onnotify =
function(id,code,ptr){  
   
if(code=0xFFFFFFF4){   
       mainForm.txt_zoom.text=
"放大倍数: "++mainForm.trackbar.pos++" 倍";
       zoom_value = mainForm.trackbar.pos;
    }   
}

var picw = mainForm.pic_snap.width;
var pich = mainForm.pic_snap.height;
var ww,wh = win.getScreen();
var tmId = mainForm.setInterval(
    80,
   
function(hwnd,msg,id,tick){
        
if(win.cur.beginning){
            
var x,y=mouse.getPos();
            px=gdi.getPixel(x,y);
            mainForm.edit.text = px;
            mainForm.edit.bgcolor=px;
            
var w = tonumber(picw/zoom_value);
            
var h = tonumber(pich/zoom_value);
            
var x1= tonumber(x-w/2);
            
var y1= tonumber(y-w/2);
            
if(x1<0) x1=0;
            
if(y1<0) y1=0;
            
if(x1>ww-w) x1=ww-w;
            
if(y1>wh-h) y1=wh-h;
            
            
//console.log(w,h);
            //var pic = com.picture.snap(null,x1,y1,w,h);
            var pic = com.picture.snapClient(null,x1,y1,w,h);
            
//pic.Save("1.jpg")
            //pic = gdip.bitmap(pic)
            //mainForm.pic_snap.setBackground(pic,,true);
            mainForm.pic_snap.setForeground(pic,,true);
            
//mainForm.pic_snap.redraw()
            com.Release(pic);
        }
    }
)





mainForm.enableDpiScaling();
mainForm.show();

return win.loopMessage();



3

主题

35

回帖

614

积分

培训班

积分
614
发表于 2018-3-19 22:16:43 | 显示全部楼层
存成png或者bmp 好点吧,,右边的貌似是锐化了,就取色来说,左边的才是不失真啊。。。

166

主题

2154

回帖

1万

积分

管理员

积分
13056
发表于 2018-3-20 01:35:54 | 显示全部楼层
plus控件缩放质量其实是比较好的,
你要是喜欢那种粗糙带原始锯齿的,直接用picturebox就好了。

4

主题

20

回帖

294

积分

二级会员

积分
294
 楼主| 发表于 2018-3-20 09:02:08 | 显示全部楼层
Jacen.He 发表于 2018-3-20 01:35
plus控件缩放质量其实是比较好的,
你要是喜欢那种粗糙带原始锯齿的,直接用picturebox就好了。

这个,一开始确实是用的picturebox控件,但限于水平问题,com.picture.snapClient到的图片数据,就是不能显示到picturebox。

我主要是做前端和web开发,对win32并没有什么经验,应该如何实现写入picturebox?
屏幕截取是根据鼠标位置快速刷新的,所以不适合保存为文件然后载入。

1

主题

47

回帖

1434

积分

新手入门

积分
1434
发表于 2018-3-20 09:28:45 | 显示全部楼层
wedd 发表于 2018-3-20 09:02
这个,一开始确实是用的picturebox控件,但限于水平问题,com.picture.snapClient到的图片数据,就是不能 ...


改一下类名,然后
mainForm.pic_snap.setBitmap(pic.CopyHandle())

4

主题

20

回帖

294

积分

二级会员

积分
294
 楼主| 发表于 2018-3-20 09:34:24 | 显示全部楼层
松江 发表于 2018-3-20 09:28
改一下类名,然后

谢谢你,实现了我要的效果!
在你的回复之前,尝试了用gidp graphics.drawImageRect 来放大,图像的边缘依然是不清晰的,谢谢你提供的代码
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-1-19 02:02 , Processed in 0.068188 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表