c#实现RGB字节数组生成图片
我是要用c#来实现,现在已经知道了rgb数组,那么如何快速生成一张图片呢?
其实这个话题并不局限于是rgb字节数组的顺序,只要你能对于上表示红、绿、蓝的值,就可以生成图片。知道了原理,做什么都简单了。
rgb分别只是代表一个颜色的值,如果你真是rgb,那你就是要按位置用setpiex一个个画颜色。如下:
Bitmap bmp = new Bitmap(w,h);
for(int x = ;x < w;x++){
for(int y = ;y < h;y++){
bmp.SetPixel(x,y,Color.FromArgb(,r,g,b));
}
}
这个是最简单的了 前提是你能正确定位你的rgb的坐标,效率一点的 用 Bitmap.LookBit 来锁定内存操作。
下面再给两个RGB 和 Bitmap 互转的函数,仅供参考:
public Bitmap BGR24ToBitmap(byte[] imgBGR)
{ int p = ;
Bitmap bmp = new Bitmap(vW, vH, System.Drawing.Imaging.PixelFormat.Format24bppRgb); if (imgBGR != null)
{
//构造一个位图数组进行数据存储
byte[] rgbvalues = new byte[imgBGR.Length]; //对每一个像素的颜色进行转化
for (int i = ; i < rgbvalues.Length; i += )
{
rgbvalues[i] = _imgData[i + ];
rgbvalues[i + ] = _imgData[i + ];
rgbvalues[i + ] = _imgData[i];
} //位图矩形
Rectangle rect = new Rectangle(, , bmp.Width, bmp.Height);
//以可读写的方式将图像数据锁定
System.Drawing.Imaging.BitmapData bmpdata = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
//得到图形在内存中的首地址
IntPtr ptr = bmpdata.Scan0; //将被锁定的位图数据复制到该数组内
//System.Runtime.InteropServices.Marshal.Copy(ptr, rgbvalues, 0, imgBGR.Length);
//把处理后的图像数组复制回图像
System.Runtime.InteropServices.Marshal.Copy(rgbvalues, , ptr, imgBGR.Length);
//解锁位图像素
bmp.UnlockBits(bmpdata); }
return bmp;
} public byte[] bitmap2BGR24(Bitmap img)
{
byte[] bgrBytes = new byte[];
Bitmap bmp = (Bitmap)img; if (bmp != null)
{
//位图矩形
Rectangle rect = new Rectangle(, , bmp.Width, bmp.Height);
//以可读写的方式将图像数据锁定
System.Drawing.Imaging.BitmapData bmpdata = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat); //构造一个位图数组进行数据存储
int bLength = bmp.Width * bmp.Height * ;
byte[] rgbVal = new byte[bLength];
bgrBytes = new byte[bLength];
//得到图形在内存中的首地址
IntPtr ptr = bmpdata.Scan0;
//将被锁定的位图数据复制到该数组内
System.Runtime.InteropServices.Marshal.Copy(bmpdata.Scan0, rgbVal, , bLength);
//把处理后的图像数组复制回图像
//System.Runtime.InteropServices.Marshal.Copy(rgbVal, 0, ptr, bytes);
//解锁位图像素
bmp.UnlockBits(bmpdata); //对每一个像素的rgb to bgr的转换
for (int i = ; i < rgbVal.Length; i += )
{
bgrBytes[i] = rgbVal[i + ];
bgrBytes[i + ] = rgbVal[i + ];
bgrBytes[i + ] = rgbVal[i];
} }
return bgrBytes;
}
参考:https://bbs.csdn.net/topics/391862868
c#实现RGB字节数组生成图片的更多相关文章
- 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片
实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...
- 【java工具类】对字节数组字符串进行Base64解码并生成图片
import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.springfra ...
- Java将文件转为字节数组
Java将文件转为字节数组 关键字:文件,文件流,字节流,字节数组,二进制 摘要:最近工作中碰到的需求是,利用http传输二进制数据到服务器对应接口,需要传输userId, file(加密后)等一系列 ...
- (IEEE-754) 字节数组与浮点数之间的互相转换(MODBUS float类型)
在做上位机开发过程中,经常会碰到字节数组与浮点数,整数等数据之间的转换,有时为了验证数据是否解析正确,得借助于IEEE浮点数工具,本文把基于c#实现的浮点数与字节数组(或16进制的字符串)转换的实现方 ...
- C#字节数组转换成字符串
C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...
- 【.net】从比较两个字节数组谈起
上午,有位初学者朋友问:如何比较两个字节数组中各字节是否相等? 不许笑,我一向反对嘲笑初学者,初学者不认真学习时你可以批评,但不能讥嘲.你不妨想想,你自己开始学习编程的时候又是什么个光景? 好,于是, ...
- 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转
包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Hex 1.字节数组(byte[])转为十六进制(Hex ...
- java 字节数组转int
4字节数组转int类型 小端模式 /** * 数组转int类型 * * @param src * @return */ public static int bytesToInt(byte[] src) ...
- java 读取文件的字节数组
/*文件64位编码*/ public static void main(String[] args) { byte[] fileByte = toByteArray(newFile); St ...
随机推荐
- 5.9 C++重载转型操作符
参考:http://www.weixueyuan.net/view/6387.html 注意: 转型构造函数可以将其它类型的参数转换为类类型,如果我们要进行相反的转换过程,将类类型转换为其它数据类型, ...
- UBUNTU 测试跑分
time echo "scale=5000; 4*a(1)" | bc -l -q3.14159265358979323846264338327950288419716939937 ...
- matlab中循环的使用
转载自 https://blog.csdn.net/ssure/article/details/30329601 matlab 中的while循环只有 while statement .... end ...
- kettle在linux下执行任务
1.下载 最新版下载 7.1 https://community.hitachivantara.com/docs/DOC-1009855 准备 上传任务文件 .kjb,.ktr 上传mysql 驱动 ...
- angular2.0 官网架构文档
Angular 是一个用 HTML 和 JavaScript 或者一个可以编译成 JavaScript 的语言(例如 Dart 或者 TypeScript ),来构建客户端应用的框架. 该框架包括一系 ...
- 利用node,跑项目。
(前提是已经安装了node) 一.简单介绍 Vue开发|文件目录结构部署 目录结构 ├── index.html 入口页面 ├── build 构建脚本目录 │ ├── build-server.j ...
- Day18作业及默写
人狗大战 #!/usr/bin/env python # encoding: utf-8 # Author: MeiMeiLong <2559184081@qq.com> # Create ...
- Spring REST API
RPC是面向服务的,并关注与行为和动作:而REST是面向资源的,强调描述应用程序的事务的名词.REST将资源的状态以最适合客户端或服务端的形式从服务器端转移到客户端. REST Representat ...
- 交换机的默认网关(跨网段telnet)
实验要求:配置一台交换机,并配置默认网关,使不同网段的主机能够远程telnet连接到交换机 拓扑图如下: 交换机配置: enable 进入特权模式 configure terminal 进入全局模式 ...
- Power BI与Tableau基于Google搜索上的比较
在数据分析领域里,不少的数据爱好者都会关心什么数据分析产品最好用?最重要的是,很多的企业也特别希望员工能真正知道如何使用这些BI平台以确保公司的投资是值得.同类的文章,小悦也曾发布过,可参考最近< ...