VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!相关的知识,希望对你有一定的参考价值。

我有一个数组Data(5000,128)As Short ,里面存放的是采集轮胎表面上的数据,即共有5000 * 128 个数据点,然后我想在VB.net的pictureBox中生成一张由这些数据组成的图片,即此图片尺寸是5000 * 128,但是需要转换成Bitmap所能识别的byte()数组, 然后通过System.Runtime.InteropServices.Marshal.Copy(Byte(), Int32, IntPtr, Int32) 方法复制给IntPtr,再通过其它方法,最终赋给 pictureBox.Image属性得以显示图片。
Bitmap需要的byte()数组是由一系列RGB值组成的,如数组第一个元素byte(0)是存储R值,第二元素byte(1)存储的是G值,第三个元素byte(2)存储的是B值,然后下一个元素byte(3)存储的是R值,再下一个元素byte(4)存储的是G值,再一下个元素byte(5)存储的是B值,后面同样是三个三个为一组RGB的值。
我读取一张图片,比如这一张图片尺寸是1024 * 128,也即有1024 * 128个数据点,读取后的byte数组有1024 * 128 * 3 个元素,
然后System.Runtime.InteropServices.Marshal.Copy(Byte(), Int32, IntPtr, Int32) 方法复制给IntPtr,再通过其它方法,最终赋给 pictureBox.Image属性得以显示图片。
所以我现在的问题是如何将数组Data(5000,128)转换成 byte(5000 * 128 * 3)一维数组,求各位前辈们帮帮我,给我个思路、方法什么的,小弟很急这个,我的分只有那么多了,望大家帮帮我,小弟不胜感激,!
这是一张由200 * 128 个数据点生成的图片

参考技术A public Byte[] getphoto(string photopath) //参数图片地址,主要用到的类有FileStream

string str = photopath;
FileStream file = new FileStream(str, FileMode.Open, FileAccess.Read);
Byte[] bytBLOBData = new Byte[file.Length];
file.Read(bytBLOBData, 0, bytBLOBData.Length);
file.Close();
return bytBLOBData;
//这是定义函数..追问

朋友,我试了一下,这个也不行,有点类似上面朋友的方法,还是无法表达出每个数据点的关系!

追答

public Byte[] returnbyte()

short[,] dd = new short[500, 24];
char[] aa=dd.ToString().ToCharArray();
byte[] arc = Encoding.Default.GetBytes(aa);
return arc;
这个类是把你的short数组转换为byte数组,下边的这句是把byte数组转换为图片getphoto要修改为上面的类名

pictureBox1.Image = Image.FromStream(new MemoryStream(getphoto(这里放地址)));

追问

还是没有起作用,我的Data(1024,128)执行到你说的byte[] arc= Encoding.Default.GetBytes(aa)这一步时,arc只有15个元素,没有作用!

追答

你看下你的data这个能不能改为一维数组,在试下看

参考技术B 单纯的数组转换很简单啊。 以下为示意:
For I = 0 to 5000
For J = 0 to 128
Byte(I*J*3) = Data(I,J) And &H0000FF
Byte(I*J*3+1) = (Data(I,J) And &H00FF00) / &H100
Byte(I*J*3+2) = (Data(I,J) And &HFF0000) / &H10000
Next J
Next I追问

我试了你说的这种方法,还是不行,虽然能将一个数据分成三个字节,好像无法表达每个数据之间的关系。

追答

不太明白你说的“无法表达每个数据之间的关系”是什么意思。
不过,这个问题如果想简单一点,你取了数据后逐点画上不就可以了?

vb.net 如何将字符串转换为integer类型的数据?

参考技术A

Dim s As String = "12"

以下三种写法都可以:

Dim n As Integer = CType(s, Integer)

Dim m As Integer = Convert.ToInt32(s)

Dim o As Integer = Integer.Parse(s)

VB.NET入门之数据类型转换

cbool将字符串或者数值转换成布尔型函数;

cobj将内容转换成object;

cbyte将字符串或者数值转换成byte型;

cchar将字符串或者数值转换成char型;

cdate将字符串转换成date型;

cshort将内容转换成short型。

扩展资料

VB.Net隐式转换和显式转换的方法:

“隐式转换”不需要源代码中的任何特殊语法。在下面的示例中,在将 k 的值赋给 q 之前,Visual Basic 将该值隐式转换成单精度浮点值。

Dim k As Integer

Dim q As Double

' Integer widens to Double, so you can do this with Option Strict On.

k = 432

q = K

“显式转换”使用类型转换关键字。Visual Basic 提供了几个这样的关键字,它们将括号中的表达式强制转换为所需的数据类型。这些关键字的行为像函数,但编译器生成内联代码,所以执行速度比使用函数调用要稍微快一些。

下例为上例的扩展,CInt 关键字将 q 的值转换回整数,然后将该值赋给 k。

' q had been assigned the value 432 from k.

q = Math.Sqrt(q)

k = CInt(q)

' k now has the value 21 (rounded square root of 432).

以上是关于VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!的主要内容,如果未能解决你的问题,请参考以下文章

如何将字节数组转换为位图实例 (.NET)?

将位图数组转换为 YUV(420 平面)?

android的canvas如何转换为一张bitmap(位图)

如何将字节数组中的图像文件数据转换为位图?

加载 Jpg/Gif/Bitmap 并转换为 Bitmap

我们如何将位图图像存储到移动内存中?