【发布时间】:2016-06-23 11:23:25
【问题描述】:
我想加载一个图像并将其直接编码为 base64 字符串。小/低分辨率图片加载速度很快,但加载由 iPhone 5 拍摄的图片(2448 x 3264, 2.61 MB)需要很长时间。有没有办法在我的应用程序中更快地加载这些图像?
这是我的 C# 代码:
private void button1_Click(object sender, EventArgs e)
{
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
//Setup OpenFileDialog
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
string sFileName = openFileDialog1.FileName;
textBox1.Text = sFileName;
pictureBox1.ImageLocation = sFileName;
using (Bitmap bm = new Bitmap(sFileName))
{
using (var ms = new MemoryStream())
{
bm.Save(ms, ImageFormat.Jpeg);
base64 = Convert.ToBase64String(ms.ToArray());
textBox3.Text = base64;
}
}
}
}
}
}
【问题讨论】:
-
Image.FromFile() 可以帮到你很多
-
大量不必要的昂贵代码。当您可以按原样使用文件时,使用 Bitmap 类没有任何意义。用 5.2 兆字节的字符串让 TextBox 类心脏病发作毫无意义。当您可以使用 MemoryStream.GetBuffer() 时,使用 MemoryStream.ToArray() 毫无意义。
-
你想用base64的图像归档什么?
-
好的。这里的翻译丢失了一些东西。 没有合理的理由对任何内容进行base64编码并然后使用AES对其进行加密。反过来(加密然后base 64),是的。但是这样一来,不行。一点也不。
-
一般来说,加密会将一组任意字节转换为另一组任意字节。它们的具体价值或意义无关紧要。因此,在这种情况下,输入可以轻松通过
ms.ToArray()返回的数组。您首先通过base-64编码该字节数组所做的只是增加需要由三分之一加密的数据量 - 而作为输出得到的仍然是任意字节集 - 所以如果你需要加密的 输出 可以处理,例如您必须使用例如执行 second 轮编码的文本基数 64。