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 ...
随机推荐
- node连接myslq
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : ' ...
- css动画库
转载自:http://www.cnblogs.com/starof/p/4968769.html 本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方 ...
- 谈谈你对Java面向对象的理解
面向对象,其实是一种思考的思想,是一种思想,而这种思想它早期的思想是面向过程,通过不断的演化变成了现在的面向对象,思想有一个演变形式,早期是面向过程,现在是面向对象. 故事:把大象放进冰箱里,分几步? ...
- Java语法基础DayFive
一.继承 1.格式:class 子类 extends 父类 2.好处:提高代码的复用性:让类与类之间产生了关系,是多态的前提. 3.弊端: (1)类的耦合性增强了,而开发的原则是高内聚,低耦合.内聚是 ...
- 18-10-18 Python 思维导图 很棒的
赠送 14 张 Python 知识点思维导图 来源 | Python学习联盟 本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库). 按顺序依次展示了以下内容的一系列思维导图: ...
- Java学习笔记31(IO:Properties类)
Properties类,表示一个持久的j集,可以存在流中,或者从流中加载 是Hashtable的子类 map集合的方法都能用 用途之一:在开发项目中,我们最后交给客户的是一个编译过的class文件,客 ...
- 路径问题 :<c:url >的作用
最近的项目一直报这样的错 可是本地启动 又没问题,xshell查看日志 没有错误日志,找了好久都没想到错误原因.一位大佬几分钟就找到原因了有点扎心. 首先说一下解决问题的思路.首先报错是4开头,说明是 ...
- 栈 c实现
栈的数组实现 stack.h #ifndef _STACK_ #define _STACK_ #define SIZE 100 typedef int data_t; typedef struct h ...
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...
- NOI-1.1-06-空格分隔输出-体验多个输入输出
06:空格分隔输出 总时间限制: 1000ms 内存限制: 65536kB 描述 读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔. ...