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

[原创] 九宫切图简例

 火.. [复制链接]
发表于 2015-12-28 19:30:33 | 显示全部楼层 |阅读模式
本帖最后由 298311657 于 2015-12-28 19:34 编辑

九宫切图,懂的就看看,不懂的就百度吧,今天不想打字,看图看效果



这是用到的图片


代码:(代码在以下环境允许正常:操作系统:WIN_7/Service Pack 1  CPU:X64 系统架构:X64    环境(语言:0804)  Autoit:3.3.14.2。其它环境未测试,不保证效果)

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GDIPlus.au3>

GUICreate("九宫切图简例", 700, 330)
Local $idPic = GUICtrlCreatePic("", 5, 5, 340, 290)
_GDIPlus_Startup()
_JGDraw("bk.jpg", $idPic, 340, 290, 3)
_GDIPlus_Shutdown()
GUICtrlCreateLabel("使用九宫切图的效果", 5, 300, 340, 18)

GUICtrlCreatePic("bk.jpg", 355, 5, 340, 290)
GUICtrlCreateLabel("未使用九宫切图的效果", 355, 300, 340, 18)
GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

GUIDelete()


;九宫格切图
Func _JGDraw($sFile, $hwnd, $iWidth, $iHeight, $iLWidth = 0)
    Local $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap);画布
    Local $rect = DllStructCreate("struct;int X;int Y;int Width;int Height;endstruct")
    $rect.X = 0
    $rect.Y = 0
    $rect.Width = $iWidth
    $rect.Height = $iHeight
    Local $iImgW = _GDIPlus_ImageGetWidth($hImage)
    Local $iImgH = _GDIPlus_ImageGetHeight($hImage)
    ;左上、右上、左下、右下 四角
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $rect.X, $rect.Y, $iLWidth, $iLWidth, 0, 0, $iLWidth, $iLWidth)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iImgW - $iLWidth, 0, $iLWidth, $iLWidth, $rect.Width - $iLWidth, $rect.Y, $iLWidth, $iLWidth)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, $iImgH - $iLWidth, $iLWidth, $iLWidth, $rect.X, $rect.Height - $iLWidth, $iLWidth, $iLWidth)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iImgW - $iLWidth, $iImgH - $iLWidth, $iLWidth, $iLWidth, $rect.Width - $iLWidth, $rect.Height - $iLWidth, $iLWidth, $iLWidth)
    ;左、上、右、下 四边
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, $iLWidth, $iLWidth, $iImgH - 2*$iLWidth, $rect.X, $rect.Y + $iLWidth, $iLWidth, $rect.Height - 2*$iLWidth)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iLWidth, 0, $iImgW - 2*$iLWidth, $iLWidth, $rect.X + $iLWidth, $rect.Y, $rect.Width - 2*$iLWidth, $iLWidth)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iImgW - $iLWidth, $iLWidth, $iLWidth, $iImgH - 2*$iLWidth, $rect.Width - $iLWidth, $rect.Y + $iLWidth, $iLWidth, $rect.Height - 2*$iLWidth)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iLWidth, $iImgH - $iLWidth, $iImgW - 2*$iLWidth, $iLWidth, $rect.X + $iLWidth, $rect.Height - $iLWidth, $rect.Width - 2*$iLWidth, $iLWidth)
    ;中间
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iLWidth, $iLWidth, $iImgW - 2*$iLWidth, $iImgH - 2*$iLWidth, $rect.X + $iLWidth, $rect.Y + $iLWidth, $rect.Width - 2*$iLWidth, $rect.Height - 2*$iLWidth)
    
    Local $hBit = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    
    If Not IsHWnd($hwnd) Then $hwnd = GUICtrlGetHandle($hwnd)
    Local $hPrev = _SendMessage($hwnd, 370, 0, $hBit);$STM_SETIMAGE=370, $IMAGE_BITMAP=0
    _WinAPI_DeleteObject($hBit)
EndFunc

本帖子中包含更多资源

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

×
发表于 2015-12-28 20:26:17 | 显示全部楼层
XP测试正常
发表于 2015-12-29 08:12:49 | 显示全部楼层
看看。。。。。。。。。。。。。。。
发表于 2015-12-29 09:18:24 | 显示全部楼层
多谢楼主分享
发表于 2015-12-29 12:07:34 | 显示全部楼层
多谢楼主分享
发表于 2015-12-29 13:48:38 | 显示全部楼层
win7正常测试
发表于 2015-12-29 15:54:47 | 显示全部楼层
Windows10 LTSB测试OK
发表于 2016-1-1 17:30:15 | 显示全部楼层
学习了   感谢楼主分享
发表于 2016-1-1 22:18:36 | 显示全部楼层
图片看不出什么意思。
发表于 2016-1-3 01:30:28 | 显示全部楼层
九宫切图不就是切成9块小图吗?运行代码没看到效果呀!是我理解错误?
 楼主| 发表于 2017-3-14 21:58:56 | 显示全部楼层
回复 10# penguinl
http://bbs.cskin.net/thread-62-1-1.html
看这里关于九宫切图的解释
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 20:21 , Processed in 0.083159 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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