Hola Pedro.
Pues no las saco de ningun lado...salen de mi cerebrito
.
Analicé lo que necesitaba, plantié el problema, generé una ecuación que demostraba el comportamiento requerido, y la apliqué al VB.
Te explico cómo funciona.
Supongamos que tienes un PictureBox con un ancho de 20 pixels. Como tu tienes en realidad sólo 5 elementos verticales(columnas) por caracter del LCD, sabemos que cada pixel en realidad debe ocupar 4(20/5)pixels de ancho.
Plantiemos el problema en la recta numérica:
Pixel 1 Pixel 2 Pixel 3 Pixel 4 Pixel 5
!------------------!------------------!-------------------!--------------------!-------------------!------------->
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Verás que la fórmula que realice es: X - X mod (Picture1.ScaleWidth / 5)
(Picture1.ScaleWidth/5) es una constante siempre y cuando no redimensiones el tamaño o cambies las escalas del PictureBox1.
En este caso sería 20/5= 4.
Entonces tenemos: X1= X- X mod 4
Si te fijas rápidamente, y comienzas a asignar valores a X podrás ver cómo se comporta la función rápidamente:
Si X = 0
X1 = 0 - 0 mod 4
X1 = 0 - 0
X1 = 0Si X = 1
X1 = 1 - 1 mod 4
X1 = 1 - 1
X1 = 0Si X = 2
X1 = 2 - 2 mod 4
X1 = 2 - 2
X1 = 0Si X = 3
X1 = 3 - 3 mod 4
X1 = 3 - 3
X1 = 0Si X = 4
X1 = 4 - 4 mod 4
X1 = 4 - 0
X1 = 4Si X = 5
X1 = 5 - 5 mod 4
X1 = 5 - 1
X1 = 4Si X = 6
X1 = 6 - 6 mod 4
X1 = 6 - 2
X1 = 4Si X = 7
X1 = 7 - 7 mod 4
X1 = 7 - 3
X1 = 4Si X = 8
X1 = 8 - 8 mod 4
X1 = 8 - 0
X1 = 8Si X = 9
X1 = 9 - 9 mod 4
X1 = 9 - 1
X1 = 8.....
Como puedes ver, X1 sólo adquiere 5 valores posibles: 0, 4, 8, 12 ó 16.
Justamente estos valores son las coordenadas X1 del rectángulo que dibujarás.
La coordenada X2 se hace exactamente igual, solamente que define hasta dónde dibujar el rectángulo. Y siempre será X1 + 4 en este caso.
En fórmulas:
Si X1 = X - X mod (Picture1.ScaleWidth / 5)
Y X2 = X - X mod (Picture1.ScaleWidth / 5) + (Picture1.ScaleWidth / 5)
Reemplazando X1 en X2 obtenemos:
X2 = X1 + (Picture1.ScaleWidth / 5)
Sabiendo que (Picture1.ScaleWidth / 5) es una constante y vale 4 en este caso, nos queda:
X2= X1 + 4
Lo mísmo hice para el eje Y del PictureBox.
PD. Si utilizas un borde fixed single para el rectángulo(que lo estoy viendo en tu programa), debes añadirle 2 pixels más al ancho y alto del rectángulo, ya que el borde ocupa 1 pixel de cada lado del rectángulo del PictureBox.
Por lo tanto, si por ejemplo tenes un width = 20 y un height = 28, sumale dos a ambos quedando un width = 22 y un height = 30 para que las escalas sean perfectas. Estos son los valores correctos.
Saludos.