Vous êtes sur la page 1sur 7

******** ESTRUCTURA DE LA TABLA

CREATE TABLE `productos_imagenes` (


`Cod_Barras` varchar(13) NOT NULL,
`Imagen` mediumblob,
PRIMARY KEY (`Cod_Barras`)
)
lo q yo trat de conseguir es guardar una imagen que se seleccione de algn medio, tipo jpg, gif o png, que achique
la imagen a un tamao predefinible (para que no ocupe mucho espacio) y luego guardarla en la base
en el formulario de abm coloco un picturebox de nombre pbimagen (300 x 220) y debajo un botn seleccionar

*** RUTINA DEL BOTON (CARGO LA IMAGEN DE ALGUN DISCO O ALGO EN EL PICTUREBOX)
Private Sub btnSeleccionarImagen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnSeleccionarImagen.Click
Dim openFileDialog1 As New OpenFileDialog()
openFileDialog1.Filter = "Imgenes |*.jpg; *.png; *.gif"
openFileDialog1.Title = "Seleccione una Imagen"
' Show the Dialog.
' If the user clicked OK in the dialog and
' a .CUR file was selected, open it.
If openFileDialog1.ShowDialog() = DialogResult.OK Then
' Assign the cursor in the Stream to the Form's Cursor property.
Me.pbImagen.ImageLocation = openFileDialog1.FileName
Me.pbImagen.Load()
Else
Me.pbImagen.Image = Nothing
End If
End Sub

******* UTILIZO UNA CLASE IMAGEMANIPULATION (mezcla de cosas encontradas en internet con
algunas modificaciones) DONDE SE ACHICA LA IMAGEN Y DONDE LA CONVIERTO A BYTES P/
GUARDAR Y VICEVERSA
Imports System.Drawing.Imaging
Public Class ImageManipulation
Public Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
Dim j As Integer
Dim encoders As ImageCodecInfo()
encoders = ImageCodecInfo.GetImageEncoders()
For j = 0 To encoders.Length
If encoders(j).MimeType = mimeType Then
Return encoders(j)
End If
Next j
Return Nothing
End Function
Public Shared Sub SaveJPGWithCompressionSetting(ByVal image As Image, ByVal szFileName As String, ByVal lCompression As
Long)
Dim eps As EncoderParameters = New EncoderParameters(1)
eps.Param(0) = New EncoderParameter(Encoder.Quality, lCompression)
Dim ici As ImageCodecInfo = GetEncoderInfo("image/jpeg")
Try
image.Save(szFileName, ici, eps)
Catch exc As Exception
MessageBox.Show(exc, " Atencin !", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Public Shared Function Image2Bytes(ByVal img As Image) As Byte()


Dim sTemp As String = System.IO.Path.GetTempFileName()
Dim SourceToImage As New Bitmap(img)
Dim NeedsHorizontalCrop As Boolean = True
Dim NeedsVerticalCrop As Boolean = False
'Determina si la imagen es Landscape o Portrait
If SourceToImage.Height > SourceToImage.Width Then
NeedsHorizontalCrop = False
NeedsVerticalCrop = True
End If
'Determina si la imagen excede el ancho del PictureBox
If SourceToImage.Width < 300 Then
NeedsHorizontalCrop = False
If SourceToImage.Height > 220 Then
NeedsVerticalCrop = True
End If
End If
'Calcula el Factor de Ajuste
Dim scale_factor As Single = 1
If SourceToImage.Width > 0 Then
If NeedsHorizontalCrop = True Then
' Obtiene el Factor de Ajuste
scale_factor = 300 / SourceToImage.Width
End If
End If
If SourceToImage.Height > 0 Then
If NeedsVerticalCrop = True Then

' Obtiene el Factor de Ajuste


scale_factor = 220 / SourceToImage.Height
End If
End If
' Generar un bitmap tmp para el resultado. Ajuste Proporcional
Dim DestTmpImage As New Bitmap( _
CInt(SourceToImage.Width * scale_factor), _
CInt(SourceToImage.Height * scale_factor))
' Generar un objeto Grfico para el bitmap tmp resultante
Dim gr_desttmp As Graphics = Graphics.FromImage(DestTmpImage)
' Copiar la imagen origen al bitmap tmp destino
gr_desttmp.DrawImage(SourceToImage, 0, 0, _
DestTmpImage.Width, _
DestTmpImage.Height)
'Comprime y Guarda un Archivo Temporal para calcular su peso en Kb
Try
ImageManipulation.SaveJPGWithCompressionSetting(DestTmpImage, sTemp, 70)
Catch exc As Exception
MessageBox.Show(exc, " Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Dim fs As System.IO.FileStream
Dim FileSize As UInt32

fs = New System.IO.FileStream(sTemp, System.IO.FileMode.Open, System.IO.FileAccess.Read)


FileSize = fs.Length
Dim rawData() As Byte
rawData = New Byte(FileSize) {}

fs.Read(rawData, 0, FileSize)
fs.Close()
Return rawData
End Function
Public Shared Function Bytes2Image(ByVal bytes() As Byte) As Image
If bytes Is Nothing Then Return Nothing
'
Dim ms As New System.IO.MemoryStream(bytes)
Dim bm As Bitmap = Nothing
Try
bm = New Bitmap(ms)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
Return bm
End Function
End Class

********* RUTINA PARA GUARDAR EN LA BASE


Private Sub Guardar()
Try
Mysql.myCommand.CommandText = "begin"
Mysql.myCommand.ExecuteNonQuery()
' Dim x As New S
sql = "insert into productos_imagenes values ('" & Me.txtCodBarras.Text & "', ?Image )"
ImageManipulation.Image2Bytes(pbImagen.Image)
Mysql.myCommand.CommandText = sql

'Mysql.myCommand.Parameters.Add("?Image", Me.rawData)
Mysql.myCommand.Parameters.Add("?Image", ImageManipulation.Image2Bytes(pbImagen.Image))
'Mysql.myCommand.Parameters.Add("?Image", Me.rawData)
Mysql.myCommand.ExecuteNonQuery()
Mysql.myCommand.Parameters.Clear()
MessageBox.Show("El Producto se ha guardado con xito", "PRODUCTO GUARDADO!", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation)
Catch ex As Exception
'Panel.registrarError(ex.Message & "(ProductosAm/GuardaNuevo)")
'Respuesta = "Error al guardar, Reintente - \n" & ex.Message
Mysql.myCommand.CommandText = "rollback"
Mysql.myCommand.ExecuteNonQuery()
MessageBox.Show("", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
Mysql.myCommand.CommandText = "commit"
Mysql.myCommand.ExecuteNonQuery()
End Try
End Sub

****** RUTINA PARA LEER LA IMAGEN DE LA BASE Y MOSTRARLA EN EL PICTUREBOX


private Sub CargarImagen(CodBarras)
sql = "select * from productos_imagenes where Cod_Barras = " & Me.txtCodBarras.Text
Mysql.myCommand.CommandText = sql
Mysql.myReader = Mysql.myCommand.ExecuteReader
If Mysql.myReader.HasRows Then
Mysql.myReader.Read()
Me.pbImagen.Image = ImageManipulation.Bytes2Image(Mysql.myReader("imagen"))

Mysql.myReader.Close()
End If
Mysql.myReader.Close()

end sub

******* CON ESTO LOGRO GUARDAR IMGENES DE 300 X 220 INDEPENDIENTEMENTE DEL TAMAO
DE LA IMAGEN DE ORIGEN PARA Q NO SEAN MUY PESADAS, EL TAMAO FINAL SE PUEDE
MODIFICAR EN LA CLASE IMAGEMANIPULATION

EN EL CASO DE UNA MODIFICACIN, EN MI CASO LO QUE HAGO ES BORRAR ESE REGISTRO Y


REINSERTARLO CON LA NUEVA IMAGEN.

ESPERO QUE LES SIRVA, FUNCIONA A LA PERFECCIN, LA IDEA ES DEVOLVER UN POQUITO DE


TANTAS AYUDAS RECIBIDAS. SALUDOS.

Vous aimerez peut-être aussi