Principales respuestas
Grabar dibujo de PictureBox en Sql Server

Pregunta
-
Hola a todos
Tengo un Programa donde de acuerdo a parámetros hago unos dibujos con líneas en un pictureBox, funciona muy bien.. El Problema radica en querer grabar ese dibujo en la base de datos como una imagen, obtengo un resultado "Object reference not set to an instance of an object." verifico el MemoryStream() y me devuelve vacio o null.
Si cargo al PictureBox una imagen sea en formato Jpeg, bmp, png etc lo graba sin problemas, pero el dibujo que realizo siempre indica vacio.
Esta es estas lineas me da error..
Dim ms As New MemoryStream() 'Creamos el MemoryStream.
PictureBox1.Image.Save(ms, Imaging.ImageFormat.Jpeg)
Gracias de antemano
Respuestas
-
mira un ejemplo es paresido al tuyo pero este crea una imagen y se la pasa a la clase graphic para que dibuje sobre la imagen despues se la pasa al picturebox para mostrarla y el picturebox la guarda en formato .jpg
Imports System.Drawing Imports System.Drawing.Imaging Imports Microsoft.VisualBasic.FileIO Public Class Form1 Dim surface As Graphics Dim open As Pen Dim gr As Brush Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Variables para almacenar el ancho y el alto del control PictureBox1 Dim ancho, alto As Integer ancho = PictureBox1.Width alto = PictureBox1.Height 'imagen en donde se va a dibujar Dim bmp As New Bitmap(ancho, alto) 'Aqui le decimos a la clase graphic que bamos a dibujar en la imagen bmp surface = Graphics.FromImage(CType(bmp, Image)) surface.Clear(Color.White) open = New Pen(Color.Black, 2) Dim Mfont As New Font("Arial", 20) gr = New SolidBrush(Color.Black) surface.DrawLine(open, CInt(ancho / 2) + 18, 20, CInt(ancho / 2) + 18, alto + 20) surface.DrawLine(open, CInt(ancho / 2) + 22, 20, CInt(ancho / 2) + 22, alto + 20) surface.DrawRectangle(open, 20, 20, ancho, alto) surface.DrawRectangle(open, 24, 24, ancho - 8, alto - 8) surface.DrawString("vb.net 2019", Mfont, gr, New Rectangle(200, 150, ancho, alto)) PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage PictureBox1.Image = bmp 'guardamos la imagen Dim archivoImagen As String = (SpecialDirectories.MyPictures & "\NuevaImagen1.jpg") PictureBox1.Image.Save(archivoImagen, ImageFormat.Jpeg) surface.Dispose() End Sub End Class
- Marcado como respuesta AlexXaviermm viernes, 13 de noviembre de 2020 12:18
Todas las respuestas
-
tienes que poner un poco mas de codigo para que tengamos una idea de lo que estas haciendo mal cuando dibujas en el control PictureBox solo estas dibujando el fondo del control la propiedad Image del control esta vacio porque no tiene ninguna imagen agregada para lograr lo que quieres tendras que guardar tu dibujo en un formato de imagen cualquiera y cargarla en la propiedad Image de lo contrario siempre te mostrara ese mensaje ya que no hay ninguna imagen en la propiedad .Image
-
Gracias amigo,
Este es el procedimiento con cual dibujo unos rectángulos y líneas, esta imagen que creo es la que quiero salvar en la base de datos, pero sin duda lo que me escribes es lo que sucede, si me ilustras un poco mas te lo agradeceria.
private ografico as Graphics
private oPen as Pen
Private Sub dibujar(ByVal ancho As Integer, alto As Integer)
oGrafico = PictureBox1.CreateGraphics
oGrafico.Clear(Color.White)
oPen = New Pen(Color.Black, 2)
Dim m_texto As New Font("Arial", 10)
oGrafico.DrawLine(oPen, CInt(ancho / 2) + 18, 20, CInt(ancho / 2) + 18, alto + 20)
oGrafico.DrawLine(oPen, CInt(ancho / 2) + 22, 20, CInt(ancho / 2) + 22, alto + 20)
oGrafico.DrawString(txtAlto.Text, m_texto, Brushes.Black, New Rectangle(ancho + 28, (alto / 2) + 4, 50, 135))
oGrafico.DrawString(txtAncho.Text, m_texto, Brushes.Black, New Rectangle(ancho / 2 + 10, 2, 50, 135))
oGrafico.DrawRectangle(oPen, 20, 20, ancho, alto)
oGrafico.DrawRectangle(oPen, 24, 24, ancho - 8, alto - 8)
End Sub -
mira un ejemplo es paresido al tuyo pero este crea una imagen y se la pasa a la clase graphic para que dibuje sobre la imagen despues se la pasa al picturebox para mostrarla y el picturebox la guarda en formato .jpg
Imports System.Drawing Imports System.Drawing.Imaging Imports Microsoft.VisualBasic.FileIO Public Class Form1 Dim surface As Graphics Dim open As Pen Dim gr As Brush Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Variables para almacenar el ancho y el alto del control PictureBox1 Dim ancho, alto As Integer ancho = PictureBox1.Width alto = PictureBox1.Height 'imagen en donde se va a dibujar Dim bmp As New Bitmap(ancho, alto) 'Aqui le decimos a la clase graphic que bamos a dibujar en la imagen bmp surface = Graphics.FromImage(CType(bmp, Image)) surface.Clear(Color.White) open = New Pen(Color.Black, 2) Dim Mfont As New Font("Arial", 20) gr = New SolidBrush(Color.Black) surface.DrawLine(open, CInt(ancho / 2) + 18, 20, CInt(ancho / 2) + 18, alto + 20) surface.DrawLine(open, CInt(ancho / 2) + 22, 20, CInt(ancho / 2) + 22, alto + 20) surface.DrawRectangle(open, 20, 20, ancho, alto) surface.DrawRectangle(open, 24, 24, ancho - 8, alto - 8) surface.DrawString("vb.net 2019", Mfont, gr, New Rectangle(200, 150, ancho, alto)) PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage PictureBox1.Image = bmp 'guardamos la imagen Dim archivoImagen As String = (SpecialDirectories.MyPictures & "\NuevaImagen1.jpg") PictureBox1.Image.Save(archivoImagen, ImageFormat.Jpeg) surface.Dispose() End Sub End Class
- Marcado como respuesta AlexXaviermm viernes, 13 de noviembre de 2020 12:18
-
-
-
Hola AlexXaviermm,
Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado.
Si es necesario, por favor abra un nuevo hilo.
Gracias por usar los foros de MSDN.
Andres Aguilar
____________________________