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

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
#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)




Mostrar la cita
Ads by Google
Search Busqueda sugerida