【发布时间】:2018-03-05 22:52:29
【问题描述】:
我正在学习图像处理,但我被困住了。我想读取图像并将字节写入 CSV 文件,以; 分隔。我将图像转换为字节数组,然后将其写入。但似乎该数组不包含导致file.WriteLine() 错误的所有图像信息。
这是C#中的代码:
// Creación del objeto imagen
Image image = Image.FromFile(@"D:/Users/Sean Sabe/Documents/ImageProcessing/Images/cato.jpg");
// Mostrar datos de la imagen
Console.WriteLine("Image Size: " + image.PhysicalDimension + " Depth: " + image.PixelFormat);
// Convertir la imagen en array de bytes
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(image, typeof(byte[]));
// Escribir la matriz con los bytes
using (StreamWriter file = new StreamWriter(@"D:/Users/Sean Sabe/Documents/ImageProcessing/cato.csv"))
{
for(int y = 0; y < image.Height; y++)
{
for(int x = 0; x < image.Width; x++)
{
file.WriteLine(String.Join(";", bytes[x + (y * image.Width)]));
}
file.WriteLine("\n");
}
}
cato.csv 中写的内容如下:
255
216
255
224
0
16
74
.
.
.
以此类推,直到 A 列中的 37132 行。
【问题讨论】:
-
此外,您似乎假设一个字节等于一个像素。在你修复你的 file.WriteLine/String.Join 问题后,它会在你背后咬你...
-
String.Join()用于创建具有任意数量值的字符串,但您一次只写一个。我只能猜测你想在那里做什么。为什么不显示它写入文件的内容并解释似乎缺少哪些信息? -
据我所知,转换为字节数组的图像不等于图像的像素内容...您需要为此使用
LockBits和Marshal.Copy。根据格式,您最终会得到每个像素最多四个字节和填充。仅仅那个字节数组不足以重建图像。有一个原因图像有标题。 -
@JonathanWood 我编辑了这个问题。我想在
CSV文件中写入的是完整的颜色代码,无论图像是RGB 还是灰度。 -
@Nyerguds 如果我想为其他处理操作图像信息,我需要颜色数据而不是图像的字节数?
标签: c# arrays csv image-processing byte