我想知道是否可以在不将图像保存到文件的情况下以编程方式即时更改图像编码?
用例:当用户从源复制二进制图像时,是否可以将图像编码从 binary
更改为 base64
?
最佳答案
您可以更改图像的编码而不将其保存到文件,但不能不将其保存到代码中的变量。 Clipboard 类基本上只有一些 Get 和 Set 方法。更改剪贴板中内容的唯一方法是将其中一种 Get 方法调用到局部变量中,更改您刚刚获得的任何内容,然后调用其中一种 Set 方法,传入更改后的对象。这会导致剪贴板对象发生变化,但并非没有将其“保存”到变量的中间步骤。
Clipboard 没有公开任何直接操作剪贴板中对象内存的方法。即使这样的方法被公开,将图像的编码从二进制更改为 Base64 涉及从根本上更改所有内存,因此它不会有太大值(value).
更新:这是一个从剪贴板获取图像、将其转换为 base64 字符串并将其放回剪贴板的方法:
if (Clipboard.ContainsImage())
{
using (MemoryStream memory = new MemoryStream())
{
using (Image img = Clipboard.GetImage())
{
img.Save(memory, img.RawFormat);
}
string base64 = Convert.ToBase64String(memory.ToArray());
Clipboard.SetText(base64);
}
}
您将需要这两个 using 语句:
using System.IO;
using System.Windows.Forms;
它未经测试(因为它已经过了我的就寝时间),但它应该可以工作。它确实涉及局部变量的使用,但这是不可避免的(也是正常的)。
关于c# - 动态更改图像编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419401/