|
发表于 2025-3-6 09:10:09
|
显示全部楼层
广东省茂名市

直接去扣精易模块的源码,再自己简单改就行了。
图片_转换()
.版本 2
.子程序 图片_转换, 逻辑型, 公开, 支持bmp、jpg、gif、tiff、png互转;成功返回转换好的图片数据,失败返回空字节集;
.参数 图像数据, 字节集, , 被转换的图像数据;
.参数 转换格式, 整数型, , 要转换成的图像格式:1=bmp;2=jpg;3=gif;4=tiff;5=png;
.参数 保存路径, 文本型, 可空, 把转换后的图像保存到指定位置;
.参数 返回数据, 字节集, 参考 可空, 变量储存返回数据.
.参数 含透明色, 逻辑型, 可空, 转换PNG图片时是否需要处理透明色,可为空,默认不处理。
.局部变量 新图像, 字节集, , , 用于保存新图像的变量
.局部变量 Clsid, GUID
.局部变量 pStr, 文本型
.局部变量 hMem, 整数型
.局部变量 Stream
.局部变量 lpvoid, 整数型
.局部变量 pStream, 整数型
.局部变量 bitmap, 整数型
.局部变量 DataStream
.局部变量 hMemDataStream, 整数型
.局部变量 pDataStream, 整数型
.局部变量 nStreamSize, 整数型
.局部变量 bRet, 逻辑型
.局部变量 GpInput, GdiplusStartupInput
.局部变量 局_Token, 整数型
.局部变量 局_hBitMap, 整数型
.局部变量 局_后缀名, 文本型
.如果真 (取字节集长度 (图像数据) < 3)
返回 (假)
.如果真结束
GpInput.GdiplusVersion = 1
GdiplusStartup (局_Token, GpInput, 0) ' 启动GDI+
.判断开始 (转换格式 = 1) ' bmp
pStr = “{557CF400-1A04-11D3-9A73-0000F81EF32E}”
局_后缀名 = “.bmp”
.判断 (转换格式 = 2) ' jpg
pStr = “{557CF401-1A04-11D3-9A73-0000F81EF32E}”
局_后缀名 = “.jpg”
.判断 (转换格式 = 3) ' gif
pStr = “{557CF402-1A04-11D3-9A73-0000F81EF32E}”
局_后缀名 = “.gif”
.判断 (转换格式 = 4) ' tiff
pStr = “{557CF405-1A04-11D3-9A73-0000F81EF32E}”
局_后缀名 = “.tiff”
.判断 (转换格式 = 5) ' png
pStr = “{557CF406-1A04-11D3-9A73-0000F81EF32E}”
局_后缀名 = “.png”
.默认
.判断结束
Clsid = COM_StringToCLSID (pStr)
hMem = GlobalAlloc (2, 取字节集长度 (图像数据)) ' 分配内存
CreateStreamOnHGlobal (hMem, 假, Stream)
lpvoid = GlobalLock (hMem)
写到内存 (图像数据, lpvoid, 取字节集长度 (图像数据))
GlobalUnlock (hMem)
pStream = lstrcpyn_整数型 (Stream, Stream, 0)
GDIpCreateBitmapFromStream (取字节集数据 (指针到字节集 (pStream, 4), #整数型, ), bitmap)
.如果真 (含透明色)
GdipCreateHBITMAPFromBitmap (bitmap, 局_hBitMap, #白色)'想什么色就改什么色。
GdipCreateBitmapFromHBITMAP (局_hBitMap, 0, bitmap)
DeleteObject (局_hBitMap)
.如果真结束
CreateStreamOnHGlobal (0, 真, DataStream)
pStream = lstrcpyn_整数型 (DataStream, DataStream, 0)
pStream = 取字节集数据 (指针到字节集 (pStream, 4), #整数型, )
GDIpSaveImageToStream_GUID (bitmap, pStream, Clsid, 0)
GetHGlobalFromStream (pStream, hMemDataStream)
pDataStream = GlobalLock (hMemDataStream)
nStreamSize = GlobalSize (hMemDataStream)
.如果真 (pDataStream ≠ 0)
新图像 = 取空白字节集 (nStreamSize)
RtlMoveMemory_int2Bytes (新图像, pDataStream, nStreamSize)
.如果真 (删首尾空 (保存路径) ≠ “”)
写到文件 (选择 (到小写 (取文本右边 (保存路径, 取文本长度 (局_后缀名))) ≠ 到小写 (局_后缀名), 保存路径 + 局_后缀名, 保存路径), 新图像)
.如果真结束
返回数据 = 新图像
bRet = 真
.如果真结束
COM_Release (Stream)
COM_Release (DataStream)
GlobalUnlock (hMemDataStream)
GlobalFree (hMemDataStream)
GdipDisposeImage (bitmap)
GlobalFree (hMem)
GdiplusShutdown (局_Token) ' GDI关闭 +
返回 (bRet)
|
|