Como cargar una imagen o archivo binario desde una URL

He estado revisando los foros públicos y me he encontrado con esta habitual pregunta, para centralizar un poco esta respuesta, es que he agregado estas funciones en este espacio.

La siguiente es una Función que Lee una URL y devuelve un Stream con la Imagen o el código fuente de la URL, obviamente si es una imágen devuelve el binario de esa imagen.


Private Function getUrl(ByVal URL As String, _
       ByRef elError As String) As IO.Stream

    Dim strResp As String = “”
    Try

        Dim request As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)

        Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)

        getUrl = response.GetResponseStream()

    Catch ex As Exception
        elError = ex.ToString
    End Try

End Function


Para hacer funcionar la función anterior, deberán crear un PictureBox llamado “picImagen” y Listo.


    Dim StreamImagen As IO.Stream, _
        elError As String = “”

    StreamImagen = getUrl(txtURL.Text, elError)
    If elError = “” Then
        picImagen.Image = System.Drawing.Image.FromStream(StreamImagen)
    Else
        MsgBox(elError)
    End If

Saludos,
Jhonny Vargas P.

Imagenes Multi Tif, JPGs, GIFs, etc.. en .NET

Ayer necesitaba convertir un multi tiff (multiples imágenes en un solo archivo) a varios JPGs o GIFs… ufff un caos, ya que directamente al cargar un Multitiff y realizar la conversión a jpg o gif, solo me tomaba la primera imagen del multi tiff… buscando por internet (san google) encontré la información en varias partes, por eso mismo cree una rutina en donde saqué un poco de código de un lado y de otros lados.
 
Por si alguien en algún momento lo llega a utilizar consuntar aqui.
 
Antiguamente para Visual Basic 6.0 (y gracias a mi jefe) utilizaba la herramienta Lead Tools, en realidad solo la utilicé para visualizar imagenes multi tiff  y hacer un par de cosas, transformaciones, etc… mi jefe usaba bastante esta herramienta, la cual llegaba hasta el reconocimiento de letras y números, bastante buena… ahora con .NET solo se requieren un par de elementos y listo… ya estaba pensando en utilizar LeadTools en .NET para convertir el tif a gif, me ahorré de instalar un monton de librerías.
 
Saludos,
Jhonny Vargas P.

Como puedo convertir un Multi TIF a otro tipo de imagen (JPG, GIF, etc)

Les adjunto una pequeña función que permite convertir de un multi tif a otro tipo de imagen, ya sea JPG, GIF, BMP, etc..

 

La idea es convertir varias imágenes que contiene el multi tiff tomando cada una de ellas y llevarlas al formato deseado.

 

Espero les sirva.

 

 

    Public Function ConvertTifTo(ByVal ArchivoTIF As String, _
                                 ByVal ArchivoIMG As String, _
                                 ByVal Tipo As ImageFormat) As String

 

        Dim dimension As FrameDimension, _
            Imagen As Image, _
            Item As Integer

 

        Try

 

            ‘Se carga el archivo TIF a un Image

            Imagen = System.Drawing.Image.FromFile(ArchivoTIF)
            dimension = New FrameDimension(Imagen.FrameDimensionsList(0))

 


            ‘Se realiza un ciclo para ver todas las imagenes que contiene la dimensión

            For Item = 0 To Imagen.GetFrameCount(dimension) – 1

 

                ‘Se activa la imagen del multitif en Image

                Imagen.SelectActiveFrame(dimension, Item)

 

                ‘Se Graba la imagen con el mismo nombre del multitiff

                ‘más correlativo más la extensión del documento

                Imagen.Save(ArchivoIMG & “_” & Item & “.” & Tipo.ToString, Tipo)

            Next

 


            ‘Se liberan los recursos
            Imagen.Dispose()
            Imagen = Nothing

 

            Return “”

 

        Catch ex As Exception
            Return ex.Message

 

        End Try

 

    End Function

 

 

 

Cualquier comentario bienvenido sea.

 

Saludos,

Jhonny Vargas P.

 

Como puedo ejecutar consultas SQL de una base datos.

Esta es una típica pregunta de los usuarios que normalmente se inician en cualquier lenguaje de programación “Como puedo ejecutar consultas SQL de una base datos”, existen muchos sitios que contienen información mucho más acabada en el tema, pero quiero exponer una forma simple y que sea útil para cualquier persona con mínimos conocimientos.

 

Antes que nada revisar los strings de conexión, para esto les recomiendo la biblia de ADO de Carl Prothman http://www.carlprothman.net/Default.aspx?tabid=81

 

Funciones para cualquier tipo de base de datos excepto para SQL Server, ya que utilizar otros componentes de ADO especiales para este motor de base de datos.

 

   ‘Esta función nos permite ejecutar una consulta SQL sin devolver Resultado.

    Sub EjecutarQuerySinResultado(ByVal Query As String)

 

        ‘Obtenemos el String de conexión directamente de un archivo de configuración

        Dim ConString As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“BaseDatos”)

 

        Try
            Dim objConnection As New OleDb.OleDbConnection(ConString)
            objConnection.Open()

 

            Dim objCommand As New OleDb.OleDbCommand(Query, objConnection)

 

            objCommand.ExecuteNonQuery()
            objCommand = Nothing

 

            objConnection.Close()
            objConnection = Nothing

 

        Catch ex As Exception
            MsgBox(ex)
        End Try

 

    End Sub

 

    ‘Ejecutar Query o Consulta devolviendo un Dataset

    Function EjecutarQuery(ByVal Query As String) As DataSet

 

        Dim ConString As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“BaseDatos”)

 

        Dim objDataSet As New DataSet

 

        Try
            Dim
objConnection As New OleDb.OleDbConnection(ConString)
            objConnection.Open()

 

            Dim objCommand As New OleDb.OleDbCommand(Query, objConnection), _
                objDataAdapter As New OleDb.OleDbDataAdapter(objCommand)

 

            objDataAdapter.Fill(objDataSet, “tabla”)
            objDataAdapter = Nothing

 

            objCommand = Nothing

 

            objConnection.Close()
            objConnection = Nothing

 

        Catch ex As Exception

 

        End Try

 

        Return objDataSet

 

    End Function

 

 

Para SQL Server se deberían utilizar las siguientes funciones

 


    Sub EjecutarQuerySinResultado(ByVal Query As String)

 

        ‘Obtenemos el String de conexión directamente de un archivo de configuración

        Dim ConString As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“BaseDatos”)

 

        Try
            Dim objConnection As New SqlConnection(ConString)
            objConnection.Open()

 

            Dim objCommand As New SqlCommand(Query, objConnection)

 

            objCommand.ExecuteNonQuery()
            objCommand = Nothing

 

            objConnection.Close()
            objConnection = Nothing

 

        Catch ex As Exception
            MsgBox(ex)
        End Try

 

    End Sub

 

    ‘Ejecutar Query o Consulta devolviendo un Dataset

    Function EjecutarQuery(ByVal Query As String) As DataSet

 

        Dim ConString As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“BaseDatos”)

 

        Dim objDataSet As New DataSet

 

        Try
            Dim
objConnection As New SqlConnection(ConString)
            objConnection.Open()

 

            Dim objCommand As New SqlCommand(Query, objConnection), _
                objDataAdapter As New SqlDataAdapter(objCommand)

 

            objDataAdapter.Fill(objDataSet, “tabla”)
            objDataAdapter = Nothing

 

            objCommand = Nothing

 

            objConnection.Close()
            objConnection = Nothing

 

        Catch ex As Exception

 

        End Try

 

        Return objDataSet

 

    End Function

 

Saludos,

Jhonny Vargas P.

Multivac v/s Encarta?

Desde hace un tiempo que he estado leyendo algunas historias que ha escrito Isaac Asimov, bastante buenas muy futuristas, de robótica… genial 100% recomendable, aparte que son entretenidas y del tiempo en que fueron escritas te hacen pensar la mente que tenía este escritor.

 

Bueno que tiene que ver multivac con encarta, antes que nada Multivac para Asimov o para las historias que escribió, era una gran computadora que respondía todo lo que cualquier persona quisiera saber, desde lo más esencial hasta lo más complejo que uno se pueda imaginar, Multivac era quien juzgaba a las personas por los crímenes que cometía, ya que poseía un gran intelecto y una objetividad mejor que un juez humano.

 

Insisto que tiene que ver multivac con encarta XD, hace unas semanas me enteré de la existencia de un correo messenger llamado encarta@conversagent.com, lo agregué y me encontré con que me respondía todo lo que yo escribía… de lo más esencial hasta lo más complejo, obviamente Encarta no posee la habilidad que alguna vez soñó Asimov, pero sin duda se asemejan bastante.

 

Los invito a incorporar y jugar un poco con este gran invento encarta@conversagent.com

 

Saludos,

Jhonny Vargas P.

Santiago de Chile

 

Muere Lentamente.

MUERE LENTAMENTE…

 

Muere lentamente quien no viaja,
quien no lee,
quien no escucha música,
quien no halla encanto en sí mismo.

 

Muere lentamente
quien destruye su amor propio;
quien no se deja ayudar.

 

Muere lentamente
quien se transforma en esclavo del hábito,
repitiendo todos los días los mismos senderos;
quien no cambia de rutina,
no se arriesga a vestir un nuevo color
o no conversa con quien desconoce.

 

Muere lentamente
quien evita una pasión
y su remolino de emociones;
aquellas que rescatan el brillo de los ojos
y los corazones decaídos.

 

Muere lentamente
quien no cambia la vida cuando está insatisfecho
con su trabajo, o su amor;
quien no arriesga lo seguro por lo incierto
para ir tras de un sueño;
quien no se permite,
por lo menos una vez en la vida,
huir de los consejos sensatos…

 

¡ Vive hoy !
¡ Arriesga hoy !
¡ Haz hoy !
¡ No te dejes morir lentamente !
! NO TE OLVIDES DE SER FELIZ !

 

Pablo Neruda.

 

Hace algunos días un amigo me mandó este pequeño texto… que no lo conocía (como es posible no conocer los textos de Pablo Neruda nuestro gran poeta de todos los tiempos!!!… que ignorancia la mia)…

 

Solo la coloco para compartirla con todos… si es que alguien alguna vez la lee.

 

Saludos,

Jhonny Vargas P.

Como ejecutar un DTS desde programa.

Algunas veces uno requiere ejecutar DTS mediante programa, necesariamente debes instalar componentes apartes que lo único que logran es tener que incluirlos al momentos de llevarlos a producción u otro equipo de un usuario.

 

HAy una solución muy simple, dejar que SQL Server mediante un sp ejecute dicho DTS y no directamente desde programa.

 

Espero les siva dicho ejemplo:

 

CREATE PROCEDURE sp_EjecutarDTS(@Paquete varchar(500) )
As
   declare @Sql varchar(8000)
   Set @Sql = ‘dtsrun /s (local) /e /n ‘ + @Paquete
   exec master.dbo.xp_cmdshell @Sql
Go

Como utilizar un Servicio Web de .NET en ASP tradicional o Visual Basic 6.0

Hace un tiempo me encontré con este problema, necesitaba ejecutar o usar un servicio web desde una aplicación ASP tradicional… pensé en un momento enviar los datos vía POST o GET a una página ASPX (ASP.NET) y desde ahi gatillar el servicio correspondiente, pero quería evitar este salto.

 

Pude hacerlo mediante Microsoft SOAP 3.0, por lo tanto antes de ejecutar la aplicación les recomiendo bajar dicho componente del siguiente link:


 

Ejemplo:

 

 

‘Función ASP tradicional que utiliza el Servicio Web.

Function EjecutarSW(ByVal A, ByVal B)

 

   Dim oSOAPClient, Resultado, ServicioWeb

   ServicioWeb = “http://localhost/Prueba/ServicioPrueba.asmx?wsdl”

 

   Set oSOAPClient = Server.CreateObject(“MSSOAP.SoapClient30”)

 

   oSOAPClient.ClientProperty(“ServerHTTPRequest”) = True
   oSOAPClient.mssoapinit ServicioWeb

 

   On Error Resume Next
   Resultado = oSOAPClient.Sumar(CInt(A), CInt(B))

 

   If Err.number<>0 Then
       EjecutarSW = “ERROR”
   Else
       EjecutarSW = Resultado
   End If

 

  Set oSOAPClient = Nothing

 

End Function

 

Como convertir números a letras

He visto muchas veces esta pregunta en los foros, si mal no recuerdo en el año 2000 alguién que no recuerdo su nombre envío el siguiente algoritmo para VB 6.0 para realizar dicha conversión…. ha sido unos de los mejores que he visto.. a continuación se los adjunto, espero que también les puedan servir.

 

Sirve tanto para VB 6.0, como para Visual Basic .NET

 

Public Function Num2Text(ByVal value As Double) As String
    Select Case
value
        Case 0 : Num2Text = “CERO”
        Case 1 : Num2Text = “UN”
        Case 2 : Num2Text = “DOS”
        Case 3 : Num2Text = “TRES”
        Case 4 : Num2Text = “CUATRO”
        Case 5 : Num2Text = “CINCO”
        Case 6 : Num2Text = “SEIS”
        Case 7 : Num2Text = “SIETE”
        Case 8 : Num2Text = “OCHO”
        Case 9 : Num2Text = “NUEVE”
        Case 10 : Num2Text = “DIEZ”
        Case 11 : Num2Text = “ONCE”
        Case 12 : Num2Text = “DOCE”
        Case 13 : Num2Text = “TRECE”
        Case 14 : Num2Text = “CATORCE”
        Case 15 : Num2Text = “QUINCE”
        Case Is < 20 : Num2Text = “DIECI” & Num2Text(value – 10)
        Case 20 : Num2Text = “VEINTE”
        Case Is < 30 : Num2Text = “VEINTI” & Num2Text(value – 20)
        Case 30 : Num2Text = “TREINTA”
        Case 40 : Num2Text = “CUARENTA”
        Case 50 : Num2Text = “CINCUENTA”
        Case 60 : Num2Text = “SESENTA”
        Case 70 : Num2Text = “SETENTA”
        Case 80 : Num2Text = “OCHENTA”
        Case 90 : Num2Text = “NOVENTA”
        Case Is < 100 : Num2Text = Num2Text(Int(value \ 10) * 10) & ” Y ” & Num2Text(value Mod 10)
        Case 100 : Num2Text = “CIEN”
        Case Is < 200 : Num2Text = “CIENTO ” & Num2Text(value – 100)
        Case 200, 300, 400, 600, 800 : Num2Text = Num2Text(Int(value \ 100)) & “CIENTOS”
        Case 500 : Num2Text = “QUINIENTOS”
        Case 700 : Num2Text = “SETECIENTOS”
        Case 900 : Num2Text = “NOVECIENTOS”
        Case Is < 1000 : Num2Text = Num2Text(Int(value \ 100) * 100) & ” ” & Num2Text(value Mod 100)
        Case 1000 : Num2Text = “MIL”
        Case Is < 2000 : Num2Text = “MIL ” & Num2Text(value Mod 1000)
        Case Is < 1000000 : Num2Text = Num2Text(Int(value \ 1000)) & ” MIL”
            If value Mod 1000 Then Num2Text = Num2Text & ” ” & Num2Text(value Mod 1000)
        Case 1000000 : Num2Text = “UN MILLON”
        Case Is < 2000000 : Num2Text = “UN MILLON ” & Num2Text(value Mod 1000000)
        Case Is < 1000000000000.0# : Num2Text = Num2Text(Int(value / 1000000)) & ” MILLONES “
            If (value – Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & ” ” & Num2Text(value – Int(value / 1000000) * 1000000)
        Case 1000000000000.0# : Num2Text = “UN BILLON”
        Case Is < 2000000000000.0# : Num2Text = “UN BILLON ” & Num2Text(value – Int(value / 1000000000000.0#) * 1000000000000.0#)
        Case Else : Num2Text = Num2Text(Int(value / 1000000000000.0#)) & ” BILLONES”
            If (value – Int(value / 1000000000000.0#) * 1000000000000.0#) Then Num2Text = Num2Text & ” ” & Num2Text(value – Int(value / 1000000000000.0#) * 1000000000000.0#)
    End Select


End Function

Como cambiar de usuario y acceder a otros recursos en una página WEB.

Muchas veces necesitamos acceder a recursos que lamentablemente nuestro usuario o el usuario que estamos corriendo la aplicación no tiene permisos o privilegios como para llegar a él.


Para las aplicaciones web, la mayoría de las veces los usuarios ASPNET, IUSR_nombreservidor e IWAM_nombreservidor son los que el IIS utiliza (o nosotros mismos configuramos) para correr la aplicación.


A continuación detallo una solución que una vez me entregó Leonardo Garcés cuando necesitaba acceder a un servidor de imágenes en donde no tenía como llegar a dichos archivos.

 


 

Clase Recurso:

 

Imports System.Security.Principal

 

Public Class Recurso

 

    Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
    Dim LOGON32_PROVIDER_DEFAULT As Integer = 0

 

    Dim impersonationContext As WindowsImpersonationContext

 

    Declare Function LogonUserA Lib “advapi32.dll” (ByVal lpszUsername As String, _
                            ByVal lpszDomain As String, _
                            ByVal lpszPassword As String, _
                            ByVal dwLogonType As Integer, _
                            ByVal dwLogonProvider As Integer, _
                            ByRef phToken As IntPtr) As Integer

 

    Declare Auto Function DuplicateToken Lib “advapi32.dll” ( _
                            ByVal ExistingTokenHandle As IntPtr, _
                            ByVal ImpersonationLevel As Integer, _
                            ByRef DuplicateTokenHandle As IntPtr) As Integer

 

    Declare Auto Function RevertToSelf Lib “advapi32.dll” () As Long
    Declare Auto Function
CloseHandle Lib “kernel32.dll” (ByVal handle As IntPtr) As Long

 

    Public Function impersonateValidUser(ByVal Usuario As String, _
                                          ByVal Dominio As String, _
                                          ByVal Clave As String) As Boolean

 

        Dim tempWindowsIdentity As WindowsIdentity
        Dim token As IntPtr = IntPtr.Zero
        Dim tokenDuplicate As IntPtr = IntPtr.Zero
        impersonateValidUser = False

 

        If RevertToSelf() Then
            If LogonUserA(Usuario, Dominio, Clave, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
                If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
                    tempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
                    impersonationContext = tempWindowsIdentity.Impersonate()
                    If Not impersonationContext Is Nothing Then
                        impersonateValidUser = True
                    End If
                End If
            End If
        End If
        If Not
tokenDuplicate.Equals(IntPtr.Zero) Then
            CloseHandle(tokenDuplicate)
        End If
        If No
t token.Equals(IntPtr.Zero) Then
            CloseHandle(token)
        End If
    End Function

 

    Public Sub undoImpersonation()
        impersonationContext.Undo()
    End Sub

 

End Class

 

 

Ahora adjunto un ejemplo de como utilizarla, Se rescata el Usuario, el Dominio y la Clave de un archivo de configuración.


Dim objRecurso As New Recurso, _
    Usuario As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“Usuario”), _
    Dominio As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“Dominio”), _
    Clave As String = System.Configuration.ConfigurationSettings.AppSettings.Get(“Clave”)

If objRecurso.impersonateValidUser(Usuario, Dominio, Clave) Then
    MyFileStream = New FileStream(“\\Servidor\Carpeta\Imagen.tif”, FileMode.Open, FileAccess.Read)
    FileSize = MyFileStream.Length
    Dim Buffer(CInt(FileSize)) As Byte
    MyFileStream.Read(Buffer, 0, CInt(FileSize))
    MyFileStream.Close()
    objRecurso.undoImpersonation()
    ‘Más código…
Else
    ‘No se pudo cambiar de Usuario
End If
objRecurso = Nothing

 

Fin 😉