开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

12
返回列表 发新帖
楼主: kuangshen1
收起左侧

[已解决] png图片转BMP怎么解决白底问题

 关闭 [复制链接]
结帖率:100% (7/7)
发表于 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)
回复

使用道具 举报

结帖率:100% (7/7)

签到天数: 6 天

发表于 2025-3-6 09:17:13 | 显示全部楼层   广东省茂名市
回复还要审核??
直接扣精易源码中的
图片_转换()
改这一行:GdipCreateHBITMAPFromBitmap (bitmap, 局_hBitMap, #白色)

使用:
.版本 2
.支持库 spec

.局部变量 bool, 逻辑型
.局部变量 bin, 字节集

bool = 图片_转换 (读入文件 (“D:\Program Files (x86)\e\study\wifi2.png”), 1, “D:\wifi2.bmp”, bin, 真)
调试输出 (bool)


补充内容 (2025-3-6 09:17):
将 #白色  换成你想要的颜色就行了。

补充内容 (2025-3-6 09:51):
有些颜色 要这样:位取反 (#天蓝)
回复

使用道具 举报

结帖率:88% (98/112)

签到天数: 10 天

 楼主| 发表于 2025-3-6 19:52:16 | 显示全部楼层   湖南省邵阳市
jingyi11023995 发表于 2025-3-6 09:57
已经扣好的源码:

也可以自己加一个参数改造成传参。

转换过来是32位的,有没有办法弄为24和8位?
回复

使用道具 举报

结帖率:100% (7/7)

签到天数: 6 天

发表于 2025-3-7 08:41:59 | 显示全部楼层   广东省茂名市
kuangshen1 发表于 2025-3-6 19:52
转换过来是32位的,有没有办法弄为24和8位?

易语言自带的支持库“位图操作支持库”,位图_转换位深度(),去看看,应该会看怎么用吧???

补充内容 (2025-3-7 09:02):
.版本 2
.支持库 BmpOperate
.支持库 spec

.局部变量 位图1, 位图
.局部变量 位图2, 位图
.局部变量 bin, 字节集

位图1.载入文件 (“D:\wifi2.bmp”)  ' 如果有数据:位图1.载入数据 (bin)
调试输出 (位图1.取位深度 ())  ' 这里看帮助
位图2 = 位图1.转换位深度 (24)  ' 1 4 8 16 24 32
调试输出 (位图2.取位深度 ())
bin = 位图2.取位图数据 ()
写到文件 (“D:\24.bmp”, bin)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表