Lockbits ???? AYUDA

Iniciado por NeoXero, 22 Octubre 2007, 02:35 AM

0 Miembros y 2 Visitantes están viendo este tema.

NeoXero

aalguien me podria ayudar a comprender mejor la funcion LockBits en C# y VB. Net, ya que baje un ejemplo pero pss nada mas es inversion de color y lo que yo quiero hacer es
por ejemplo trabajamos con imagenes hechas en paint fondo blanco y figuras(circulos,triangulos,etc ) solidas de color  entonces detectar cuando en la figura  cambia de un pixel de color a un pixel blanco para entonces hacerle un desvanecido
ya consegui e l desvanecido a la derecha pero me toma como 30segundos el proceso.
En el ejemplo que les mencionaba de lockbits para la inversion tardo 0.5 segundos, nada que ver con 30 segundos de mi proceso que es algo mas sencillo!!!
Bueno anexo mi proyecto en C# 2005 para que lo vean

http://gtrejo.freeweb7.com/graficacion%20segunda.rar

PD.- Anexo el archivo que utilizo para la prueba (test.bmp) y tengo la variable FOTO en el codigo declarada y es donde cargo test.bmp pero no supe com detectar el directorio del proyecto asi que tiene que configurarse la ruta del archivo

Cegik

No se exactamente toda la funionalidad que deseas en esa aplicaion, pero he traducido el codigo de Sombra a la derecha para que utilice LockBits, espero que te sirva de guia para lo que deseas hacer...

este es el link:
http://rapidshare.com/files/65184688/graficacion_segunda.zip.html

Porfavor comentame cualquier problema.

NeoXero

ok ay lo pruebo pa ver que tall !!! de antemano gracias amigo

NeoXero

hey amigo disculpa no entendi donde pusiste CSIG== -1 ?? 
por ejemplo si quisiera que la sombra saliera tambien a la izquierda y arriba y abajo  ????
o sea que   kreara un degradado en todo el contorno  o que si se encuentran2 figuras pegadas de distinto color que cree una mezcla de ambos  y haga difuminado de el color 1 a el centro y de el color 2 hacia el centro
PD: no se que   tanta experiencia tengas en C#  pero me gustaria agregarte al msn por si me surgieran algunas dudas 
De antemano gracias  y espero tu respuesta . mi mail es LOST__LINK@hotmail.com

gusman

Buenas.

Veo que lo que te interesa son rutinas de dibujado rápidas para poder crear efectos.

Si quieres usar LockBits tengo en mi Web un ejemplo de como se usa, para poder copiar imágenes mediante CopyMemory y también desde ensamblador directo ( :O ).

Te adelanto que el LockBits lo que hace es fijar una zona de memoria de la imagen y nos devuelve el puntero a la dirección del primer scanline.

Si no sabes lo que es un scanline ni el stride de este mira en mi web, ahí lo explico.

Otra solución puede ser utilizar unas matrices de transformación para:
1-Eliminar los píxeles de color blanco (o el color que elijas)
1-Redibujar la imágen con el color eliminado y aplicando una matriz de transformación de color que la vaya haciendo transparente.
No está muerto todo lo que yace y con extraños evos hasta la misma muerte puede morir.

Cegik

Ok, RtlMoveMemory (para los que saben) CopyMemory es una alternativa buena en Win32 (de hecho la mejor si sabemos menejar los formatos de bits y no tenemos aceleracion grafica) pero no se si sea compatible con las nuevas plataformas (lo digo por .Net 3 WinFx y Vista) si alguno sabe si sirven bien (y si utiliza una maquina virtual para emular win32 o no) seria interesante usarlo, igual no es muy dificil. pero si quieren velocidad prueben DirecX 9, XNA (si tienen una buena tarjeta) o OpenGl.