elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Capturas de pantalla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Capturas de pantalla  (Leído 3,625 veces)
David Vans

Desconectado Desconectado

Mensajes: 193


Ver Perfil
Capturas de pantalla
« en: 12 Junio 2007, 17:05 pm »

Hola a todos estoy diseñando un aplicaicon con escritorio remoto Captura la imagen en un picture  lo tengo a estrech para que la imagen se estreche y ocupe menos lo que pasa que si pongo picture.image.save(path) me guarda la imagen como seria entera sin el estrechamiento.

Entoces lo que queri saber como puedo guradar la imagen tal cual la veo en el picture.

Y luego como la imagen al segundo no cambia toda queiro enviar los bytes que han a cambiado y modificarlos en la otra imagen.

Pro ejemplo si capturo la pirmera imagen entera ocupa 119 Kb

Luego al segundo captura otra que ocupa 117 Pues Coinciden 98 bytes con la primera que son identicos y luego cambian 21 pues yo solo envio esos 21 y los modifico en otro ordenador con la otra imagen.  Para que voy a volver a anviar todos los bytes si ya los envio una vez.


En línea

Emperorxdevil

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Capturas de pantalla
« Respuesta #1 en: 16 Julio 2007, 17:19 pm »

Creo que no se entiende lo que quieres.

No obstante, mirate el code de mi clase Webcam ahi hay varias formas de cambiar de tamaño una imagen capturada.

Salu2


En línea

shargon

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Capturas de pantalla
« Respuesta #2 en: 10 Agosto 2007, 11:16 am »

te entiendo... pero me da que tardas mas comprobando las diferencias y generando la imagen que enviandola nueva... eso tiene que ser por regiones
En línea

shargon

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Capturas de pantalla
« Respuesta #3 en: 26 Agosto 2007, 14:18 pm »

para lo primero, tienes que guardar la imagen con GetThumbailImage o algo asi... y para lo segundo montarse un sistema de regiones a este estilo

//CODIGO DE LEONIDAS

Código
  1. public class Ventana
  2.        {
  3.            public Rectangle RECTANGULO;
  4.            public IntPtr HW;
  5.            public bool SubVentana = false;
  6.            public uint ESTADO;
  7.            public bool Visible = true;
  8.            public string titulo = "";
  9.            public Ventana(IntPtr hw)
  10.            {
  11.                HW = hw;
  12.                titulo = NativeWIN32.GetWindowText(hw);
  13.            }
  14.            public void PonerPos(NativeWIN32.RECT rect, uint estado)
  15.            {
  16.                RECTANGULO = new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top);
  17.                ESTADO = estado;
  18.            }
  19.            public Ventana(NativeWIN32.RECT rect, uint estado, IntPtr hw)
  20.            {
  21.                RECTANGULO = new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top);
  22.                HW = hw;
  23.                ESTADO = estado;
  24.                titulo = NativeWIN32.GetWindowText(hw);
  25.            }
  26.        }
  27.  
  28.  
  29.  
  30. public static List<Ventana> CalcularRects()
  31.        {
  32.            List<Ventana> tsre = new List<Ventana>();
  33.            mhWnd = new ArrayList();
  34.            NativeWIN32.EnumDelegate enumfunc = new NativeWIN32.EnumDelegate(EnumWindowsProc);
  35.            bool success = NativeWIN32.EnumDesktopWindows(IntPtr.Zero, enumfunc, IntPtr.Zero);
  36.            foreach (IntPtr hw in mhWnd)
  37.            {
  38.                //NativeWIN32.RECT result = new NativeWIN32.RECT();
  39.                //NativeWIN32.GetWindowRect(hw, out result);
  40.                NativeWIN32.WINDOWINFO info = new NativeWIN32.WINDOWINFO();
  41.                info.cbSize = (uint)Marshal.SizeOf(info);
  42.                NativeWIN32.GetWindowInfo(hw, ref info);
  43.                Ventana v = new Ventana(info.rcWindow, info.dwWindowStatus, hw);
  44.                tsre.Add(v);
  45.            }
  46.            mhWnd.Clear();
  47.            mhWnd = null;
  48.            //LAS CHICAS
  49.            foreach (IntPtr p in NativeWIN32.GetChildWindows(NativeWIN32.GetForegroundWindow()))
  50.            {
  51.                NativeWIN32.WINDOWINFO info = new NativeWIN32.WINDOWINFO();
  52.                info.cbSize = (uint)Marshal.SizeOf(info);
  53.                NativeWIN32.GetWindowInfo(p, ref info);
  54.                Ventana v = new Ventana(info.rcWindow, info.dwWindowStatus, p);
  55.                v.SubVentana = true;
  56.                v.Visible = NativeWIN32.IsWindowVisible(p);
  57.                tsre.Add(v);
  58.            }
  59.            //----------
  60.            return tsre;
  61.        }
  62.  

cuando las envias te las guardas a una variable, luego lo lees de nuevo y compruebas los rectangulos cambiados

Código
  1. public static Rectangle ComparaArrayVentanas(List<Ventana> a1, List<Ventana> a2)
  2.        {
  3.            if (a1 == null || a2 == null) return Screen.PrimaryScreen.Bounds;
  4.            GraphicsPath gp = new GraphicsPath();
  5.            gp.FillMode = FillMode.Alternate;
  6.            for (int x = 0; x < a1.Count; x++)
  7.            {
  8.                if (a1[x].HW == IntPtr.Zero) break;
  9.                bool existe_y_igual = false;
  10.                for (int y = 0; y < a2.Count; y++)
  11.                {
  12.                    if (a1[x].HW == IntPtr.Zero) { gp.AddRectangle(a1[x].RECTANGULO); continue; }
  13.                    if (a1[x].HW == a2[y].HW)
  14.                    {
  15.                        if (a1[x].RECTANGULO == a2[y].RECTANGULO && a1[x].ESTADO == a2[y].ESTADO && a1[x].Visible == a2[y].Visible) existe_y_igual = true;
  16.                        break;
  17.                    }
  18.                }
  19.                if (!existe_y_igual) gp.AddRectangle(a1[x].RECTANGULO);
  20.            }
  21.            for (int x = 0; x < a2.Count; x++)
  22.            {
  23.                if (a2[x].HW == IntPtr.Zero) { gp.AddRectangle(a2[x].RECTANGULO); continue; }
  24.                bool existe_y_igual = false;
  25.                for (int y = 0; y < a1.Count; y++)
  26.                    if (a2[x].HW == a1[y].HW)
  27.                    {
  28.                        if (a2[x].RECTANGULO == a1[y].RECTANGULO && a2[x].ESTADO == a1[y].ESTADO && a2[x].Visible == a1[y].Visible) existe_y_igual = true;
  29.                        break;
  30.                    }
  31.                if (!existe_y_igual) gp.AddRectangle(a2[x].RECTANGULO);
  32.            }
  33.            if (gp.PointCount == 0) return Rectangle.Empty;
  34.            int t = -1, l = -1, w = -1, h = -1;
  35.            RectangleF r = gp.GetBounds(); gp.Dispose();
  36.            t = (int)r.Top;
  37.            l = (int)r.Left;
  38.            w = (int)r.Width;
  39.            h = (int)r.Height;
  40.            if (t < 0) t = 0;
  41.            if (l < 0) l = 0;
  42.            if (w + l + 30 > Screen.PrimaryScreen.Bounds.Width) w = Screen.PrimaryScreen.Bounds.Width - l;
  43.            if (h + t + 30 > Screen.PrimaryScreen.Bounds.Height) h = Screen.PrimaryScreen.Bounds.Height - t;
  44.            return new Rectangle(l, t, w, h);
  45.        }

y te devuelve el rectangulo de la pantalla a enviar... asi lo hago yo...luego tienes que cojer el rectangulo activo cuando se pulsa una tecla y cuando se hace un click ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines