2010-05-28 33 views

Respuesta

9

Cópielo en un Bitmap y luego llame al método Save del mapa de bits.

Tenga en cuenta que si estás literalmente dibujar en la pantalla (por el acaparamiento de contexto de dispositivo de la pantalla), entonces la única manera de salvar lo que acaba de dibujar en la pantalla es revertir el proceso por el dibujo de la pantalla a a Bitmap. Esto es posible, pero obviamente sería mucho más fácil dibujar directamente en un mapa de bits (usando el mismo código que usas para dibujar en la pantalla).

+5

Para los futuros lectores: a pesar del título de esta pregunta, esta respuesta no muestra cómo guardar una gráfica arbitrarias objeto a una imagen. Es decir, no hay función en Graphics o Bitmap que "Copie (la instancia de Graphics) en un Bitmap". Desde la última oración, probablemente se esté refiriendo a hacer 'Gráficos g = Gráficos.Desde la Imagen (mapa de bits)', y luego renderizar a ** esos ** gráficos (g), en lugar de hacerlo a su objeto gráfico original. Luego puede hacer un mapa de bits. Ahorre para guardar lo que ha renderizado. – ToolmakerSteve

1

Es probable que esté dibujando en una imagen o en un control. Si en la imagen utilizar

Image.Save("myfile.png",ImageFormat.Png) 

Si basándose en el uso de control Control.DrawToBitmap() y luego guardar la imagen vuelto como anteriormente.

Gracias por la corrección: no sabía que podía dibujar directamente en la pantalla.

+0

* Puede * dibujar directamente en la pantalla usando Graphics, que tiene un constructor que toma el contexto de un dispositivo; todo lo que necesita es el contexto del dispositivo de la pantalla. – MusiGenesis

+0

¡Gracias por esto, nunca se me ha ocurrido intentar dibujar directamente en la pantalla! –

+0

De hecho, recomendaría * no * dibujar directamente en la pantalla, ya que realmente no tiene sentido hacerlo. – MusiGenesis

2
Graphics graph = CreateGraphics(); 
Bitmap bmpPicture = new Bitmap("filename.bmp"); 

graph.DrawImage(bmpPicture, width, height); 
18

Aquí está el código:

Bitmap bitmap = new Bitmap(Convert.ToInt32(1024), Convert.ToInt32(1024), System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
Graphics g = Graphics.FromImage(bitmap); 

// Add drawing commands here 
g.Clear(Color.Green); 

bitmap.Save(@"C:\Users\johndoe\test.png", ImageFormat.Png); 

Si sus gráficos está sobre un formulario, puede utilizar esto:

private void DrawImagePointF(PaintEventArgs e) 
{ 
    ... Above code goes here ... 

    e.Graphics.DrawImage(bitmap, 0, 0); 
} 

Además, para ahorrar en una página web, podría usar esto:

MemoryStream memoryStream = new MemoryStream(); 
bitmap.Save(memoryStream, ImageFormat.Png); 
var pngData = memoryStream.ToArray(); 

<img src="data:image/png;base64,@(Convert.ToBase64String(pngData))"/> 

Los objetos gráficos son una superficie de dibujo GDI +. Deben tener un contexto de dispositivo adjunto para dibujar, es decir, una forma o una imagen.

+3

No veo cómo responde esto a la pregunta, que es tomar un objeto GRAPHICS y copiarlo en un mapa de bits. Este código parece hacer lo CONTRARIO. (Tengo una situación donde se pasa un "Gráficos" a un método, y la fuente de los "Gráficos" no es accesible en ese lugar en el código, solo los "Gráficos" en sí). – ToolmakerSteve

1

probar esto, funciona bien para mí ...

private void SaveControlImage(Control ctr) 
{ 
    try 
    { 
     var imagePath = @"C:\Image.png"; 

     Image bmp = new Bitmap(ctr.Width, ctr.Height); 
     var gg = Graphics.FromImage(bmp); 
     var rect = ctr.RectangleToScreen(ctr.ClientRectangle); 
     gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size); 

     bmp.Save(imagePath); 
     Process.Start(imagePath); 

    } 
    catch (Exception) 
    { 
     // 
    } 
} 
Cuestiones relacionadas