GDI+填充颜色示例代码

   private void button1_Click(object sender, EventArgs e){//生成游程编码值存储到txt文件中string strtemp = "";if (!File.Exists("c:\\data\\youchengraster.txt")){FileStream fs1 = new FileStream("c:\\data\\youchengraster.txt", FileMode.Create, FileAccess.Write);//创建写入文件 StreamWriter sw = new StreamWriter(fs1);for (int inti = 0; inti < 256; inti++){if (inti < 128){strtemp = "(R,128)|(W,128)";sw.WriteLine(strtemp);}else{strtemp = "(Y,128)|(B,128)";sw.WriteLine(strtemp);}}sw.Close();fs1.Close();}else{FileStream fs = new FileStream("c:\\data\\youchengraster.txt", FileMode.Open, FileAccess.Write);StreamWriter sr = new StreamWriter(fs);for (int inti = 0; inti < 256; inti++){if (inti < 128){strtemp = "(R,128)|(W,128)";sr.WriteLine(strtemp);}else{strtemp = "(Y,128)|(B,128)";sr.WriteLine(strtemp);}}sr.Close();fs.Close();}}private void button2_Click(object sender, EventArgs e){Bitmap image = new Bitmap(256, 256);//初始化大小//读取txt文件并绘制图片string filePath = "c:\\data\\youchengraster.txt";FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);StreamReader sr = new StreamReader(fs);string str = sr.ReadLine();//开始读入值int i = 0;while (str != null){string[] strtemp1 = str.Split('|');int m = 0;for (int inti = 0; inti < strtemp1.Length; inti++){string str2 = strtemp1[inti].Substring(3, strtemp1[inti].Length - 4);for (int n = 0; n < Convert.ToInt32(str2); n++){string str1 = strtemp1[inti].Substring(1, 1);switch (str1){case "R":image.SetPixel(m, i, Color.Red);break;case "W":image.SetPixel(m, i, Color.White);break;case "B":image.SetPixel(m, i, Color.Black);break;case "Y":image.SetPixel(m, i, Color.Yellow);break;default:break;}m = m + 1;}}str = sr.ReadLine();i = i + 1;}Graphics g = Graphics.FromImage(image);g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置图片质量g.DrawImage(image, 0, 0, 256, 256);//设置位置/*Rectangle recl1 = new Rectangle(120, 100, 20, 40); */ RectangleF[] rects = { new RectangleF(120F, 100F, 20F, 40F) };g.FillRectangles(Brushes.Blue, rects);g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置图片质量g.DrawImage(image, 0, 0, 256, 256);//设置位置image.Save("c:\\data\\" + "youchengraster.jpg");//自己创建一个文件夹,放入生成的图片(根目录下)}

在进行运用图片GDI+填充颜色时,若保存时使用JPG格式保存,会出现如下情况:

若使用PNG格式进行保存,代码如下:

   private void button2_Click(object sender, EventArgs e){Bitmap image = new Bitmap(256, 256);//初始化大小//读取txt文件并绘制图片string filePath = "c:\\data\\youchengraster.txt";FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);StreamReader sr = new StreamReader(fs);string str = sr.ReadLine();//开始读入值int i = 0;while (str != null){string[] strtemp1 = str.Split('|');int m = 0;for (int inti = 0; inti < strtemp1.Length; inti++){string str2 = strtemp1[inti].Substring(3, strtemp1[inti].Length - 4);for (int n = 0; n < Convert.ToInt32(str2); n++){string str1 = strtemp1[inti].Substring(1, 1);switch (str1){case "R":image.SetPixel(m, i, Color.Red);break;case "W":image.SetPixel(m, i, Color.White);break;case "B":image.SetPixel(m, i, Color.Black);break;case "Y":image.SetPixel(m, i, Color.Yellow);break;default:break;}m = m + 1;}}str = sr.ReadLine();i = i + 1;}Graphics g = Graphics.FromImage(image);g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置图片质量g.DrawImage(image, 0, 0, 256, 256);//设置位置/*Rectangle recl1 = new Rectangle(120, 100, 20, 40); */ RectangleF[] rects = { new RectangleF(120F, 100F, 20F, 40F) };g.FillRectangles(Brushes.Blue, rects);g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置图片质量g.DrawImage(image, 0, 0, 256, 256);//设置位置image.Save("c:\\data\\" + "youchengraster.PNG");//自己创建一个文件夹,放入生成的图片(根目录下)}

生成结果如下:

然后进行像素点读取 ,并导入至txt中

private void button2_Click(object sender, EventArgs e){Bitmap curBitmap;string path;Color curcolor;int redsum=0;int blacksum = 0;int wsum = 0;int sssl = 0;//textBox1.Text = "D:\\data\\youchengraster.jpg";curBitmap = (Bitmap)Image.FromFile("D:\\data\\youchengraster.png");//读取图片路径//var argbColor = Color.FromArgb(255, 255, 0, 0);int sss = curBitmap.Width * curBitmap.Height;string[] R = new string[sss];string[] G = new string[sss];string[] B = new string[sss];int m = 0;for (int i = 0; i < curBitmap.Width; i++){for (int j = 0; j < curBitmap.Height; j++){curcolor = curBitmap.GetPixel(i,j);R[m] = curcolor.R.ToString();G[m] = curcolor.G.ToString();B[m] = curcolor.B.ToString();m++; }}for(int i = 0; i < sss; i++){string colors = $"{R[i]}{G[i]}{ B[i]}";//MessageBox.Show(colors);switch (colors){case "25400" :redsum = redsum + 1;/* MessageBox.Show(redsum.ToString());*/break;case "25500":redsum = redsum + 1;/* MessageBox.Show(redsum.ToString());*/break;case "25300":redsum = redsum + 1;/* MessageBox.Show(redsum.ToString());*/break;case "25200":redsum = redsum + 1;/* MessageBox.Show(redsum.ToString());*/break;case "000":blacksum++;break;case "2552550":sssl++;break;case "255255255":wsum++;break;}}string filePath = "d:\\data\\youchengraster.txt";FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);StreamReader sr = new StreamReader(fs);string str = sr.ReadLine();//开始读入值FileStream ssss = new FileStream("D:\\data\\xxxxx.txt", FileMode.Create);StreamWriter sdsd = new StreamWriter(ssss);sdsd.WriteLine("ID,count,value");sdsd.WriteLine($"1, {redsum}, 红色");sdsd.WriteLine($"2, {wsum}, 白色");sdsd.WriteLine($"3, {sssl}, 黄色");sdsd.WriteLine($"4, {blacksum}, 黑色");sdsd.Close();ssss.Close();}

当我们进行查看txt文件时,会发现在jpg格式的图片读取会出现问题,是因为jpg对颜色进行压缩,从而导致rgb值发生改变,而png则会完美生成文件。

jpg读取:

png读取:

从而发现读取出现差别。

所以在c#生成颜色填充文件时尽量选择生成PNG,以保证颜色准确性。

注:PNG可为32位色深,分为A(透明度),RBG。

关于c#GDI+绘图填充颜色的常见问题分析(颜色压缩问题)相关推荐

  1. MFC GDI绘图基础

    一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Wind ...

  2. C# GDI+ 绘图

    1 坐标系统 (1) 坐标原点:在窗体或控件的左上角,坐标为(0,0) (2) 正方向:X轴正方向为水平向右,Y轴正方向为竖直向下 (3) 单位:在设置时,一般以像素为单位,像素(Pixel)是由图像 ...

  3. GDI+绘图基础,绘制表格

    GDI+绘图基础 编写图形程序时需要使用GDI(图形设备接口Graphics Device Interface),从程序设计的角度看,GDI包括两个部分:GDI对象和GDI函数. GDI对象定义了GD ...

  4. Windows高级工程师:GDI+绘图;基础入门大全

    Windows GDI绘图基础知识 一.Windows可以画直线.椭圆线(椭圆圆周上的曲线)和贝塞尔曲线. 7 个画线函式是: (1)画直线 LineTo    BOOL LineTo(HDC hdc ...

  5. C# Winform GDI+ 绘图

    目录 一.概述 二.绘图 1.画直线 2.画矩形 3.画圆.圆弧 4.画扇形 5.画多边形 6.绘制字符串 7.填充图形 结束 一.概述 Graphics类是GDI+技术的一个基本类.GDI+(Gra ...

  6. 使用bitblt提高GDI+绘图的效率(转)

    最近在做使用GDI+绘制K线界面发现传统的GDI+绘制方式效率比较低,根本无法满足K线界面及时刷新的速度要求. 所以做了个GDI+绘制图形界面的试验,改试验主要在一个600×600的区域内每隔10MS ...

  7. MFC中的GDI绘图

    MFC中的GDI绘图 目录(?)[+] 什么是GDI 什么是DC MFC中与GDI有关的类 获取设备环境 设置坐标映射 创建绘图工具并选入DC 调用DC绘图函数绘图 三坐标映射实例 一.关于GDI的基 ...

  8. 使用OctreeQuantizer提高gdi+绘图质量

    .net中gdi+绘制的图形质量很少,原因是gdi+使用的是256色的. 为了提高绘制图片的质量,可以使用是"Octree" 算法."Octree" 算法允许我 ...

  9. win32Day05:GDI绘图

    目录 0x00画一个像素点: 0x01画线: 0x03画图形:圆形矩形等 0x04在客户区绘制文字: 0x05三级缓存防闪烁 GDI:Graphical Device Interface 图形设备接口 ...

最新文章

  1. 【C++】C++0x :: Introduction to some amazing features
  2. 折纸机器人的步骤图解_折纸图解老虎
  3. Lesson 4.5 梯度下降优化基础:数据归一化与学习率调度
  4. Fragment的布局中自定义Layout的onSizeChanged添加组件失败的问题
  5. ASP.NET Core Web 项目文件介绍
  6. PHP商城数据库安全事务处理方法
  7. C#笔记11多播委托、事件、设计模式(观察者模式)
  8. 力扣-543. 二叉树的直径
  9. asp.net网上零食销售商城系统
  10. (c++课程设计)简单车辆管理系统(有五种类型的车辆)代码+报告
  11. 开源遥感软件(未完待续)
  12. PHP 控制器怎么调接口,mvc控制器的访问与参数解析和API接口获取数据
  13. 智慧物流园区供应链管理系统解决方案:数智化供应链赋能物流运输行业供应链新模式
  14. python爬取淘宝数据魔方_淘宝数据魔方看人群情况
  15. php腾讯云短信接口调用
  16. 新浪微博开放平台使用
  17. SVN_处理文件误删恢复
  18. vue图片时间轴滑动_Vue之时间轴组件
  19. 自学前端第一天:认识前端工程与网页
  20. 干细胞技术是不是骗局

热门文章

  1. 成都能收到的广播频率
  2. html恶意代码原理,HTML恶意代码
  3. Unix Sed Tutorial 2 : Delete File Lines Using Address and Patterns
  4. 有哪些好用的进销存系统值得推荐?
  5. JS实现点星星消除小游戏
  6. 如何用太阳能电池板给锂电池充电(CN3791 )
  7. 公交专用道:三环将实现全环连通
  8. 交通信息工程 实验二:图层及GIS软件的认识
  9. WPF 插件HelixToolkit库实现3D显示
  10. 使用BootStrap进行响应式布局案例