我正在尝试用 c# 编写一个程序以通过以太网发送帧。
目前我有 .jpg 测试图像,分辨率为 1920x1080,字节大小非常不同。
我正在尝试将 .jpg 图像转换为字节数组,我寻找了类似的答案,但是当我尝试它们时,我得到的字节数组包括每个图像的 437、1030、1013 字节。考虑到图像是高清分辨率,这没有任何意义。如何将图像文件转换为 1920*1080*3 (RGB) 字节数组?请记住,我正在尝试开发一个实时应用程序,它应该能够以高速率发送帧,因此这段代码不会很慢。
提前致谢。通克
我正在尝试用 c# 编写一个程序以通过以太网发送帧。
目前我有 .jpg 测试图像,分辨率为 1920x1080,字节大小非常不同。
我正在尝试将 .jpg 图像转换为字节数组,我寻找了类似的答案,但是当我尝试它们时,我得到的字节数组包括每个图像的 437、1030、1013 字节。考虑到图像是高清分辨率,这没有任何意义。如何将图像文件转换为 1920*1080*3 (RGB) 字节数组?请记住,我正在尝试开发一个实时应用程序,它应该能够以高速率发送帧,因此这段代码不会很慢。
提前致谢。通克
将字节读取Image到字节数组:
Image image = ...;
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
if (ms.Length == 0)
{
ms.Close();
throw new Exception("Bad Image File");
}
ms.Position = 0;
byte[] baImageBytes = new byte[ms.Length];
ms.Read(baImageBytes , 0, (int)ms.Length);
ms.Close();
从字节数组创建图像:
byte[] baImageBytes =...
Image myImage = Image.FromStream(new MemoryStream(baImageBytes ));
JPG 是一种压缩格式,这就是为什么它的大小(以及相应的 Byte 数组的大小)通常会远小于 1920*1080*3。为了从 JPG 中获取字节数组,您可以使用流:
Image myImage;
...
byte[] result;
using (MemoryStream ms = new MemoryStream()) {
myImage.Save(ms, ImageFormat.Jpeg);
result = ms.ToArray();
}
如果您想要的只是字节数组形式的像素,则必须将 JPG 转换为 BMP(或其他原始未压缩格式)
Bitmap myImage;
...
byte[] rgbValues = null;
BitmapData data = myImage.LockBits(new Rectangle(0, 0, myImage.Width, myImage.Height), ImageLockMode.ReadOnly, value.PixelFormat);
try {
IntPtr ptr = data.Scan0;
int bytes = Math.Abs(data.Stride) * myImage.Height;
rgbValues = new byte[bytes];
Marshal.Copy(ptr, rgbValues, 0, bytes);
}
finally {
myImage.UnlockBits(data);
}
}