怎样实现字符分解并取得对应的值?

大可山人
博客专家认证
2006-05-09 12:10:58
比如:
Y100$Y90M80C15*Y20C100$Y90M80C15*M85$
(1)首先需要将它以"$"为分隔符分成若干个组,比如这里有三组:
(A)Y100 (B)Y90M80C15*Y20C100 和 (C)Y90M80C15*M85
(2)再以"*"为分隔符细分成若干个小组,比如:
(A)组分成:Y100
(B)组分成:Y90M80C15 和 Y20C100
(C)组分成:Y90M80C15 和M85
(3)最后以"C","M","Y","K"再细分为各个值,如果没有相应的值,则以0填充。比如:
Y90M80C15 则:Y90M80C15K0
又如:Y20C100则:Y20C100M0K0,类似M85为:C0M85Y0K0
(4)再将它们转换为RGB值。
转换公式为:
R = (1 - Min(1, C/100.0 * (1 - K/100.0) + K/100.0)) * 255;
G = (1 - Min(1, M/100.0 * (1 - K/100.0) + K/100.0)) * 255;
B = (1 - Min(1, Y/100.0 * (1 - K/100.0) + K/100.0)) * 255;
举例:
将Y100转换为RGB色为:
(1)Y100即为C0 M0 Y100 K0(Y为100,其他均为0)
(2)由于C=0, K=0,所以:
C/100.0 = 0
1 - K/100.0 = 1;
R = (1 - Min(1, 0 * 1 + 0)) * 255,结果R=255
G 类似算法,结果G=255
B = (1 - Min(1, 100/100.0 * (1 - 0) + 0)) * 255
= (1 - 1) * 255
= 0
于是得到R255G255B0,其他类推。
(5)最后将CMYK类型的字符串替换(Replace)成为RGB表示的字符串,如:将Y100换成R255G255B0等。

整个过程其实就是将印刷四色转换成RGB显示器颜色的过程。

哪位有时间,帮忙实现一下?写一个Function,谢谢!
...全文
160 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanjie88 2006-05-09
  • 打赏
  • 举报
回复
楼主都五个裤衩了,搞不定这个我不相信
大可山人 2006-05-09
  • 打赏
  • 举报
回复
sanjie88(菜鸟依旧) :
请到这里来接分,还有50分,一并给你。
http://community.csdn.net/Expert/topic/4737/4737478.xml?temp=.7842676
你说得正确,我是可以自己做的,实在是太忙了,所以有劳你了,不好意思!唯一可做的,就是多给点分你了,呵呵
水如烟 2006-05-09
  • 打赏
  • 举报
回复
规则只要是自己定的,还怕实现不了吗
sanjie88 2006-05-09
  • 打赏
  • 举报
回复
我也这么想的,就等他给分了,哈哈
sz_lgp 2006-05-09
  • 打赏
  • 举报
回复
五个叉了,上述问题很定能搞定,只是懒!
sanjie88 2006-05-09
  • 打赏
  • 举报
回复
GetRGB这个函数我用Y100测试过,可以的
sanjie88 2006-05-09
  • 打赏
  • 举报
回复
Public Function GetReplace(ByVal strValue As String) As String
Dim strFirstArray() As String = strValue.Split("$")
For i As Integer = 0 To strFirstArray.Length - 1 '分解第一层
Dim strFirst As String = strFirstArray(i)
Dim strSecondArray() As String = strFirst.Split("*")
For T As Integer = 0 To strSecondArray.Length '分解第二层
Dim strSecond As String = strSecondArray(T)
strSecondArray(T) = GetRGB(strSecond)
Next
strFirst = String.Join("*", strSecondArray) '不清楚搂主要不要在连起来,我反正把他们都连起来了
Next
GetReplace = String.Join("$", strFirstArray) '连接字符串
End Function
Public Function GetRGB(ByVal strValue As String) As String
Dim strY, strC, strM, strK As String
Dim intY, intC, intM, intK As Integer
strY = "Y0"
strC = "C0"
strK = "K0"
strM = "M0"
intY = 0
intC = 0
intK = 0
intM = 0
Dim dblR, dblG, dblB As Double
Dim chrArray() As Char
Dim strArray() As String
Dim Arraycount As Integer = 0
chrArray = strValue.ToCharArray
Dim strCur As String = ""
For i As Integer = 0 To chrArray.Length - 1
Dim chrCur As Char = chrArray(i)

If Char.IsNumber(chrCur) = False Or i = chrArray.Length - 1 Then
If strCur.Length = 0 Then
strCur = chrCur.ToString
Else
If i = chrArray.Length - 1 Then strCur = strCur + chrCur.ToString
ReDim Preserve strArray(Arraycount)
strArray(Arraycount) = strCur
Arraycount += 1
strCur = chrCur.ToString
End If
Else
strCur = strCur + chrCur.ToString
End If
Next
For intArray As Integer = 0 To strArray.Length - 1
Select Case strArray(intArray).Substring(0, 1)
Case "Y"
strY = strArray(intArray)
intY = CInt(strY.Replace("Y", ""))
Case "M"
strM = strArray(intArray)
intM = CInt(strM.Replace("M", ""))
Case "C"
strC = strArray(intArray)
intC = CInt(strC.Replace("C", ""))
Case "K"
strK = strArray(intArray)
intK = CInt(strK.Replace("k", ""))
End Select
Next

dblR = (1 - System.Math.Min(1, intC / 100.0 * (1 - intK / 100.0) + intK / 100.0)) * 255
dblG = (1 - System.Math.Min(1, intM / 100.0 * (1 - intK / 100.0) + intK / 100.0)) * 255
dblB = (1 - System.Math.Min(1, intY / 100.0 * (1 - intK / 100.0) + intK / 100.0)) * 255
GetRGB = "R" + CStr(dblR) + "G" + CStr(dblG) + "B" + CStr(dblB)
End Function
楼主,我用了两个函数不要紧吧,那个东西不简单哦,我头都晕了,55555555555,太晚了,要睡了

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧