我是要用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字节数组生成图片的更多相关文章

  1. 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片

    实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...

  2. 【java工具类】对字节数组字符串进行Base64解码并生成图片

    import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.springfra ...

  3. Java将文件转为字节数组

    Java将文件转为字节数组 关键字:文件,文件流,字节流,字节数组,二进制 摘要:最近工作中碰到的需求是,利用http传输二进制数据到服务器对应接口,需要传输userId, file(加密后)等一系列 ...

  4. (IEEE-754) 字节数组与浮点数之间的互相转换(MODBUS float类型)

    在做上位机开发过程中,经常会碰到字节数组与浮点数,整数等数据之间的转换,有时为了验证数据是否解析正确,得借助于IEEE浮点数工具,本文把基于c#实现的浮点数与字节数组(或16进制的字符串)转换的实现方 ...

  5. C#字节数组转换成字符串

    C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...

  6. 【.net】从比较两个字节数组谈起

    上午,有位初学者朋友问:如何比较两个字节数组中各字节是否相等? 不许笑,我一向反对嘲笑初学者,初学者不认真学习时你可以批评,但不能讥嘲.你不妨想想,你自己开始学习编程的时候又是什么个光景? 好,于是, ...

  7. 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转

    包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Hex 1.字节数组(byte[])转为十六进制(Hex ...

  8. java 字节数组转int

    4字节数组转int类型 小端模式 /** * 数组转int类型 * * @param src * @return */ public static int bytesToInt(byte[] src) ...

  9. java 读取文件的字节数组

    /*文件64位编码*/ public static void main(String[] args) {    byte[] fileByte = toByteArray(newFile);   St ...

随机推荐

  1. 自旋锁(Spin Lock)

    转载请您注明出处:    http://www.cnblogs.com/lsh123/p/7400625.html 0x01 自旋锁简介 自旋锁也是一种同步机制,它能保证某个资源只能被一个线程所拥有, ...

  2. Xilinx SDK编译Microblaze时出错

    reference:http://www.eeboard.com/evaluation/digilent-cmod-a7-fpga/9/ 在vivado 2015.4中创建microblaze软核,l ...

  3. L256 翻译

    Should work be placed among the causes of happiness or be regarded as a burden? Much work isexceedin ...

  4. mysql 数据库关于my.int 的相关问题

    最好在建库的时候直接建好 create database db1 charset utf8; my.int  在mysql的目录里 名曰配置文件    里面主要是内容就是 1 一般用到的就是编码不统一 ...

  5. $_SERVER['URI']

    WordPress通过301重定向实现非首先域(非www)跳转向本来是一个很简单事情,由于没弄清楚$_SERVER['HTTP_X_REWRITE_URL'] 和$_SERVER['REQUEST_U ...

  6. random_select

    package sorttest;   //expected and worst running time is O(n),asuming that the elements are distinct ...

  7. VB播放声音

    公共Modules定义: Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ...

  8. 河南省第四届ACM省赛(T1) 序号互换

    问题 A: 序号互换 时间限制: 1 Sec  内存限制: 128 MB难度1 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来.单元格的行坐标是由数字编 ...

  9. [转] 带你彻底理解RSA算法原理

    http://blog.csdn.net/dbs1215/article/details/48953589 1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法 ...

  10. MySQL:日期函数、时间函数处理(转)

    date_add() 增加MYSQL 获取当前时间加上一个月 ; date_sub()减少 date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day ...