游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6507|回复: 11

如何将一个图片中指定的颜色部分替换成另一个指定的颜色

[复制链接]

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2005-10-10 20:47:00 | 显示全部楼层 |阅读模式
如题

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-10-10 22:20:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

你上张图呀!!

53

主题

419

帖子

451

积分

中级会员

Rank: 3Rank: 3

积分
451
发表于 2005-10-11 08:43:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

是不是像即时战略中的用颜色去区分不同阵营的部队,这部分颜色是用改变调色板中的指定颜色实现的

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-10-11 11:54:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

哈哈! 他不用API也不用DX, 用控件,
不过我没用过控件的RGB(A,B,C)改调色板.

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
 楼主| 发表于 2005-10-11 18:37:00 | 显示全部楼层

Re: Re:如何将一个图片中指定的颜色部分替换成另一个指

happysnoopy: Re:如何将一个图片中指定的颜色部分替换成另一个指定的颜色

是不是像即时战略中的用颜色去区分不同阵营的部队,这部分颜色是用改变调色板中的指定颜色实现的

被你说对了,你说说调色板怎么做吧

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2005-10-11 19:07:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

调色板我是过,不行的,因为它只能对一个表面起作用,而且全屏起作用,不能将一小块变色好象。你只能自己对颜色进行矩形处理!
http://bbs.gameres.com/showthread.asp?threadid=34669
http://bbs.gameres.com/showthread.asp?threadid=36533

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
 楼主| 发表于 2005-10-11 22:57:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

花了一个小时研究了下灰色化,大家看看代码如何简化
For i = 0 To 500
For i1 = 0 To 500
a = Hex(Picture1.Point(i, i1))
If Len(a) >= 5 Then m1 = CLng("&H" & Mid(a, 5, 2))
If Len(a) >= 3 Then m2 = CLng("&H" & Mid(a, 3, 2))
If Len(a) >= 1 Then m3 = CLng("&H" & Mid(a, 1, 2))
m = (m1 + m2 + m3) \ 3
m1 = m
m2 = m
m3 = m
Picture1.PSet (i, i1), RGB(m1, m2, m3)
Next i1, i

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
 楼主| 发表于 2005-10-11 23:05:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

用API的,看了一下发现效果不是很理想,是不是算法不完善?
For i = 0 To 800
For i1 = 0 To 600
a = Hex(GetPixel(Picture1.hdc, i, i1))
If Len(a) >= 5 Then m1 = CLng("&H" & Mid(a, 5, 2))
If Len(a) >= 3 Then m2 = CLng("&H" & Mid(a, 3, 2))
If Len(a) >= 1 Then m3 = CLng("&H" & Mid(a, 1, 2))
m = (m1 + m2 + m3) / 3
m1 = m
m2 = m
m3 = m
SetPixel Picture1.hdc, i, i1, RGB(m1, m2, m3)
Next i1, i

13

主题

594

帖子

595

积分

高级会员

Rank: 4

积分
595
发表于 2005-10-12 03:36:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

晕,怎么用字符串函数都用上了,要转换成灰度图的话很简单啊

a = Hex(GetPixel(Picture1.hdc, i, i1))
r = a And &HFF
g = (a \ &H100) And &HFF
b = a \ &H10000
gray = r * 0.299 + g * 0.587 + b * 0.114
SetPixel Picture1.hdc, i, i1, RGB(gray, gray, gray)

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
 楼主| 发表于 2005-10-12 19:32:00 | 显示全部楼层

Re:如何将一个图片中指定的颜色部分替换成另一个指定的

gray = r * 0.299 + g * 0.587 + b * 0.114
这里的常数怎么算出来的?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-28 03:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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