【已解决】请问有人知道如何调用 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
提供一下dll啊 有WEBP的UDF
#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
一直搜不到相关资料,没想到 UDF 都有了....:face (1):
haijie1223 的代码效率高。:face (12):
非常感谢 gyp2000和 haijie1223 两位的热心帮助。:face (10):
页:
[1]