CodeForge QQ客服 CodeForge 400电话 客服电话 4006316121
首页 » 源代码 » 图像转换: 灰色到彩色

图像转换: 灰色到彩色

maninwest
发布于2015-02-09 15:49:11
源码作者
浏览次数:
下载次数:0
下载所需积分:1 
源码分类 Tags:
源码分类 所属分类:
.NET2.0.NET2.0 C SharpC#

分享有礼! 》

  • 请点击右侧的分享按钮,把本代码分享到各社交媒体。
  • 通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
  • 通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。

代码介绍

翻译  maninwest@Codeforge  作者:Maxim_Barsuk @ Codeproject
这是个简单的图像变换算法,将图像从灰阶转换成彩色。 这算不上是理想的算法,但是很简单。
背景
通常我们这样计算灰度颜色:
Gray  = Green * 0.59 + Blue * 0.30 + Red * 0.11;Gray  = Green * 0.59 + Blue * 0.30 + Red * 0.11;

没有具有结构 [Gray, Gray, Gray] 的颜色具有以下一组颜色:
G = [Gray, Gray, Gray] G -> P = {C}, for each C from P:  Green * 0.59 + Blue * 0.30 + Red * 0.11 = Gray.

首先创建一组控制点,等于"灰" 色和 "全" 色。设置了控制点后,可以估计 "灰色" 相近的全色. 如果 "灰" 色位于两个控制点  C1  和 C2 之间,则颜色近似:
 
K = (Gray - C1Gray)/(C2Gray - C1Gray)
Red = C1Red + K*(C2Red - C1Red)
Green = C1Green + K*(C2Green - C1Green)
Blue = C1Blue + K*(C2.Blue - C1Blue)

现在我们有了每个“灰色‘ 的心等价”全色“
使用代码

ControlPoint  是存储控制点数据的结构。
 
public struct ControlPoint
{ private int level; public int Level
    { get { return level; } set { level = value; }
    } private Color color; public Color Color { get { return color; } set { color = value; }
    } public ControlPoint(int level, Color color)
    { this.color = color; this.level = level;
    } public override string ToString()
    { return "Level: " + level.ToString() + "; Color: " + color.ToString();
    }
} 

PointsComparer 是用于比较两个控制点的类:
 
public class PointsComparer: IComparer
{ #region IComparer Members public int Compare(ControlPoint x, ControlPoint y)
    { if (x.Level > y.Level)
        { return 1;
        } if (x.Level < y.Level)
        { return -1;
        } return 0;
    } #endregion } 

ColorBuilder 是构建颜色简图的类。它返回 256 色 - 我们的简图的数组。.
 
public static Color[] GetColorDiagram(List points)
{ Color[] colors = new Color[256];
    points.Sort(new PointsComparer()); for (int i = 0; i < 256; i++)
    {
        ControlPoint leftColor = new ControlPoint
(0, GetNearestLeftColor(points[0].Color)); 
        ControlPoint rightColor = new ControlPoint
(255, GetNearestRigthColor(points[points.Count - 1].Color)); if (i < points[0].Level)
        {
            rightColor = points[0];
        } if (i > points[points.Count - 1].Level)
        {
            leftColor = points[points.Count - 1];
        } else { for (int j = 0; j < points.Count - 1; j++)
            { if ((points[j].Level <= i) & (points[j + 1].Level > i))
                {
                    leftColor = points[j];
                    rightColor = points[j + 1];
                }
            }
        } if ((rightColor.Level - leftColor.Level) != 0)
        { double koef = (double)(i - leftColor.Level) / 
(double)(rightColor.Level - leftColor.Level); int r = leftColor.Color.R + (int)(koef * 
(rightColor.Color.R - leftColor.Color.R)); int g = leftColor.Color.G + (int)(koef * 
(rightColor.Color.G - leftColor.Color.G)); int b = leftColor.Color.B + (int)(koef * 
(rightColor.Color.B - leftColor.Color.B)); colors[i] = Color.FromArgb(r, g, b);
        } else { colors[i] = leftColor.Color;
        }
     } return colors;
} 

现在可以获得彩色图像:
colorBitmap = new Bitmap(sourceBitmap); for (int i = 0; i < sourceBitmap.Width; i++)
{ for (int j = 0; j < sourceBitmap.Height; j++)
    { int level = sourceBitmap.GetPixel(i, j).B; colorBitmap.SetPixel(i, j, colors[level]);
    }
}
pbxColorImage.Image = colorBitmap;

Sponsored links

源码文件列表

温馨提示: 点击源码文件名可预览文件内容哦 ^_^
...
名称 大小 修改日期
ColorTransformApp.sln941.00 B2009-01-26 08:44
ColorTransformApp.suo17.00 kB2009-01-26 09:11
01.96 kB
01.96 kB
01.96 kB
ColorTransformApp.exe12.50 kB2009-01-26 09:12
ColorTransformApp.vshost.exe13.99 kB2009-01-26 09:13
ColorToGrayscle.cs1.76 kB2009-01-26 09:10
ColorTransformApp.csproj3.72 kB2009-01-26 09:02
MainForm.cs1.50 kB2009-01-26 09:12
MainForm.Designer.cs9.13 kB2009-01-26 09:05
MainForm.resx6.07 kB2009-01-26 09:05
Program.cs512.00 B2009-01-26 08:44
01.96 kB
AssemblyInfo.cs1.43 kB2009-01-26 08:44
Resources.Designer.cs2.80 kB2009-01-26 08:44
Resources.resx5.48 kB2009-01-26 08:44
Settings.Designer.cs1.08 kB2009-01-26 08:44
Settings.settings249.00 B2009-01-26 08:44
程序员商城

资源评论

(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
  • 1
  • 第1页
  • 共1页

图像转换: 灰色到彩色 (27.34 kB)(70.43 kB)

需要 1 积分
您持有 积分

CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了 了解更多

您的积分不足,优惠套餐快速获取 30 积分

订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。

更多付款方式:网银PayPal

上传代码,免费获取CodeForge积分

您本次下载所消耗的积分将转交上传作者。

同一源码,30天内重复下载,只扣除一次积分。

登录 CodeForge

还没有CodeForge账号? 立即注册
关注微博
联系客服

Switch to the English version?

Yes
CodeForge 英文版
No
CodeForge 中文版

完善个人资料,获价值¥30元积分奖励!

^_^"呃 ...

Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧
好的