返回顶部
首页 > 资讯 > 精选 >C#中怎么将byte数组转化成图像
  • 659
分享到

C#中怎么将byte数组转化成图像

2023-06-17 23:06:16 659人浏览 独家记忆
摘要

C#中怎么将byte数组转化成图像,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。byte数组存放的是图像每个像素的灰度值,byte类型正好是从0~255,存放8bit灰度图像的

C#中怎么将byte数组转化成图像,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

byte数组存放的是图像每个像素的灰度值,byte类型正好是从0~255,存放8bit灰度图像的时候,一个数组元素就是一个像素的灰度值。仅有这个数组还不足以恢复出原来的图像,还必须事先知道图像的长、宽值;

创建Bitmap类的时候必须指定PixelFORMat为Format8bppIndexed,这样才***图像本身的特性;

Bitmap类虽然提供了GetPixel()、SetPixel()这样的方法,但我们绝对不能用这两个方法来进行大规模的像素读写,因为它们的性能实在很囧;

托管代码中,能不用unsafe就尽量不用。在.net 2.0中已经提供了BitmapData类及其LockBits()、UnLockBits()操作,能够安全地进行内存读写;

5、图像的width和它存储时的stride是不一样的。位图的扫描线宽度一定是4的倍数,因此图像在内存中的大小并不是它的显示大小;

Format8bppIndexed类型的PixelFormat是索引格式,其调色板并不是灰度的而是伪彩,因此需要我们对其加以修改。

代码如下,解说写在注释里了:

/// <summary>  /// 将一个字节数组转换为8bit灰度位图  /// </summary>  /// <param name="rawValues">显示字节数组</param>  /// <param name="width">图像宽度</param>  /// <param name="height">图像高度</param>  /// <returns>位图</returns>  public static Bitmap ToGrayBitmap(byte[] rawValues, int width, int height)  {  //// 申请目标位图的变量,并将其内存区域定  Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);  BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height),   ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);   //// 获取图像参数  int stride = bmpData.Stride;  // 扫描线的宽度  int offset = stride - width;  // 显示宽度与扫描线宽度的间隙  IntPtr iptr = bmpData.Scan0;  // 获取bmpData的内存起始位置  int scanBytes = stride * height;// 用stride宽度,表示这是内存区域的大小   //// 下面把原始的显示大小字节数组转换为内存中实际存放的字节数组  int posScan = 0, posReal = 0;// 分别设置两个位置指针,指向源数组和目标数组  byte[] pixelValues = new byte[scanBytes];  //为目标数组分配内存     for (int x = 0; x < height; x++)  {   //// 下面的循环节是模拟行扫描   for (int y = 0; y < width; y++)   {   pixelValues[posScan++] = rawValues[posReal++];   }   posScan += offset;  //行扫描结束,要将目标位置指针移过那段“间隙”  }     //// 用Marshal的Copy方法,将刚才得到的内存字节数组复制到BitmapData中  System.Runtime.InteropServices.Marshal.Copy(pixelValues, 0, iptr, scanBytes);  bmp.UnlockBits(bmpData);  // 解锁内存区域     //// 下面的代码是为了修改生成位图的索引表,从伪彩修改为灰度  ColorPalette tempPalette;  using (Bitmap tempBmp = new Bitmap(1, 1, PixelFormat.Format8bppIndexed))  {   tempPalette = tempBmp.Palette;  }  for (int i = 0; i < 256; i++)  {   tempPalette.Entries[i] = Color.FromArgb(i, i, i);  }   bmp.Palette = tempPalette;     //// 算法到此结束,返回结果  return bmp;  }

下面是我用来测试的代码片段:

  static void Main(string[] args)    {    byte[] bytes = new byte[10000];    int k = 0;     for (int i = 0; i < 100; i++)    {  for (int j = 0; j < 100; j++)  {  bytes[k++] = (byte)(i + j);  }    }     Bitmap bmp = ToGrayBitmap(bytes, 100, 100);     bmp.Save(@"d:\test.png",    System.Drawing.Imaging.ImageFormat.Png);    }

结果应该显示成下面的样子:

C#中怎么将byte数组转化成图像

如果没有修改过调色板,则会显示出下面的色彩斑斓的图像:

C#中怎么将byte数组转化成图像

看完上述内容,你们掌握C#中怎么将byte数组转化成图像的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: C#中怎么将byte数组转化成图像

本文链接: https://lsjlt.com/news/294084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中怎么将byte数组转化成图像
    C#中怎么将byte数组转化成图像,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。byte数组存放的是图像每个像素的灰度值,byte类型正好是从0~255,存放8bit灰度图像的...
    99+
    2023-06-17
  • php 怎么将中文转成byte
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php 怎么将中文转成byte?php汉字 字节数组转换<php function stringToByteArray($str,$charset) { ...
    99+
    2020-03-12
    php byte
  • C#中byte数组转double怎么实现
    在C#中,可以使用BitConverter类的静态方法ToDouble来将byte数组转换为double类型。示例如下: byte[...
    99+
    2024-03-15
    C#
  • 如何将文件流转换成byte[]数组
    目录将文件流转换成byte[]数组将文件转为byte[],通过ByteArrayOutputStream实现通过文件路径转换byte[]将bitmap对象将文件流转换成byte[]数...
    99+
    2024-04-02
  • php怎么实现转成byte数组
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现转成byte数组?php转换byte[]数据类型代码如下:<php class Bytes { public static func...
    99+
    2017-07-11
    php
  • golang中怎么将string转为字节数组(byte)
    Go语言是一门新兴的高效编程语言,被广泛应用于各种领域,特别是服务器端开发。其中,字符串处理是Go语言中的一个重要部分。本文将介绍如何将字符串转换为字节数组(byte),即 golang string 转 byte。什么是字节数组?在Go语...
    99+
    2023-05-14
    Golang go语言
  • matlab怎么将图像转化为数据
    在MATLAB中,可以使用`imread`函数读取图像文件,并将其转化为数据。`imread`函数将图像文件的像素值读取为一个矩阵,...
    99+
    2023-09-13
    matlab
  • python怎么将图像转化为灰度图像
    要将图像转换为灰度图像,可以使用Python中的OpenCV库。下面是一个简单的示例代码:```pythonimport cv2# ...
    99+
    2023-09-20
    python
  • golang怎么将字节数组(byte)转为string
    Go语言是一个强大的编程语言,因其资源效率高、跨平台支持好、并发性能优良等特点而备受开发者的欢迎。在Go语言中,字节数组(byte)转字符串(string)是一个常见操作,通常我们使用内置的函数进行转换。本篇文章就来介绍Go语言中字节数组和...
    99+
    2023-05-14
    go语言 Golang
  • php怎么将数组转化成变量
    在PHP编程中,数组的使用是非常重要的,它能够帮助我们更好地处理和管理数据。不过,在某些情况下,我们可能需要将数组转换为变量,以更方便地使用它们。本文将介绍如何使用PHP将数组转换为变量。1.数组转换为变量转换数组为变量的方法非常简单,我们...
    99+
    2023-05-14
  • c++中byte数组转字符串怎么实现
    在C++中,可以使用以下两种方法将字节数组转换为字符串: 使用字符指针和循环: char byteArray[] = {65, ...
    99+
    2024-02-29
    c++
  • C#中的数组怎么转化成链表
    在C#中,可以使用`LinkedList`类来将数组转换为链表。`LinkedList`类是C#中的一个内置泛型类,用于表示双向链表...
    99+
    2023-09-09
    C#
  • MATLAB怎么将图片转化为数组
    在MATLAB中,可以使用imread函数将图片转化为数组。以下是一个示例: % 读取图片 img = imread('image....
    99+
    2023-10-21
    MATLAB
  • php怎么将url的参数转化成数组
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将url的参数转化成数组实现方法:使用stripos()获取字符“”的位置使用mb_substr()根据获取的位置截取字符串,获取url的参数部分使用p...
    99+
    2019-08-12
    php
  • golang怎么将字符串转为字节数组(byte)
    Golang是一门强大的编程语言,拥有许多有用的库和函数。其中有一个非常有用的功能是将字符串转换为字节数组。在本篇文章中,我们将深入探讨如何使用Golang函数将字符串转换为字节数组。Golang提供了几种将字符串转换为字节数组的方法。其中...
    99+
    2023-05-14
    go语言 Golang 字符串
  • php中怎么将字符串转化成字符数组
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在php中,说到字符串转字符数组,就想到explode()函数。但explode()函数会将字符串按特定的分隔符分割成若干个部分,并不是将字符串一个个字符,传入数组;数...
    99+
    2019-05-18
    php 字符串 字符数组
  • C#中怎么将字节数组转换成字符串
    C#中怎么将字节数组转换成字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#字节数组转换成字符串如果还想从 System.String 类中找到方法进行字符串和字节数组之...
    99+
    2023-06-17
  • javascript中怎么将string转换成数组
    javascript中怎么将string转换成数组?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在javascript中,可以使用split方法将string转...
    99+
    2023-06-15
  • C#中怎么将数字转换成中文
    这篇文章将为大家详细讲解有关C#中怎么将数字转换成中文,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#编写数字转换中文算法最近由于项目的原因,需要C#编写数字转换中文算法,先在网了找了一下...
    99+
    2023-06-17
  • JavaScript怎么将伪数组转换成数组 
    今天小编给大家分享一下JavaScript怎么将伪数组转换成数组 的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作