2010-08-19 10 views
18

Todas estas respuestas similar question's requieren que se guarde el archivo. Sin embargo, estoy tratando de convertir el archivo y luego copiarlo en el portapapeles.Convierta BMP a PNG en la memoria para que el Portapapeles pegue en .Net

¿Cómo puedo convertir un mapa de bits (o cualquier imagen) en un archivo PNG sin guardarlo en el sistema de archivos?

Actualización:
Estoy tratando de pegar la imagen en una aplicación (en este caso Evernote). Cuando copias una imagen en el portapapeles (por ejemplo, a través del navegador), recuerda su formato de imagen y cuando lo pegas, crea una imagen con el mismo formato exacto. Por ejemplo, si copia un PNG, pegará un PNG. Si copia un JPG, pegará un JPG, etc.

Estoy intentando tomar la imagen que esté actualmente en el portapapeles, ampliarla al tamaño que desee y mantenerla en el portapapeles como PNG, de modo que cuando se pegue en Evernote, cree un PNG.

Cuando copio una imagen PNG en mi navegador, ver los siguientes formatos: HTML FORMAT, CF_BITMAP, CF_DIB, CF_DIBV5. No estoy seguro de cuál de estos Evernote está usando para pegar. Tenía la impresión de que era CF_BITMAP, pero después de leer los comentarios a continuación, creo que está usando uno de los otros formatos.

¿Cómo puedo colocar una imagen en el portapapeles que se tratará como un PNG cuando se pegue?

+0

¿dónde planea en pegándolo? Estoy pensando que el portapapeles no almacena imágenes en un formato de archivo como jpg/png. a menos que planee pegarlo en un directorio como un archivo? – russau

+0

@russau: Actualicé la pregunta para aclarar lo que intento hacer. – Senseful

+0

_ "Cuando copias una imagen en el portapapeles (por ejemplo, a través del navegador), recuerda su formato de imagen" _ - Esto es completamente falso. Probablemente esté confundiendo esto porque algunas aplicaciones usan un flujo de memoria png para compensar el hecho de que el portapapeles estándar de Windows no tiene soporte de transparencia. – Nyerguds

Respuesta

24

Guardar la Bitmap a un MemoryStream

byte[] result = null; 
using (MemoryStream stream = new MemoryStream()) 
{ 
    bitmap.Save(stream, ImageFormat.Png); 
    result = stream.ToArray(); 
} 
+0

¿Qué tipo es el resultado? – Senseful

+1

es una matriz de bytes, actualizó la respuesta – russau

+0

¿Podría incluir el código necesario para convertirla en una 'Imagen'? (Estoy tratando de resolver esto yo mismo ahora y lo publicaré como un comentario para que pueda copiar/pegar) – Senseful

Cuestiones relacionadas