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

大可山人
博客专家认证
2006-05-09 12:02:49
比如:
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显示器颜色的过程。

哪位有时间,帮忙实现一下?写一个函数,谢谢!
...全文
140 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
大可山人 2006-05-09
  • 打赏
  • 举报
回复
sanjie88(菜鸟依旧) :
应该谢谢你才对!
OracleRoob 2006-05-09
  • 打赏
  • 举报
回复
Mark!
sanjie88 2006-05-09
  • 打赏
  • 举报
回复
大哥,谢谢了
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

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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