c# - 动态更改图像编码?

标签 c# image-processing image-manipulation

我想知道是否可以在不将图像保存到文件的情况下以编程方式即时更改图像编码?

用例:当用户从源复制二进制图像时,是否可以将图像编码从 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/

相关文章:

imagemagick - ImageMagick 是覆盖图像的最快方法吗?我如何才能做得更快,或者是否有我不知道的更快的技术?

c# - 修复了枪的位置

c# - 删除换行符和空格

c++ - 在给定点拾取 Blob 的更快方法

c# - 图像重映射算法

iphone - iOS 上的图像过滤选项

c# - 如果日期时间是另一个日期时间的 24 小时,则返回

c# - session 超时与定时器

python - 在Opencv Python中将RGB图像转换为YUV和YCbCr颜色空间图像

.net - 使用 OpenCV 的感兴趣区域