Visual Basic.NET - Como insertar el Logo de mi negocio en el ticket

 
Vista:
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 03/09/2020 04:41:01
Hola buenas Noches!

Quisiera insertar el logotipo de cualquier negocio en un ticket, usando una impresora térmica, algo como esto:

ticket_final-1

en el pasado yo he logrado insertar una imagen pequeña en un ticket con el siguiente código:

1
2
3
4
5
6
7
8
e.Graphics.DrawString("       Impreso por: Sistema de Control V1.18.05", Letra_Diminuta, Brushes.Black, 0, yPos)
                Dim newImage As Image = My.Resources.Icon_Ticket_B_N_
                Dim x As Single = 108
                Dim y As Single = yPos + 10
                Dim srcRect As New RectangleF(0, 0, 13, 15)
                Dim units As GraphicsUnit = GraphicsUnit.Millimeter
                e.Graphics.DrawImage(newImage, x, y, srcRect, units)
                e.HasMorePages = False
Anotacion-2020-09-02-214446

Esto funcionaba bien, ya que iba en la parte inferior del ticket, y siempre era la misma imagen, sin embargo ahora mi problema es que la imagen que el usuario va a ingresar puede tener cualquier tamaño, eso es algo que yo no controlo y eso no se como hacerlo para que pueda caber dentro del ticket.

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 03/09/2020 08:41:29
Hola,

Te propongo de testar el codigo siguiente :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Dim VentanaImagen As New PictureBox
‘ No es necesario de la mostrar en la pantalla. Pero puedes la mostrar durante las pruebas.
' Para la mostrar, escribir : Me.Controls.Add(VentanaImagen)
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
        VentanaImagen.Height = 15
        VentanaImagen.Width = 13
 
        VentanaImagen.Image = Image.FromFile("D:\Tmp\Media\Bois2.jpg")
' o     VentanaImagen.Image = My.Resources.Icon_Ticket_B_N_
        VentanaImagen.SizeMode = PictureBoxSizeMode.StretchImage
 
    End Sub
 
 
    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
 
‘ … … …
 
        Dim srcRect As New RectangleF(0, 0, 13, 15)
 
        e.Graphics.DrawImage(VentanaImagen.Image, srcRect)
        e.HasMorePages = False
 
    End Sub

Claro que debes ajustar los tamaños de VentanaImagen y de srcRect según los tamaños del ticket (13, 15 es muy pequeño).

Espero te dar una buena idea ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 04/09/2020 07:39:01
Hola Mr. Phill!!!

Muchas gracias por el código, si funcionó, logre adaptarlo y este es el resultado:

Anotacion-2020-09-04-003525

Use el siguiente código.:
1
2
3
4
5
6
7
8
9
10
11
12
13
VentanaImagen.Width = 200
VentanaImagen.Height = 113
'VentanaImagen.Image = Image.FromFile("C:\SystemWin\Logo.png")
If My.Settings.Picture_mode = 1 Then
   VentanaImagen.SizeMode = PictureBoxSizeMode.StretchImage
ElseIf My.Settings.Picture_mode = 2 Then
   VentanaImagen.SizeMode = PictureBoxSizeMode.Zoom
ElseIf My.Settings.Picture_mode = 3 Then
   VentanaImagen.SizeMode = PictureBoxSizeMode.Normal
End If
Dim srcRect2 As New RectangleF(0, 15, 190, 113)
e.Graphics.DrawImage(VentanaImagen.Image, srcRect2)
yPos = 145

Ahora, no se si logre usted ver un rectángulo de color blanco que corre de arriba hacia abajo en el centro del ticket, no tengo idea de porque aparece?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 04/09/2020 08:11:20
Hola Matt,

Ahora, no sé si logre usted ver un rectángulo de color blanco que corre de arriba hacia abajo en el centro del ticket, no tengo idea de porque aparece?
No sé porque este rectángulo (dos lineas) blanco. Parece ser un falta del papel o de la impresora ...
Lo veo al lugar donde nada de imprimido pero no lo veo donde es imprimido.

RectanguloBlanco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 05/09/2020 01:08:37
Gracias de todas maneras Mr. Phill!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 05/09/2020 03:22:54
Hola!

Decidi cambiar el origen de la imagen por una que tengo en: My.Settings.LogoData, la imagen se carga, pero no respeta ninguna de las 3 la propiedaddes PictureBoxSizeMode que yo especifico en mi código, es decir siempre se carga como: PictureBoxSizeMode.StretchImage El código que uso es el siguiente:

'En la parte de declaraciones tengo:
Public VirtualPictureBox As New PictureBox

el siguiente código esta dentro de "PrintDocument1_PrintPage"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
VirtualPictureBox.Width = 235
VirtualPictureBox.Height = 140
                If Not String.IsNullOrEmpty(My.Settings.LogoData) Then
                    Using stream As New MemoryStream(Convert.FromBase64String(My.Settings.LogoData))
                        VirtualPictureBox.Image = Image.FromStream(stream)
                    End Using
                    Select Case My.Settings.Picture_mode
                        Case My.Settings.Picture_mode = 1
                            VirtualPictureBox.SizeMode = PictureBoxSizeMode.StretchImage
                        Case My.Settings.Picture_mode = 2
                            VirtualPictureBox.SizeMode = PictureBoxSizeMode.Zoom
                        Case My.Settings.Picture_mode = 3
                            VirtualPictureBox.SizeMode = PictureBoxSizeMode.Normal
                    End Select
                End If
            Dim srcRect2 As New RectangleF(0, 15, 235, 140)
            e.Graphics.DrawImage(VirtualPictureBox.Image, srcRect2)

Así es como se debería ver la imagen en el ticket:

01

Y asi es como en realidad se ve:

02

He notado que este codigo funciona para un PictureBox real, pero en este caso el pictureBox en el ticket es mas bien como un pictureBox virtual, no?
1
2
3
4
5
6
7
8
Select Case My.Settings.Picture_mode
Case My.Settings.Picture_mode = 1
VirtualPictureBox.SizeMode = PictureBoxSizeMode.StretchImage
Case My.Settings.Picture_mode = 2
VirtualPictureBox.SizeMode = PictureBoxSizeMode.Zoom
Case My.Settings.Picture_mode = 3
 VirtualPictureBox.SizeMode = PictureBoxSizeMode.Normal
 End Select
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 05/09/2020 08:10:33
Hola Matt,

Dice "... este codigo funciona para un PictureBox real... ". No existe diferencia entre la New PictureBox y la PictureBox que pones en el Form con el Windows Form Conceptor. Basta que agregas este PictureBox "virtual' en Form.Controls para lo ver.

No sé si " Using stream As New MemoryStream(Convert.FromBase64String(My.Settings.LogoData))" es bien. Deberias hacer prueba con :
1
VirtualPictureBox.Image = Image.FromStream(RutaYNombreCompletoDeLaImagen)

Pero pienso que las tamañas de tu PictureBox creen un rectángulo y el circulo deviene un elipse. Las tamañas de la PictureBox deben ser proporcionales a la imagen inicial. Si no, StrechImage deforma imagen.

Comentario : este es posible de calcular la position en el ticket para poner la imagen al medio.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 05/09/2020 09:13:55
Hola Mr. Phill !

Cuando el usuario selecciona una imagen (Logo) de su disco duro, mi programa la guarda en My.Settings.LogoData para despues usarla cuando yo quiera, donde yo quiera, incluso si se reinicia la PC la imagen sigue existiendo en My.Settings.LogoData.
Para guardar la imagen (Logo) use el siguiente código:

1
My.Settings.LogoData = Convert.ToBase64String(File.ReadAllBytes(Fullpath))

Despues cuando la pongo en un PictureBox uso el siguiente código:

1
2
3
4
5
If Not String.IsNullOrEmpty(My.Settings.LogoData) Then
    Using stream As New MemoryStream(Convert.FromBase64String(My.Settings.LogoData))
        PictureBox1.Image = Image.FromStream(stream)
    End Using
End If

Por lo tanto no tengo una "RutaYNombreCompletoDeLaImagen", solo se que la tengo en My.Settings.LogoData.
Actualmente la imagen si se inserta en el ticket, pero en modo StrechImage

Yo único que necesito es que funcione el siguiente código dentro del ticket.

1
2
3
4
5
6
7
8
Select Case My.Settings.Picture_mode
Case My.Settings.Picture_mode = 1
VirtualPictureBox.SizeMode = PictureBoxSizeMode.StretchImage
Case My.Settings.Picture_mode = 2
VirtualPictureBox.SizeMode = PictureBoxSizeMode.Zoom
Case My.Settings.Picture_mode = 3
 VirtualPictureBox.SizeMode = PictureBoxSizeMode.Normal
 End Select
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 05/09/2020 09:50:12
Muy bien, comprendo.

Pero tu problema es que la cadra de la imagen y el rectángulo en el ticket están de formas diferentes.
Si tengo un poco tiempo, haré un ejemplo para mostrar este problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 05/09/2020 10:34:06
Primera prueba para mostrar que StrechImage deforma imagen cuando no la cadra del PictureBox es como la cadra de la imagen real.

He hecho un cirulo ± prefecto con Paint y lo registrar como CirculoSolo.jpg.
ScreenCirculo

En mi Form, creo 3 PictureBox. El primero es cuadrado y otros estan rectangulos. Veo las deformaciones.
Deforma

Este el codigo de este prueba :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
    Dim VentanaImagen As New PictureBox
    Dim VentanaImagen1 As New PictureBox
    Dim VentanaImagen2 As New PictureBox
 
    VentanaImagen.Top = 20
    VentanaImagen.Left = 20
    VentanaImagen.Height = 100  ' Tamañas fijas
    VentanaImagen.Width = 100
 
    Me.Controls.Add(VentanaImagen)
 
    VentanaImagen.Image = Image.FromFile("D:\Tmp\Media\CirculoSolo.jpg")  ' o My.Resources.Icon_Ticket_B_N_
    VentanaImagen.SizeMode = PictureBoxSizeMode.StretchImage
 
    VentanaImagen1.Top = 20
    VentanaImagen1.Left = 150
    VentanaImagen1.Height = 100  ' Tamañas fijas
    VentanaImagen1.Width = 50  ' *** deformacion
 
    Me.Controls.Add(VentanaImagen1)
 
    VentanaImagen1.Image = Image.FromFile("D:\Tmp\Media\CirculoSolo.jpg")
    VentanaImagen1.SizeMode = PictureBoxSizeMode.StretchImage
 
    VentanaImagen2.Top = 20
    VentanaImagen2.Left = 280
    VentanaImagen2.Height = 100  ' Tamañas fijas
    VentanaImagen2.Width = 200  ' *** deformacion
 
    Me.Controls.Add(VentanaImagen2)
 
    VentanaImagen2.Image = Image.FromFile("D:\Tmp\Media\CirculoSolo.jpg")
    VentanaImagen2.SizeMode = PictureBoxSizeMode.StretchImage

Ahora, tenemos que buscar como calcular Height y Width de PictureBox (y del rectángulo del ticket) de manera proporcional a las tamañas de la imagen real.

Continuo cuando tengo tiempo ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 05/09/2020 10:54:59
Tengo la solucion :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim VentanaImagen As New PictureBox
 
VentanaImagen.Image = Image.FromFile("D:\Tmp\Media\ElipseV.jpg")
VentanaImagen.SizeMode = PictureBoxSizeMode.StretchImage
 
Dim Proporcion As Double
Dim X As Double
Dim Y As Double
 
Proporcion = VentanaImagen.Image.Height / VentanaImagen.Image.Width
 
' Quizá este es mejor de reemplazar 100 por el valor de Ticket.Width
 
X = 100
Y = 100 * Proporcion
 
VentanaImagen.Height = Y
VentanaImagen.Width = X
 
' Y para poner la imagen al medio del ticket
VentanaImagen.Top = 15
VentanaImagen.Left = 20  ' ( Ticket.Width - VentanaImagen.Width ) / 2

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 05/09/2020 15:20:01
Hola Mr. Phill.

Entiendo que la forma del PictureBox] puede deformar la imagen cuando uso el modo StretchImage... pero si yo uso el modo Normal o el modo Zoom? la imagen debería ajustarse automáticamente dentro del PictureBox y en mi código yo tengo las 3 opciones, pero la imagen se muestra "siempre" en el modo StretchImage aunque yo seleccione cualquiera de los otros dos modos.
Porque los modos Normal y Zoom no están funcionando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 05/09/2020 18:47:23
Pienso que solamente StrechImage permite de poner toda la imagen en la PictureBox. Adjunto una página con 4 ejemplos : Normal, CenterImage, Autosize (que pasa los límites de PictureBox hasta los límites del Form, si la imagen es más grande que PictureBox) y StrechImage (que deforma la imagen si PictureBox no es proporcional a la imagen, por ejemplo, un imagen cuadrada en un PictureBox rectángula). Tambien, adjunto la imagen del ejemplo.
Proporcional no dice mismas tamaña, solamente misma cadre con mismo ratio entre largo y ancho.

El modo Normal es bien si la imagen y la PictureBox tienen las mismas tamañas. Los otros modos, no dan toda la imagen, mismo si los cuadros están proporcionales. Con StrechImage, no deber pensar si imagen es grande o no, es suficiente que los cuadros están proporcionales. Y para el ticket, la tamaña importante es Width.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 06/09/2020 21:12:22
Hola Mr. Phill

Creo que ya entendí... ahora ya tengo 2 de 3, es decir:

1.- Modo Stretch (OK).
2.- Modo Zoom (OK).
3.- Modo Normal (Problema)!

Modo Stretch:
01

Modo Zoom:
02

Modo Normal: (problema)
03

El Modo Normal no esta funcionando bien para mi, yo quisiera ver el modo Normal asi:
04

Este el código que estoy usando:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
If My.Settings.Picture_mode = 1 Then
                'M O D O   S T R E T C H
                Dim srcRect2 As New RectangleF(0, 15, 190, 115)
                e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
 
            ElseIf My.Settings.Picture_mode = 4 Then
                'M O D O   Z O O M
                Dim Proporcion As Double
                Dim X As Double
                Dim Y As Double
                Proporcion = TicketPictureBox.Image.Height / TicketPictureBox.Image.Width
                X = 115
                Y = 115 * Proporcion
                TicketPictureBox.Left = (190 - TicketPictureBox.Width) / 2
                Dim srcRect2 As New RectangleF(CDbl(TicketPictureBox.Left), 15, X, Y)
                e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
 
            ElseIf My.Settings.Picture_mode = 0 Then
                'M O D O   N O R M A L
                Dim X As Double
                Dim Y As Double
                X = TicketPictureBox.Image.Width
                Y = TicketPictureBox.Image.Height
                TicketPictureBox.Left = (195 - TicketPictureBox.Width) / 2
                Dim srcRect2 As New RectangleF(CDbl(TicketPictureBox.Left), 15, X, Y)
                e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
            End If
            yPos = 145
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 06/09/2020 21:23:56
El modo Normal puede ser utilizar si las tamañas de la imagen están exactamente las tamañas de su lugar en el ticket.
Pero, por que testar todos modos, cuando una solución es suficiente para poner un logo en un ticket ?

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 07/09/2020 00:19:00
Tiene razón, creo que con el Modo Stretch y el Zoom es suficiente, pero como podría hacer para que el modo zoom funcione correctamente para cualquier imagen?

Este código no funciona para cualquier imagen:
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim VentanaImagen As New PictureBox
VentanaImagen.Image = Image.FromFile("D:\Tmp\Media\ElipseV.jpg")
VentanaImagen.SizeMode = PictureBoxSizeMode.StretchImage
Dim Proporcion As Double
Dim X As Double
Dim Y As Double
Proporcion = VentanaImagen.Image.Height / VentanaImagen.Image.Width
X = 100
Y = 100 * Proporcion
VentanaImagen.Height = Y
VentanaImagen.Width = X
VentanaImagen.Top = 15
VentanaImagen.Left = 20  ' ( Ticket.Width - VentanaImagen.Width ) / 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 07/09/2020 07:35:57
Hola Matt,

Pienso que StrechtImage es mejor y debería es bien para todas imágenes.
Quizá que Zoom es bien para imagen mas pequeña que el cuadro en el ticket. Debo testar Zoom.

Envia me la imagen que no funciona con mi código que testo.

Que tenga un buen día ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 07/09/2020 08:33:22
Mi ticket es de 58mm y el PictureBox que cabe ahí, es de 190 x 106 Px, lo se porque tengo una impresora de tickets.
El modo strecth funciona bien, pero si el usuario no quiere deformar su logo, entonces por eso quiero incluir el Modo Zoom.
Cuando yo selecciono una imagen totalmente cuadrada o una rectangular mas grande que el PictureBox el código tiene problemas, por eso tuve que crear los condicionales para checar la variable "Proporcion" para: ( >, = o < 1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
If Not String.IsNullOrEmpty(My.Settings.LogoData) Then
    Using stream As New MemoryStream(Convert.FromBase64String(My.Settings.LogoData))
        TicketPictureBox.Image = Image.FromStream(stream)
    End Using
End If
If My.Settings.Picture_mode = 1 Then
    'M O D O   S T R E T C H
    Dim srcRect2 As New RectangleF(0, 15, 190, 106)
    e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
 
ElseIf My.Settings.Picture_mode = 4 Then
    'M O D O   Z O O M
    TicketPictureBox.Width = 190
    TicketPictureBox.Height = 106
    Dim Proporcion As Double
    Dim Largo As Double
    Dim Alto As Double
    ' MsgBox("Width=" & TicketPictureBox.Image.Width.ToString & "    Height=" & TicketPictureBox.Image.Height.ToString)
    Proporcion = TicketPictureBox.Image.Height / TicketPictureBox.Image.Width
    TicketPictureBox.Width = Largo
    TicketPictureBox.Height = Alto
 
If Proporcion < 1 Then       'parece que funciona bien (OK)
        Largo = 190
        Alto = 190 * Proporcion
        Dim srcRect2 As New RectangleF(0, 15, Largo, Alto)
        e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
 
    ElseIf Proporcion = 1 Then   'parece que funciona bien (OK)
        Largo = 106
        Alto = 106 * Proporcion
        Dim tempooral As Double = (106 / TicketPictureBox.Image.Width) * TicketPictureBox.Image.Width
        TicketPictureBox.Left = Math.Abs((190 - tempooral) / 2)
        Dim srcRect2 As New RectangleF(TicketPictureBox.Left, 15, Largo, Alto)
        e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
 
    ElseIf Proporcion > 1 Then        'No lo he testeado todavia
        'Largo = 106
        'Alto = 106 * Proporcion
        'Dim tempooral As Double = (106 / TicketPictureBox.Image.Width) * TicketPictureBox.Image.Width
        'TicketPictureBox.Left = Math.Abs((190 - tempooral) / 2)
        'Dim srcRect2 As New RectangleF(TicketPictureBox.Left, 15, Largo, Alto)
        'e.Graphics.DrawImage(TicketPictureBox.Image, srcRect2)
    End If
End If

No se si se tiene que hacer un código para cada caso, o existe un código que soporta todos los casos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 07/09/2020 10:12:54
Confirmo que solamente StretchImage es necesario para todas imágenes cuando tienes las mismas proporciones para la imagen y para el PictureBox y paral rectangulo del ticket.

Mira la video : https://www.dropbox.com/s/l6x78jbveelkz9o/LogoEnTicket.mp4?dl=0

Ajunto el proyecto de la vidéo y las imágenes. Este es el Form2 que te interese, los Form 1 y 3 no tienen nada a ver.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Phil Rob (1546 intervenciones) el 08/09/2020 08:09:13
Hola Matt,

Como estas este manaña ?

Me he divertido un poco , mira este vidéo : https://www.dropbox.com/s/9o52k70vt0d7rzu/Stretch_O_Zoom.mp4?dl=0
Ajunto el proyecto para también tu divertir.

Con este código, vemos bien como funcionan StrechImage y Zoom. Ambos están bien si las tamañas proporcionales. De otra manera, vemos las diferencias.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como insertar el Logo de mi negocio en el ticket

Publicado por Matt (75 intervenciones) el 11/09/2020 09:41:20
Muchas Gracias Mr. Phill!
Con los videos ya entendí el proceso y ya logre hacer lo que quería usando su código del post (05/09/2020 10:54:59)
Agradezco muchísimo el apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar