PageScale y PageUnit de Graphics

06/09/2004 - 01:59 por 44r0x0r44 | Informe spam
Buenas tardes!!!

Llevo varios dias topandome con un problema que por el
momento no estoy
consiguiendo solucionar, quisiera apelar a la sabiduria
general de los presentes
en busca de inspiración; gracias.

El problema consiste en lo siguiente:

tengo un formulario cuya BackgroundImage es:
'-
Me.BackgroundImage = New Bitmap (Height, Width):
Graphics.FromImage(BackgroundImage).Clear(Colors.AliceBlue)
'-

tengo también una subrutina que dibujará una imagen
cualquiera en una
posición determinada de la BackgroundImage y la escalará
para que ocupe la
parte restante del formulario:

'-
Sub PutImage(ByVal o As Image, ByVal d As Image, ByVal p As
Point)

Dim G As Graphics = Graphics.FromImage(o)
G.PageUnit = GraphicsUnit.Pixel
G.PageScale = 1

G.DrawImage(d, Rectangle.FromLTRB(p.X, p.Y, o.Width, o.Height))

End Sub
'-

el problema reside en que, suponiendo un formulario
{Height00; Width00} si
llamo a:

'-
PutImage(BackgroundImage, New Image("c:\test.bmp"), New
Point(50, 50))
'-

el resultado es que la imagen test.bmp empieza a dibujarse
en el punto [50,50]
(como cabí­a esperar) mientas que la esquina inferior
derecha NO se situa en el
punto [300,300], sinó que se situa un punto fuera del
formulario.

Una llamada a MessageBox.Show(Rectangle.FromLTRB(p.X, p.Y,
o.Width, o.Height).ToString) dentro de PutImage nos indica
que el rectangulo que toma
como argumento DrawImage es {XP; YP; Height%0;
Width%0}, tal y como cabía esperar, aún así la imagen no
se escala correctamente, decidí­ investigar que podría
estar afectando a estas
operaciones y llegué a la conclusión de que tení­an que ser
las propiedades
PageScale y PageUnit de la clase Graphics.

A mi entender PageUnit define en que unidades estamos
trabajando y PageScale la
escala de dichas unidades, por lo tanto, definiendo la
primera como Pixel y la
segunda como 1 estaremos trabajando con pixels reales de
pantalla: un Rectangle
de 50x50 ocupará 50 pixels y si fuese PageUnit GraphicsUnit.Pixel y PageScale
= 5, un Rectangle de 50x50 ocupará 250x250 pixels.

Por lo tanto aplico Pixel a PageScale y 1 a PageUnit con la
esperanza de que el
resultado sea el esperado y ¡sorpresa! actua exactamente
igual de "mal" que
antes.

¿en que me he equivocado?

Saludos, 44r0x0r44.
 

Leer las respuestas

#1 DJ Miao
06/09/2004 - 16:01 | Informe spam
Ya tenemos el poeta del foro.




Miao...

Mostrar la cita
(Colors.AliceBlue)
Mostrar la cita
As
Mostrar la cita
o.Height))
Mostrar la cita
dibujarse
Mostrar la cita
p.Y,
Mostrar la cita
indica
Mostrar la cita
no
Mostrar la cita
ser
Mostrar la cita
la
Mostrar la cita

Preguntas similares