z761003 发表于 2022-9-28 22:17:43

通过位图对象句柄截取指定区域

本帖最后由 z761003 于 2022-9-28 22:25 编辑

论坛里搜了个后台截图的函数,可以截,可截图必须是从窗口左上角坐标 x=0 y=0开始截,想把它改成截取指定区域改不来,请教下获取了位图对象句柄 $hBitmap 如果截取其中的部分呢(指定坐标区域)
是不是使用_GDIPlus_BitmapCloneArea(),搞半天也没搞出来,希望谁能帮改下





Func _ScreenHideWindow($i_win_handle, $iW, $iH)
    Local $aRet = DllCall($dll, "hwnd", "GetWindowDC", "hwnd", $i_win_handle)
    If @error Then Return SetError(@error, 0, -1)
    Local $hDC = $aRet
    $aRet = DllCall($hDLLGDI32, "hwnd", "CreateCompatibleDC", "hwnd", $hDC)
    If @error Then Return SetError(@error, 0, -1)
    Local $hMemDC = $aRet
    $aRet = DllCall($hDLLGDI32, "hwnd", "CreateCompatibleBitmap", "hwnd", $hDC, "int", $iW, "int", $iH)
    If @error Then Return SetError(@error, 0, -1)
    Local $hBitmap = $aRet

;想把截取 $hBitmap 指定区域
    $aRet = DllCall($hDLLGDI32, "hwnd", "SelectObject", "hwnd", $hMemDC, "hwnd", $hBitmap)
    If @error Then Return SetError(@error, 0, -1)
    Local $hOld = $aRet
    $aRet = DllCall($dll, "int", "ReleaseDC", "hwnd", $i_win_handle, "hwnd", $hDC)
    If @error Then Return SetError(@error, 0, -1)
    _PrintWindow($i_win_handle, $hMemDC)
    $aRet = DllCall($hDLLGDI32, "hwnd", "SelectObject", "hwnd", $hMemDC, "hwnd", $hOld)
    If @error Then Return SetError(@error, 0, -1)
    $aRet = DllCall($hDLLGDI32, "int", "DeleteDC", "hwnd", $hMemDC)
    If @error Then Return SetError(@error, 0, -1)

    $aRet = DllCall($hDLLGDI32, "int", "DeleteObject", "int", $hBitmap)
    If @error Then Return SetError(@error, 0, -1)
   Return
EndFunc





Func _PrintWindow($hWnd, $hMemDC, $iFlag = 0)
    Local $aRet = DllCall($dll, "int", "PrintWindow", _
            "hwnd", $hWnd, _
            "hwnd", $hMemDC, _
            "int", $iFlag)
    Return $aRet
EndFunc   ;==>_PrintWindow

zhao_ming 发表于 2022-9-29 09:51:59

此人是骗子,谨防上当受骗。

zhao_ming 发表于 2022-9-29 10:14:41


演示后,又以要demo 后续没下文

https://www.autoitx.com/thread-73120-1-1.html?_dsign=a6e32016



z761003 发表于 2022-9-29 10:18:23

zhao_ming 发表于 2022-9-29 09:51
此人是骗子,谨防上当受骗。

有病要早点去看,别在网上丢人现眼

z761003 发表于 2022-9-29 10:19:29

自己解决了

Func hBitmapCap($hBitmap,$x,$y,$x2,$y2,$saveimg=True) ;位图句柄截取指定坐标和宽高
_GDIPlus_StartUp ()

    Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
    _WinAPI_DeleteObject ($hBitmap)
    Local $hClone = _GDIPlus_BitmapCloneArea ($hImage, $x,$y,$x2-$x,$y2-$y, $GDIP_PXF24RGB)
    $hBitmap=_GDIPlus_BitmapCreateHBITMAPFromBitmap($hClone)
    ; 保存位图文件
   _GDIPlus_ImageSaveToFile ($hClone, @DesktopDir & "\2.bmp")

    ; 清理资源
    _GDIPlus_ImageDispose ($hClone)
    _GDIPlus_ImageDispose ($hImage)

    _GDIPlus_ShutDown ()
   Return $hBitmap
EndFunc

z761003 发表于 2022-9-29 10:23:38

zhao_ming 发表于 2022-9-29 10:14
演示后,又以要demo 后续没下文

https://www.autoitx.com/thread-73120-1-1.html?_dsign=a6e32016

你一个GIF发过来都没通过,问你为什么里面有错误的,你回答你的GIF里有一张图片搞错了,人家的GIF是录像的,你的GIF还能一张一张图片自己拼的,你是神人!你才是个骗子,GIF还能拼凑给人家看,GIF都通不过我要你DEMO屁用,你个**,没通过也想要钱是吧,你这么想要钱让*****吧

z761003 发表于 2022-9-29 10:33:15

本帖最后由 z761003 于 2022-9-29 10:34 编辑

你个垃圾本来我都把你拉黑不来理你就算了,让你一个人吠,你还跑论坛里来丢人,既然你要吠,我发完整聊天让别人看看,你连演示都是错误的,还想来骗钱,难怪你自己说经常被别人割韭菜,,,,,你这不是人家割你韭菜,是人家碰上你这垃圾及时止损,你还不自知




发聊天让别人来评评,谁的问题,垃圾,论坛里是你撒野的地方吗,这是学习的地方

zhao_ming 发表于 2022-9-29 11:46:53

出于什么目地,你还用我来讲,谨防上当受骗。 说的只有这么多,没时间跟你这种没素质的人讲话。
页: [1]
查看完整版本: 通过位图对象句柄截取指定区域