已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 颜色空间转换 下载链接:/share/link?shareid=139708&uk=521254270一、实验目的理解颜色空间的原理,并实现各颜色空间的转换算法.二、实验内容和步骤请编程实现以下转换算法:1. RGB CMY2. RGB HSL3. RGB HSV三、实验要求1. 实现语言不做要求, C, C+, Java, Matlab均可2. 要求按照课本上的算法实现3. 请关键语句都加上注释 四、实验结果(本次实验采用C#语言)1实验界面截图:(1)初始截图(2)操作后截图2.实验代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace RGBChange public partial class Form1 : Form public Form1() InitializeComponent(); /选择转换模式 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) if (comboBox1.Text = RGB-CMY | comboBox1.Text = RGB-HSL | comboBox1.Text = RGB-HSV) label6.Text = 请输入数据,R:0,255,G:0,255,B:0,255; label1.Text = R:; label2.Text = G:; label3.Text = B:; if (comboBox1.Text = CMY-RGB ) label6.Text = 请输入数据,C:0,360,M:0,1,Y:0,1; label1.Text = C:; label2.Text = M:; label3.Text = Y:; if (comboBox1.Text = HSV-RGB ) label6.Text = 请输入数据,H:0,360,S:0,1,:0,1 ; label1.Text = H:; label2.Text = S:; label3.Text = V:; if (comboBox1.Text = HSL-RGB ) label6.Text = 请输入数据,H:0,360,S:0,1,L:0,1; label1.Text = H:; label2.Text = S:; label3.Text = L:; private void textBox3_TextChanged(object sender, EventArgs e) /判断输入数据是否合理 private void button1_Click(object sender, EventArgs e) if (comboBox1.Text = RGB-CMY) double r = Convert.ToDouble(textBox1.Text); double g = Convert.ToDouble(textBox2.Text); double b = Convert.ToDouble(textBox3.Text); if (r 255 | r 255 | g 255 | b RGB) double c = Convert.ToDouble(textBox1.Text); double m = Convert.ToDouble(textBox2.Text); double y = Convert.ToDouble(textBox3.Text); if (c1|m1|y1|c0|m0|yHSV) double r = Convert.ToDouble(textBox1.Text); double g = Convert.ToDouble(textBox2.Text); double b = Convert.ToDouble(textBox3.Text); if (r 255 | r 255 | g 255 | b RGB) double h = Convert.ToDouble(textBox1.Text); double s = Convert.ToDouble(textBox2.Text); double v = Convert.ToDouble(textBox3.Text); if (h 360 | s 1 | v 1 | h 0 | s 0 | v HSL) double r = Convert.ToDouble(textBox1.Text); double g = Convert.ToDouble(textBox2.Text); double b = Convert.ToDouble(textBox3.Text); if (r 255 | r 255 | g 255 | b RGB) double h = Convert.ToDouble(textBox1.Text); double s = Convert.ToDouble(textBox2.Text); double l = Convert.ToDouble(textBox3.Text); if (h 360 | s 1 | l 1 | h 0 | s 0 | l 1) r = r / 255; if (g 1) g = g / 255; if (b 1) b = b / 255; double c = 1 - r; double m = 1 - g; double y = 1 - b; label4.Text = C: + c + ; M: + m + ; Y: + y; /CMY转换为RGB private void cmyTorgb(double c,double m,double y) double r = 1 - c; double g = 1 - m; double b = 1 - y; label4.Text = R: + r*255 + ; G: + g*255 + ; B: + b*255; /RGB转换为HSL private void rgbTohsl(double r, double g, double b) double h = 0; double s, l; double max = r, min = r; if (r 1) r = r / 255; if (g 1) g = g / 255; if (b 1) b = b / 255; if (max g) max = g; if (max g) min = g; if (min b) min = b; l = (max + min) / 2; if (max = min) s = 0; h = 0; else if (l 0.5) s = (max - min) / (max + min); else s = (max - min) / (2.0 - max - min); if (r = max) h = (g - b) / (max - min); if (g = max) h = 2.0 + (b - r) / (max - min); if (b = max) h = 4.0 + (r - g) / (max - min); h = h * 60; if (h 1) h = h / 360; if (s = 0) r = l; g = l; b = l; else if (l = 0.5) temp2 = (l + s) - l * s; temp1 = 2.0 * l - temp2; Rtemp3 = h + 0.33; Gtemp3 = h; Btemp3 = h - 0.33; if (Rtemp3 1) Rtemp3 = Rtemp3 - 1; if (Gtemp3 1) Gtemp3 = Gtemp3 - 1; if (Btemp3 1) Btemp3 = Btemp3 - 1; if (6.0 * Rtemp3 1) r = temp1 + (temp2 - temp1) * 6.0 * Rtemp3; else if (2.0 * Rtemp3 1) r = temp2; else if (3.0 * Rtemp3 2) r = temp1 + (temp2 - temp1) * (2 / 3) - Rtemp3) * 6.0; else r = temp1; if (6.0 * Gtemp3 1) g = temp1 + (temp2 - temp1) * 6.0 * Gtemp3; else if (2.0 * Gtemp3 1) g = temp2; else if (3.0 * Gtemp3 2) g = temp1 + (temp2 - temp1) * (2 / 3) - Gtemp3) * 6.0; else g = temp1; if (6.0 * Btemp3 1) b = temp1 + (temp2 - temp1) * 6.0 * Btemp3; else if (2.0 * Btemp3 1) b = temp2; else if (3.0 * Btemp3 1) r = r / 255; if (g 1) g = g / 255; if (b 1) b = b / 255; if (max g) max = g; if (max g) min = g; if (min b) min = b; v = max; s = (max - min) / max; if (s = 0) h = 0; else if (r = max) h = (g - b) / (max - min); if (g= max) h=2+(b-r)/(max - min); if (b = max) h=4+(r-g)/(max - min); h = h * 60; if (h 0) h = h + 360; label4.Text = H: + h + ; S: + s + ; V: + v; /HSV转换为RGB private void hsvTorgb(double h, double s, double v) double r = 0, g = 0, b = 0; if (s =0 & h = 0) r = v; g = v; b = v; if (h = 360) h = 0; h = h / 60; int i = (int)Math.Floor(h); /向下取整 double f = h - i; double p = v * (1 - s); double q = v * (1 - (s * f); double t = v * (1 - (s * (1 - f); switch (i) case 0: r = v;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 挤压修模工岗位工艺作业技术规程
- 自然保护区检查工安全知识竞赛模拟考核试卷含答案
- 货装值班员安全知识宣贯模拟考核试卷含答案
- 锅炉运行值班员安全知识竞赛水平考核试卷含答案
- 废品回收担责协议书
- 建筑抗震设计动力响应分析
- 解读初三数学
- 教育协同创新
- 揭秘地球奥秘
- 硕士答辩之路
- 【《基于西门子PLC的污水处理控制系统程序设计》12000字(论文)】
- 做账实操-水产养殖的账务处理实例
- 2025年6月上海市高考语文试题卷(含答案详解)
- 餐饮行业员工岗位操作技能考核表
- 手术室停电的应急预案及演练脚本
- 桩身完整性考试题及答案
- 单位摩托车采购项目方案投标文件(技术标)
- 土料填筑单元工程施工质量检验表填写示例(表1.10 )
- 德语初级教学课件
- 医院病案管理委员会会议记录范文
- 维吾尔木卡姆艺术研究
评论
0/150
提交评论