Вы можете изменить кодировку изображения, не сохраняя его в файл, но не сохраняя его в переменной своего кода. Класс Clipboard в основном имеет несколько методов Get и Set. Единственный способ изменить содержимое буфера обмена - это вызвать один из методов Get в локальную переменную, изменить то, что вы только что получили, а затем вызвать один из методов Set, передавая измененный объект. Это приводит к изменению объекта буфера обмена, но не без промежуточного шага «сохранения» его в переменной.
Буфер обмена не предоставляет никаких методов для непосредственного манипулирования памятью объекта в буфере обмена. Даже если бы такой метод был раскрыт, изменение кодировки изображения с двоичного на Base64 влечет за собой фундаментальное изменение всей памяти, поэтому для него не было бы особой ценности.
Обновление : вот метод, который будет брать изображение из буфера обмена, преобразовывать его в строку 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 System.IO;
using System.Windows.Forms;
Это не проверено (потому что прошло мое время сна), но оно должно работать. Он предполагает использование локальных переменных, но это неизбежно (как и обычно).