【发布时间】:2018-10-09 05:24:12
【问题描述】:
我已经为 WebP 构建了 libwebp.dll,使用 these instructions(我下载了这个 source code)
我已将libwebp.dll 文件添加到我的项目的bin 文件夹中。
然后我添加了这个代码 (found here):
Private Declare Function WebPEncodeBGRA Lib "libwebp.dll" (ByVal rgba As IntPtr, ByVal width As Integer, ByVal height As Integer, ByVal stride As Integer, ByVal quality_factor As Single, ByRef output As IntPtr) As Integer
Private Declare Function WebPFree Lib "libwebp.dll" (ByVal p As IntPtr) As Integer
Private Sub Encode()
Dim source As Bitmap = New Bitmap(Server.MapPath("images\") + "audio.png")
Dim data As BitmapData = source.LockBits(New Rectangle(0, 0, source.Width, source.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim webp_data As IntPtr
Dim i As Integer = WebPEncodeBGRA(data.Scan0, source.Width, source.Height, data.Stride, 80, webp_data)
WebPFree(webp_data)
End Sub
我得到错误:
试图加载格式不正确的程序。 (HRESULT 异常:0x8007000B)
我也做了什么(在下面 Dai 的 cmets 之后):
- 我为 64 位架构构建了 dll,如下所示:
nmake /f Makefile.vc CFG=release-dynamic RTLIBCFG=dynamic OBJDIR=output ARCH=x64(also see here) - 我检查了有问题的应用程序池的 IIS,它的属性
Enable32-Bit Applications设置为False - 我正在运行 Windows 10 64 位
-
Environment.Is64BitProcess和Environment.Is64BitOperatingSystem在代码隐藏中评估为True
如何对图像进行编码并将编码后的图像以 WebP 格式保存到磁盘?
这是我正在使用的图像文件:
【问题讨论】:
-
该错误是由于尝试在 64 位主机进程中加载 32 位 DLL 引起的,反之亦然。我假设您的网络服务器以 64 位运行,但您只构建了
libwebp.dll的 32 位版本。 -
也有可能是相反的情况:IIS 以 32 位运行,无法加载您的 64 位 DLL。
-
我刚刚在 IIS 中检查了有问题的应用程序池的应用程序池设置,它的属性
Enable32-Bit Applications设置为False,所以我想这也不是...
标签: asp.net windows vb.net image webp