elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5  (Leído 3,496 veces)
juanedwin

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« en: 18 Enero 2022, 22:03 pm »

saludos, tengo un archivo de imagen lo cargo en un picturebox o un control image y tengo unos datos en un textox (cadena de texto), quisiera poder de alguna manera exportarlo esos 2 componentes imagen y texto en un archivo, y de igual manera hacerlo a la inversa coger ese archivo exportado y volver a su posicion inicial es decir cargar la imagen en el picturebox  y el texto al textbox. saludos


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.267


Ver Perfil
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #1 en: 19 Enero 2022, 15:34 pm »

Crea una simple estructura con estos campos:

SizeImagen  entero32
SizeTexto  entero32
Opcionalmente sus nombres, si hubieran de ser de interés para lo que se haga.

Ahora creas un fichero nuevo con una extensión de tu interés, preferiblemente que no recoja ninguna aplicación para no inducir a errores.

El fichero destino tendrá, en este orden:
1 - La imagen
2 - El texto
3 - La estructura

Es decir, llenas la estructura con el tamaño de la imagen y la del texto. Luego lees la imagen en un array y lo vuelcas al fichero destino, luego lees el texto, y lo escribes detrás, finalmente escribes la estructura.

A la hora de leerlo, se hace la operación inversa (se leen en orden inverso), basta posicionar punteros de lectura y crear el array del tamaño correcto, son simples matemáticas de suma y resta. NET dispone de varios objetos para leer sin necesidad de tener que guardarlo de nuevo a otro fichero... Pero si tus conocimientos son limitados, al menos debeieras ser capaz de llegar a eso.

Hay una ventaja... la imagen al ir al comienzo de dicho fichero, puede ser leído (es lo normal), sin importar lo que haya detrás el decodificador de la imagen sabrá hasta donde leer y donde parar. Luego para cargar la imagen basta con pasar la ruta de dicho fichero.


En línea

juanedwin

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #2 en: 21 Enero 2022, 20:55 pm »

Gracias, por tu respuesta, me diste una idea, aunque no pude realizar tu propuesta, es que tengo conocimiento muy basico, asi que busque y resolvi con el siguiente codigo, quisiera ver si esta bien codificado, no se eso de las buenas formas de programar, resolvi con este codigo :
Código
  1. Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click
  2.        Try
  3.            ' Obtengo los bytes de la imagen y del texto
  4.            Dim archivoimagenByte = IO.File.ReadAllBytes("C:\Users\luchito\Desktop\villancicos huaraz.png")
  5.            Dim archivotexto = System.Text.Encoding.UTF8.GetBytes(tbOriginal.Text.ToCharArray)
  6.            ' Convierto los bytes de imagen y texto en string
  7.            Dim exportar1 As String = Convert.ToBase64String(archivoimagenByte)
  8.            Dim exportar2 As String = Convert.ToBase64String(archivotexto)
  9.            ' Creo un archivo con una extension no usada
  10.            ' y escribo las dos variables separadas por enter
  11.            Using sw As New IO.StreamWriter("c:\exportar.iop", False)
  12.                sw.WriteLine(exportar1 & vbCrLf & exportar2)
  13.            End Using
  14.        Catch
  15.            MsgBox(Err.Description)
  16.        End Try
  17.    End Sub
  18.  
  19.    Private Sub btnImportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImportar.Click
  20.        ' Obtengo la lectura del archivo exportado
  21.        Dim sr As New IO.StreamReader("c:\exportar.iop")
  22.        ' Separo los datos de la imagen y texto y lo asigno a la variable memoria
  23.        Dim memoria() = sr.ReadToEnd().Split(vbCrLf)
  24.        sr.Close()
  25.        ' Convierto el texto de imagen en array de bytes al igual que el texto
  26.        Dim imagenByte() As Byte = Convert.FromBase64String(memoria(0))
  27.        Dim texto() As Byte = Convert.FromBase64String(memoria(1))
  28.        ' Armo la imagen con los bytes y el texto tambien
  29.        Using ms As New IO.MemoryStream(imagenByte, 0, imagenByte.Length)
  30.            pbCopia.Image = Bitmap.FromStream(ms)
  31.            tbCopia.Text = System.Text.Encoding.UTF8.GetString(texto)
  32.        End Using
  33.    End Sub
« Última modificación: 22 Enero 2022, 15:17 pm por juanedwin » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.267


Ver Perfil
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #3 en: 22 Enero 2022, 14:39 pm »

Te vale...

Yo hubiera operado exclusivamente con bytes y sin necesidad de la codificación a y desde Base64.
Pero tratándose de  contenido de pequeño tamaño (una imagen comprimida y el texto de un textbox), no pecará demasiado de lentitud.

Nota que la conversión a Base64 permite el 'splitado' posterior correctamente con un 'separador' que no forma parte de la codificación de Base64 (retorno de carro y avance  de línea en el ejemplo). Es adecuado sin embargo que conozcas que un split, exige buscar (byte a byte prácticamente) la secuencia a lo largo de todo el contenido (imagina si ocupara cientos de Mb.), en tanto que si se guarda un valor con el tamaño de uno u ambos contenidos, el punto de unión entre ambos contenidos se conoce de forma absoluta, sin necesidad de búsqueda, de ahí que sea más eficiente la forma que te señalé.

Cuando pongas código, al poner código y usar las etiquetas 'code' puedes elegir desde la ventana de edición del mensaje, en el combobox 'código GeSHi', el lenguaje usado así se colorea la sintaxis y lo hace más legible.
En línea

juanedwin

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #4 en: 25 Enero 2022, 16:02 pm »

tienes razon, sin embargo no he podido realizar o encontrar como realizar eso(tu primer comentario), asi que hice con otro metodo que creo es mas eficiente que mi propuesta inicial, no se si estara bien pero aqui va.
Código
  1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  2.        Dim archivoimagenByte = IO.File.ReadAllBytes("C:\Users\luchito\Desktop\9.jpg")
  3.        Dim archivoBinary As BinaryWriter = New BinaryWriter(File.Open("c:\jj.jj", FileMode.Create))
  4.        archivoBinary.Write(archivoimagenByte.Length)
  5.        archivoBinary.Write(archivoimagenByte)
  6.        archivoBinary.Write(TextBox1.Text)
  7.        archivoBinary.Close()
  8.    End Sub
  9.    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
  10.        Dim archivoBinary As BinaryReader = New BinaryReader(File.Open("c:\jj.jj", FileMode.Open))
  11.        Dim pictureLength = archivoBinary.ReadInt32
  12.        Dim imgByte = archivoBinary.ReadBytes(pictureLength)
  13.        Using ms As MemoryStream = New MemoryStream(imgByte, 0, imgByte.Length)
  14.            PictureBox2.Image = Bitmap.FromStream(ms)
  15.        End Using
  16.        TextBox2.Text = archivoBinary.ReadString
  17.        archivoBinary.Close()
  18.    End Sub
« Última modificación: 25 Enero 2022, 16:04 pm por juanedwin » En línea

Elektro Enjuto

Desconectado Desconectado

Mensajes: 65



Ver Perfil WWW
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #5 en: 21 Octubre 2022, 08:23 am »

Se que ha pasado mucho tiempo desde la última respuesta a este tema, pero me aburro sin nuevos temas de .NET en los que poder ayudar, y ya que he visto que recientemente publicaste un nuevo tema y yo en este tema en concreto te puedo aclarar un par de cosas... pues allá que voy:

1. Lo que pretendes hacer se denomina serialización: https://learn.microsoft.com/en-us/dotnet/standard/serialization/

La serialización es el proceso de convertir un objeto en una secuencia de bytes para almacenarlo o transmitirlo a la memoria, a una base de datos o a un archivo. Su propósito principal es guardar el estado de un objeto para poder volver a crearlo cuando sea necesario. El proceso inverso se denomina deserialización.

La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo según sea necesario, ya que proporciona almacenamiento de los objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como las siguientes:

    Enviar el objeto a una aplicación remota mediante un servicio web
    Pasar un objeto de un dominio a otro
    Pasar un objeto a través de un firewall como una cadena JSON o XML
    Mantener la seguridad o información específica del usuario entre aplicaciones

2. Para serializar en formato binario/raw puedes utilizar la clase "System.Runtime.Serialization.Formatters.Binary.BinaryFormatter"



He escrito estas dos funciones genéricas para que puedas serializar/deserializar en formato binario de forma muy sencilla:

Código
  1. Public Shared Sub Serialize(Of T)([object] As T, outputFile As String)
  2.  
  3.    Using fs As New FileStream(outputFile, FileMode.CreateNew, FileAccess.Write, FileShare.Read),
  4.          ms As New MemoryStream()
  5.  
  6.        Dim bf As New BinaryFormatter()
  7.        bf.Serialize(ms, [object])
  8.        ms.WriteTo(fs)
  9.    End Using
  10.  
  11. End Function

Código
  1. Public Shared Function Deserialize(Of T)(inputFile As String) As T
  2.  
  3.    Using fs As New FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read)
  4.        Dim bf As New BinaryFormatter()
  5.        Return DirectCast(bf.Deserialize(fs), T)
  6.    End Using
  7.  
  8. End Function

Ejemplo de utilización:

Código
  1. <Serializable>
  2. Friend Class ImageTextData
  3.  
  4.    Public Property Image As Image
  5.  
  6.    Public Property Text As String
  7.  
  8. End Class

Para serializar:
Código
  1. ' Crear un Bitmap de color sólido.
  2. Dim bmp As New Bitmap(128, 128)
  3. Using g As Graphics = Graphics.FromImage(bmp)
  4.    g.Clear(Color.Red)
  5. End Using
  6.  
  7. Dim outputData As New ImageTextData With {
  8.    .Text = "Hello World!",
  9.    .Image = bmp
  10. }
  11.  
  12. Serialize(outputData, "C:\ImageTextData.bin")

Para deserializar:
Código
  1. Dim inputData As ImageTextData = Deserialize(Of ImageTextData)("C:\ImageTextData.bin")
  2.  
  3. Me.PictureBox1.Image = inputData.Image
  4. Me.TextBox1.Text = inputData.Text



Por último, una pequeña advertencia: ten presente que no todos los tipos son serializables por defecto. Dependiendo de tu propósito y las circunstancias puedes llegar a necesitar implementar la interfaz ISerializable y/o IXmlSerializable en la clase cuyos miembros desees serializar, con el fin de diseñar la lógica de serialización de todos o un miembro en particular.

-Enjuto Mojamuto "rey de los frikis" a su disposición para futuras dudas.
« Última modificación: 23 Octubre 2022, 00:23 am por Enjuto Mojamuto » En línea

@%$& #$ %&#$, ¡hay que decirlo más!.
juanedwin

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #6 en: 22 Octubre 2022, 02:44 am »

claro gracias por tu aporte, es bueno aprender un poco mas, eso de serializacion no sabia nada que asi se llamaba, la cuestion era juntar (exportar) en un archivo una imagen y un texto, y claro oculto para que nadie lo pudiera ver ni leer, asi que viene bien la aclaracion, probare los ejemplos, gracias saludos.
En línea

richardu1980

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5
« Respuesta #7 en: 23 Noviembre 2022, 19:32 pm »

Es posible extraer una porcion de una imagen de un video(*.mp4) en un PictureBox como si le tomasemos una foto pero capturando un area especifica del video con el Picturebox, asi tendriamos los valores de top y left y el tamaño basado en width y heigth.

GRACIAS!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines