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.

Preguntas similare

Leer las respuestas

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




Miao...

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.
.

Respuesta Responder a este mensaje
#2 Anonimo
08/09/2004 - 15:55 | Informe spam
Gracias DJ Miao por el cumplido, eres un sol (es decir,
vete a la ####)

Gracias al foro por aguantar mi retorica, supongo que me
informareis si es molesta.

El problema lo tengo solucionado, tal vez a nadie le
interese pero os dire que mi error consistia en estar
confundiendo el tamaño del formulario con el tamaño del
area cliente, por eso, a cualquiera que en adelante intente
pintar graficos directamente sobre el formulario (creo que
seria buena idea para un parchis que he leido que se esta
haciendo) que sepa que las coordenadas que deberia tener en
cuenta deben estar dentro de ClientRectangle y nunca se
debe tener en cuenta el Size del formulario (pues estas
coordenadas no corresponden con el area cliente)




Ya tenemos el poeta del foro.




Miao...

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.
.



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida