我正在寻找一种使用 C# 将一堆小图像保存到一个(文本)文件中的方法。
我正在考虑使用一个 2D 循环(2 个嵌套的 for 循环)来获取像素数据(rgb 值)并将其作为字符串写入文件。
有没有更优雅的方法来做到这一点?也许保存为十六进制颜色或 uint 代替?(#FF00FF / 0xFF00FF)
我怎样才能构建最终的文本文件,以便之后阅读(我想用自定义算法加密文本文件)。
我正在寻找一种使用 C# 将一堆小图像保存到一个(文本)文件中的方法。
我正在考虑使用一个 2D 循环(2 个嵌套的 for 循环)来获取像素数据(rgb 值)并将其作为字符串写入文件。
有没有更优雅的方法来做到这一点?也许保存为十六进制颜色或 uint 代替?(#FF00FF / 0xFF00FF)
我怎样才能构建最终的文本文件,以便之后阅读(我想用自定义算法加密文本文件)。
您可以将图片打开为二进制并将其转换为 Base64,然后您可以将其作为字符串保存到文本文件中。
public static string CreateFileStringFromPath(string tempPath)
{
//We Convert The Image into a BASE64 String and so store it as text
//First we add a Stream to the File
FileStream tempStream = new FileStream(tempPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
try
{
//Then we write the Stream to a Byte Array
byte[] tempByteArray = ReadStreamFully(tempStream);
tempStream.Dispose();
}
catch(Exception)
{
tempStream.Dispose();
return null;
}
//Then we Convert the Byte Array to a Base64 String and return it
return Convert.ToBase64String(tempByteArray);
}
public static byte[] ReadStreamFully(Stream tempFileStreamInput)
{
//We Create a MemoryStream which we can form into an Byte Array
using(MemoryStream tempMemoryStream = new MemoryStream())
{
tempFileStreamInput.CopyTo(tempMemoryStream);
return tempMemoryStream.ToArray();
}
}
现在我们有了一个字符串,我们只需要一种方法来存储它们,因为您想将它们存储在磁盘上考虑 XML(可能还有 XSD 样式表)或将它们插入到任何其他可序列化的结构中,如 JSON
编辑 1:根据要求,这是一种保存像素的方法
private Color[,] GetPixel_Example(Bitmap myBitmap)
{
Color[,] tempColor = new Color[myBitmap.width,myBitmap.height]
for(int i = 0; i < myBitmap.height;i++)
for(int j = 0; j < myBitmap.width;j++)
// Get the color of a pixel within myBitmap.
Color pixelColor = myBitmap.GetPixel(j,i);
//And save it in the array
tempColor[j,i] = pixelColor;
return tempColor;
}
这个例子自然只适用于位图并返回一个二维数组,其中所有像素都保存为颜色,现在可以提取 RGB 或 HEX 或其他任何内容。您可以轻松地将示例更改为 System.Media.Images 或只是文件。如果您不知道如何将图片制作为位图,则应该有类似 Bitmap.LoadFromFile();
因为你有多个图像。做一个结构化文件,比如xml
<Images>
<Image name = "somename.someimageextension"
<Content></Content>
</Image>
</Images>
要获取内容,请将您的图像(从磁盘?)作为流,将其转换为 base64,例如
string contentAsBase64 = Convert.ToBase64String(imageAsStream.ToArray());
加密/签署整个文档。