找回密码
 加入
搜索
查看: 2085|回复: 10

请高手指教关于图片的保存

[复制链接]
发表于 2009-5-27 18:53:03 | 显示全部楼层 |阅读模式
本帖最后由 17911 于 2009-5-27 22:03 编辑

我想通过点保存按钮将窗体内的图片、标签文字内容保存为一个图片文件,试了几次不成功,到这里编辑不下去了:
$var = FileSaveDialog("保存", "c:\", "jpg文件(*.jpg)", 2)
             If Not @error Then
             If StringRight($var, 4) <> ".jpg" Then $var &= ".jpg"
,请高手帮组完善一下下面的脚本
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("窗体1", 413, 298, 302, 218)
$Pic1 = GUICtrlCreatePic("d:\我的文档\图片收藏\bliss.jpg", 0, -8, 409, 209, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Button1 = GUICtrlCreateButton("保存", 40, 240, 97, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("AU3论坛作品", 112, 16, 120, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Label2 = GUICtrlCreateLabel("2009年5月27日", 264, 160, 134, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor ( $Label1, $GUI_BKCOLOR_TRANSPARENT )
GUICtrlSetBkColor ( $Label2, $GUI_BKCOLOR_TRANSPARENT )
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
             $var = FileSaveDialog("保存", "c:\", "jpg文件(*.jpg)", 2)
             If Not @error Then
             If StringRight($var, 4) <> ".jpg" Then $var &= ".jpg"
        EndSwitch
WEnd

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-5-27 19:13:03 | 显示全部楼层
发表于 2009-5-27 19:35:52 | 显示全部楼层
本帖最后由 lynfr8 于 2009-5-27 19:37 编辑

针对你的问题还是帮你写写吧
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ScreenCapture.au3>
#include <GuiConstantsEx.au3>

Opt('MustDeclareVars', 1)
Local $hGUI, $hWnd, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout,$Pic1,$Button1,$Label1,$Label2,$nMsg,$size 
Local $sString = "AU3论坛作品", $aInfo

GUISetState()
$hGUI = GUICreate("窗体1", 413, 298, 302, 218)
$hWnd = WinGetHandle("窗体1")
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\test.jpg", 0, 0, 409, 209, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Button1 = GUICtrlCreateButton("保存", 40, 240, 97, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("AU3论坛作品", 112, 16, 120, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
$Label2 = GUICtrlCreateLabel("2009年5月27日", 264, 160, 134, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor ( $Label1, $GUI_BKCOLOR_TRANSPARENT ) 
GUICtrlSetBkColor ( $Label2, $GUI_BKCOLOR_TRANSPARENT ) 
GUISetState(@SW_SHOW)


While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Main()

EndSwitch
WEnd

Func _Main()
Local $hBmp
$size = WinGetPos("窗体1")
;MsgBox(0, "活动窗口状态 (X坐标,Y坐标,宽度,高度):", $size[0] & ", " & $size[1] & ", " & $size[2] & ", " & $size[3])
_ScreenCapture_Capture (@ScriptDir & "\save.jpg", $size[0],$size[1]+24,$size[0]+$size[2]-10,$size[1]+$size[3]-91)

EndFunc 
试验图片


导入窗体后


保存之后

源码打包



原理:
1.WinGetPos获取当前窗体的坐标
2._ScreenCapture_Capture截图,截图坐标从1得到,由于窗体本身占用部分位置的,所以需要将截图的位置修改下
实现效果:
点击保存之后,自动保存到脚本目录
3.延展思路
你的设计并不适合大小不一图片,这样会导致截图后失去原图的大小,而且会损失部分色彩像素,感觉难看
不知道你写这个目的是为什么,如果是纯属加水印,三恨那个'调用DLL实现图片水印大全'已经很好用了
如果你还是坚持自己写这个,可以开始就将窗口初值自定义为变量
比如,先设定$width,$height,然后用_GDIPlus_ImageGetWidth_GDIPlus_ImageGetHeight 读取图片的高和宽再赋值窗体大小
然后回到上面那个原理1和2就可以达到不改变原始图片大小的目的了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2009-5-27 20:45:06 | 显示全部楼层
本帖最后由 17911 于 2009-5-27 21:11 编辑

谢谢回复,我会学习朋友的代码,其实我的意思就是想知道下图中“保存为图片”这个功能代码是如何编写的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-5-27 21:02:44 | 显示全部楼层
_ScreenCapture_Capture 自动保存
 楼主| 发表于 2009-5-27 21:21:11 | 显示全部楼层
本帖最后由 17911 于 2009-5-27 21:36 编辑
_ScreenCapture_Capture 自动保存

帮助里竟然却是英文没翻译,看不懂,试了一下都是全屏截图,是不是要用_GDIPlus_ImageGetWidth 和_GDIPlus_ImageGetHeight 设置范围
发表于 2009-5-27 21:38:13 | 显示全部楼层
_ScreenCapture_Capture
--------------------------------------------------------------------------------

Captures a region of the screen
在指定区域屏幕进行截图

#Include <ScreenCapture.au3>
_ScreenCapture_Capture([$sFileName = ""[, $iLeft = 0[, $iTop = 0[, $iRight = -1[, $iBottom = -1[, $fCursor = True]]]]]])

$sFileName :要保存的文件名
$iLeft = :屏幕左方位置
$iTop = :屏幕上方位置
$iRight  = :屏幕右方位置
$iBottom   = :屏幕下方位置
和坐标x、y差不多
这四个变量就可以定义出要截图的区域了

_ScreenCapture_Capture(@MyDocumentsDir & "\2.jpg", 0, 0, 796, 596)
意思:保存坐标(0, 0, 796, 596)区域的图片到我的文档文件夹,文件名为2.jpg

很简单的英语,不行就拿翻译软件吧,推荐金山词霸google合作个人版

评分

参与人数 1金钱 +5 收起 理由
17911 + 5 谢谢热心指教

查看全部评分

发表于 2009-5-27 21:40:03 | 显示全部楼层
实在不行就从简单一点的学起吧,那样没那么吃力
量力而行嘛
 楼主| 发表于 2009-5-27 21:47:48 | 显示全部楼层
实在不行就从简单一点的学起吧,那样没那么吃力
量力而行嘛
lynfr8 发表于 2009-5-27 21:40

谢谢指教,有些明白了,自己在研究研究
发表于 2009-6-10 22:08:18 | 显示全部楼层
看不懂啊,看来得从头学起了
发表于 2009-6-10 22:30:18 | 显示全部楼层
留名。。学习
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 10:30 , Processed in 0.079598 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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