15
Necesito analizar el contenido de Clipboard.GetImage()
(a BitmapSource
) a BitmapImage
. ¿Alguien sabe cómo se puede hacer esto?BitmapSource a BitmapImage
Necesito analizar el contenido de Clipboard.GetImage()
(a BitmapSource
) a BitmapImage
. ¿Alguien sabe cómo se puede hacer esto?BitmapSource a BitmapImage
he encontrado una solución limpia que funciona:
BitmapSource bitmapSource = Clipboard.GetImage();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
MemoryStream memoryStream = new MemoryStream();
BitmapImage bImg = new BitmapImage();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(memoryStream);
memoryStream.Position = 0;
bImg.BeginInit();
bImg.StreamSource = memoryStream;
bImg.EndInit();
memoryStream.Close();
return bImg;
using System.IO; // namespace for using MemoryStream
private static byte[] ReadImageMemory()
{
BitmapSource bitmapSource = BitmapConversion.ToBitmapSource(Clipboard.GetImage());
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
MemoryStream memoryStream = new MemoryStream();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(memoryStream);
return memoryStream.GetBuffer();
}
// and calling by this example........
byte[] buffer = ReadImageMemory();
¿Es necesario el uso de 'bImg.StreamSource = new MemoryStream (memoryStream.ToArray());' en lugar de 'bImg.StreamSource = memoryStream; 'y eliminando' memoryStream.Close(); ' – Elmo
Debe agregar bImg.Freeze() al final para permitir llamadas multiproceso, de lo contrario funciona perfecto. – m1k4
@ Don'tForgettoUpvote: Para mí 'bImg.StreamSource = new MemoryStream (memoryStream.ToArray());' era necesario, de lo contrario estaba lanzando una excepción. – dotNET