posheng 发表于 2023-5-9 14:24:18

【已解决】请问有人知道如何调用 libwebp.dll 读取WEBP文件吗?

本帖最后由 posheng 于 2023-5-10 16:19 编辑

【已解决】3、4 楼有 完整代码。

用网上的易语言例子确实可以,可不知用 DLLCALL 如何调用

Gdiplus初始化 ()
WebPData = 读入文件 (文件路径)
BGRADataInt = WebPDecodeBGRA (WebPData, 取字节集长度 (WebPData), 参数_宽度, 参数_高度)
位深 = 32
跨步 = 左移 (右移 (参数_宽度 × 位深 + 31, 5), 2)
GP位图.创建自扫描行 (参数_宽度, 参数_高度, 跨步, #像素格式_32bppARGB, BGRADataInt)
写到文件 (文件路径 + “.jpg”, GP位图.保存到字节集 (#图像格式_JPEG, ))
释放内存 (BGRADataInt)

官方API说明看了多遍,还是弄不懂~汗
https://developers.google.cn/speed/webp/docs/api?hl=zh-cn&skip_cache=true


https://s3.amazonaws.com/resizer-dynamic-downloads/webp/0.5.2/x86_64/libwebp.dll

https://s3.amazonaws.com/resizer-dynamic-downloads/webp/0.5.2/x86/libwebp.dll


haijie1223 发表于 2023-5-9 20:30:28

提供一下dll啊

gyp2000 发表于 2023-5-10 11:31:57

有WEBP的UDF






haijie1223 发表于 2023-5-10 13:00:04

#PRE_UseX64=n
#include <GDIPlus.au3>
Local $hFile = FileOpen('test_webp.webp',16)
Local $bData=FileRead($hFile)
FileClose($hFile)
Local $Buffer = DllStructCreate('byte[' & BinaryLen($bData) & ']')
DllStructSetData($Buffer, 1, $bData)
Local $Width, $Height
Local $pBGRAData = WebPDecodeBGRA(DllStructGetPtr($Buffer), BinaryLen($bData), $Width, $Height)
Local $sFile = @ScriptDir & "\Test.jpg"
_GDIPlus_Startup()
Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($Width, $Height, $GDIP_PXF32ARGB, BitShift($Width, -2), $pBGRAData)
_GDIPlus_ImageSaveToFile($hBitmap, $sFile)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
If $pBGRAData Then WebPFree($pBGRAData)
Func WebPDecodeBGRA($pData, $data_size, ByRef $Width, ByRef $Height)
        Local $Ret = DllCall('libwebp.dll', 'ptr:cdecl', 'WebPDecodeBGRA', 'ptr', $pData, 'DWORD', $data_size, 'DWORD*', 0, 'DWORD*', 0)
        $Width = $Ret
        $Height = $Ret
        Return $Ret
EndFunc   ;==>WebPDecodeBGRA
Func WebPFree($pData)
        Local $Ret = DllCall('libwebp.dll', 'ptr:cdecl', 'WebPFree', 'ptr', $pData)
        Return $Ret
EndFunc   ;==>WebPFree

posheng 发表于 2023-5-10 16:15:50

一直搜不到相关资料,没想到 UDF 都有了....:face (1):

haijie1223 的代码效率高。:face (12):

非常感谢 gyp2000和 haijie1223 两位的热心帮助。:face (10):
页: [1]
查看完整版本: 【已解决】请问有人知道如何调用 libwebp.dll 读取WEBP文件吗?