Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema al Reemplazar Imagen Por Otra

Estas en el tema de Problema al Reemplazar Imagen Por Otra en el foro de .NET en Foros del Web. Hola a Todos tengo la siguiente consulta q hasta ahora no lo puedo resolver tengo un mantenimiento en donde seleccione una imagen a partir de ...
  #1 (permalink)  
Antiguo 24/02/2009, 09:33
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
De acuerdo Problema al Reemplazar Imagen Por Otra

Hola a Todos tengo la siguiente consulta q hasta ahora no lo puedo resolver
tengo un mantenimiento en donde seleccione una imagen a partir de una ruta especifica guardo el nombre de la ruta en mi bd de SQL Server cuando busco el registro lo encuentra exitosamente y lo muestra. El problema surge cuando le doy modificar al principio pensaba porq jalaba la imagen con la ruta tomada
pbx_foto.image=image.fromfile(ruta)
lo cambie por
pbx_foto.image=new system.drawing.bitmap(ruta)
lo cual me genera exitosamente la imagen
pero igual al tratar de seleccionar la otra imagen de otra ruta y tratar de reemplazar la imagen de la ruta actual por la otra me dice:

q el proceso no puede obtener acceso al archivo ya q esta siendo utilizado por otro proceso.

lo q quiero es q cuando seleccione la imagen pueda reemplazarla

el codigo es el siguiente

Variables Globales
Dim Origen as String,Destino as String,Temp as String

' Procedimiento Global para Llamar a una Imagen
Código PHP:
    Public Sub BuscarFoto(ByVal PbFoto As PictureBox)
        
Dim OpenFile As New OpenFileDialog
        Dim NomImg 
""
        
Try
            
With OpenFile
                
.InitialDirectory "D:\Arellano\"              ' Inicializamos la Ruta a Buscar
                ' Criterios a Filtrar Para la Busqueda de Foto
                .Filter = "
Imágenes JPG (*.jpg)|*.jpg" + _
                    "
Imagenes Fireworks (*.png)|*.png|" + _
                    "
Mapas de bits (*.bmp)|*.bmp|" + _
                    "
Todos Los Archivos|*.*"
                .Title = "
Seleccionar foto"                     ' Titulo a Mostrar
                If .ShowDialog = DialogResult.OK Then                         ' Preguntamos si es q abrio y lo cerro
                    NomImg = .FileName                          ' Sacamos la ruta de la imagen
                    If System.IO.File.Exists(NomImg) Then       ' Preguntamos si existe tal ruta
                        Origen = NomImg ' Devolvemos la ruta de la imagen
                    Else
                        MsgBox("
La Ruta Seleccionada no existe o la imagen es incorrecta", 48)
                    End If
                    Exit Sub
                Else
                    Origen = ""
                End If
            End With
        Catch ex As Exception
            MsgBox(ex.Message, 48)
        End Try
    End Sub 
' Procedimiento para Guardar Foto en una Ruta Especifica
Código PHP:
    Public Sub GuardarFoto(ByVal Org$, ByVal Des$)
        Try
            
System.IO.File.Copy(OrgDesTrue)       Copiamos la Imagen a Mostrar si existe la reemplaza
        
Catch ex As Exception
            MsgBox
(ex.Message48)
        
End Try

    
End Sub 
' Aqui es en donde en un boton llamo a buscarfoto
Código PHP:
BuscarFoto(Me.Pbx_Foto' Buscamos La Foto

        If Not Origen.Trim = "" Then    ' 
Preguntamos si nos devuelve cadena vacia

            Pbx_Foto
.Image = New System.Drawing.Bitmap(Origen)  ' Creamos una imagen binaria a partir de una ruta
            Pbx_Foto.SizeMode = PictureBoxSizeMode.StretchImage ' 
Adjuntamos la Imagen al Tamaño del Picturebox en Caso Sea Grande
            Destino 
"D:\Imagenes\img01.jpg" ' Creamos el Destino donde se guardara la imagen por ejemplo

        Else

            ' 
En Caso devuelva Origen Vacion el Destino Debe Ser Vacio ya q si no agregaremos una ruta sin archivo
            Pbx_Foto
.Image Nothing    ' Limpiamos el PictureBox
            Origen = ""     ' 
Liberamos Variables
            Destino 
""     Liberamos Variables

        End 
If 
cuando muestro el registro
Código PHP:
                    If Not Dt.Rows(0)(17).ToString "" Then  Ruta de la Imagen en SQL Server
                        Temp 
Dt.Rows(0)(17).ToString
                        Pbx_Foto
.Image = New System.Drawing.Bitmap(Temp)
                    
End If 
boton grabar
Código PHP:
' Verificamos si hemos agregado una nueva imagen o modificado
                    If Destino.Trim = "" Then Destino = Temp

Si el Origen es Vacio es Porq no hemos agregado una imagen y no guarda
If Not Origen "" Then
                            GuardarFoto
(OrigenDestino)
                        
End If
Registrar() 

q podria estar mal y porq no puedo reemplazar la imagen ayuda por favor
  #2 (permalink)  
Antiguo 24/02/2009, 10:21
 
Fecha de Ingreso: julio-2008
Mensajes: 44
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema al Reemplazar Imagen Por Otra

no entiendo muy bien tu problema pero te dejo el codigo de un programa que yo hice y carga las imagenes y tambien me las remplasa:


Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim cn As SqlClient.SqlConnection
Public Const strConn As String = "Password= ; user id=;data source=;persist security info=True;initial catalog="
Dim haveData81 As Boolean = False : Dim haveData82 As Boolean = False
Dim Conn As SqlConnection = New SqlConnection
Dim comAdd As SqlCommand
Dim da As SqlDataAdapter
Dim ds As DataSet = New DataSet

#Region " Windows Form Designer generated code "

Public Sub New()
MyBase.New()

'This call is required by the Windows Form Designer.
InitializeComponent()

'Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Display Picture File
OpenFileDialog1.InitialDirectory = "ruta de las imagenes"
OpenFileDialog1.DefaultExt = ".Jpg"
OpenFileDialog1.Filter = "Jpg Files(*.jpg)|*.jpg|Bmp Files(*.bmp)|*.bmp|Gif Files(*.gif)|*.gif"
'OpenFileDialog1.Filter = "Bmp Files(*.bmp)|*.bmp|Gif Files(*.gif)|*.gif|Jpg Files(*.jpg)|*.jpg"
OpenFileDialog1.ShowDialog()
PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
TextBox1.Text = "" + OpenFileDialog1.FileName.Substring(CInt(OpenFileDi alog1.FileName.LastIndexOf("\")) + 1)
'MsgBox(CInt(OpenFileDialog1.FileName.LastIndexOf( "\")))
End Sub

'Add Button
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' To Insert Image
Dim st As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
Dim s As String = TextBox1.Text
Dim mbr As BinaryReader = New BinaryReader(st)
Dim buffer(st.Length) As Byte
mbr.Read(buffer, 0, CInt(st.Length))
st.Close()
InsertImage(buffer, s)
End Sub

'Function For Inserting in the Procdeure in the Database
Public Function InsertImage(ByRef buffer, ByVal str)
cn = New SqlClient.SqlConnection(SqlConnection1.ConnectionS tring)
cn.Open()
Dim cmd As New SqlClient.SqlCommand("sp_InsertPhoto", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text
cmd.Parameters.Add("@image", SqlDbType.Image).Value = buffer
cmd.ExecuteNonQuery()
MsgBox("Image inserted")
cn.Close()
End Function

'Function to Display Image
Private Sub ShowImage(ByVal s As String)
Dim i As Integer
Dim str As String
cn = New SqlClient.SqlConnection(SqlConnection1.ConnectionS tring)
cn.Open()

For i = 0 To getCountImage() - 1
str = "SELECT ImgObjeto FROM Table_1 WHERE (name='" & getNameImage(i) & "')"
Dim cmd As New SqlClient.SqlCommand(str, cn)
TextBox1.Text = s
Dim b() As Byte
b = cmd.ExecuteScalar()
If (b.Length > 0) Then
Dim stream As New MemoryStream(b, True)
stream.Write(b, 0, b.Length)
DrawToScale(New Bitmap(stream), i)
stream.Close()
End If
Next

cn.Close()
End Sub
Private Sub ShowImage(ByVal s As String, ByVal imgIndex As Integer)
Me.ListView1.LargeImageList = ImageList1
Me.ListView1.View = View.LargeIcon

Dim osItem As ListViewItem.ListViewSubItem
Dim oitem As ListViewItem = New ListViewItem
oitem.Text = s

osItem = New ListViewItem.ListViewSubItem
osItem.Text = s

oitem.SubItems.Add(osItem)

osItem = New ListViewItem.ListViewSubItem
osItem.Text = s & s
oitem.SubItems.Add(osItem)
If imgIndex >= 0 Then
With ListView1
.Items.Add(oitem)
End With
oitem.ImageIndex = imgIndex
End If
End Sub
Private Function getCountImage() As Integer
Dim sqlgetGroup As String
Dim i As Integer

With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
If haveData81 = True Then
ds.Tables("cntPicture").Clear()
End If

sqlgetGroup = "SELECT COUNT(*) AS cntPicture"
sqlgetGroup &= " FROM Table_1"
'sqlgetGroup &= " FROM photos1"

da = New SqlDataAdapter(sqlgetGroup, Conn)
da.Fill(ds, "cntPicture")

If ds.Tables("cntPicture").Rows.Count <> 0 Then
haveData81 = True
Return CInt(ds.Tables("cntPicture").Rows.Item(0).ItemArra y.GetValue(0))
Else
Return 0
haveData81 = False
End If

End Function
Private Function getNameImage(ByVal imgNumber As Integer) As String
Dim sqlgetName As String
Dim i As Integer

With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
If haveData82 = True Then
ds.Tables("PicName").Clear()
End If
sqlgetName = "SELECT ImgObjeto FROM Table_1"

da = New SqlDataAdapter(sqlgetName, Conn)
da.Fill(ds, "PicName")

If ds.Tables("PicName").Rows.Count <> 0 Then
haveData82 = True
Return CStr(ds.Tables("PicName").Rows.Item(imgNumber).Ite mArray.GetValue(0))
Else
Return 0
haveData82 = False
End If

End Function
'Function to Create Instance For the Image From the Buffer
Private Sub DrawToScale(ByVal bmp As Image, ByVal imgindex As Integer)
PictureBox1.Image = New Bitmap(bmp)
ImageList1.Images.Add(New Bitmap(bmp))

Me.ListView1.LargeImageList = ImageList1
Me.ListView1.View = View.LargeIcon

Dim osItem As ListViewItem.ListViewSubItem
Dim oitem As ListViewItem = New ListViewItem
oitem.Text = "MainDetail"
osItem = New ListViewItem.ListViewSubItem
osItem.Text = "subDetail"
oitem.SubItems.Add(osItem)
ListView1.Items.Add(oitem)
oitem.ImageIndex = imgindex

End Sub

'Show Button
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim i As String
ListView1.Items.Clear()
i = "test Show Image"
ShowImage(i)
End Sub

'Exit Button
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.Dispose()
End Sub

'Delete Button
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
cn = New SqlClient.SqlConnection(SqlConnection1.ConnectionS tring)
cn.Open()
Dim s As String = InputBox("Enter name to delete")
Dim cmd As New SqlClient.SqlCommand("delete from Table_1 where name='" & s & "'", cn)
cmd.ExecuteNonQuery()
MsgBox("Image deleted")
cn.Close()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ShowImage("aaa", 0)
' ShowImage("bbb", 1)
' ShowImage("ccc", 3)
'RefreshList()
MessageBox.Show("All Image=" & getCountImage())
ImageList1.Images.Clear()



esperoq ue te sirva este codigo ahora solo trata de decifrar que es lo que nesecitas
  #3 (permalink)  
Antiguo 24/02/2009, 10:55
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Problema al Reemplazar Imagen Por Otra

No yo no me referia ha guardar la imagen en binario
lo q yo me refiero es q si digamos tengo un registro ya gurdado en el campo foto de sql guarda la ruta de la imagen y no el binario
es decir "D:\Imagenes\IMG01.jpg" por ejemplo

y si lo quiero reemplazar busco el archivo de la imagen
donde me genera otra ruta por ejemplo "D:\Abc.jpg" hasta ahi Ok
el problema es q cuando le doy modificar me guarda la ruta en la BD
pero no me reemplaza la imagen q tengo en "D:\Imagenes\IMG01.jpg" por la nueva q esta en "D:\Abc.jpg" pues me dice q se encuentra en uso la ruta "D:\Imagenes\IMG01.jpg" y no puedo reemplazarlo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:21.