|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Geo
Páginas: 1 ... 5 6 [7] 8 9 ... 41
151
« en: Viernes 27 de Marzo de 2009, 07:00 »
Ya lo conseguí, aunque ahora tengo problemas con el manejo de memoria dentro de la función callback, a ver si puedo con esto .
152
« en: Martes 24 de Marzo de 2009, 07:53 »
Qué tal amigos, estoy realizando una aplicación de procesamiento de video, para ello estoy utilizando AVICap. De hecho, ya he realizado lo que intento hacer, con C (sin AVICap) y con VB.NET, sin embargo, por motivos didáctivos me han pedido lo implemente también en VB 6 :p. El problema es que de VB no conozco demasiado, y tengo problemas para poder configurar la función "callback" que se ejecutará al momento de que la cámara se actualiza con el siguiente frame. En VB.NET lo estoy haciendo así (lo tomé de otro código que encontré): Módulo: Delegate Function CallBackDelegate(ByVal hwnd As IntPtr, ByRef lpVhdr As VIDEOHDR) As IntPtr Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As CallBackDelegate) As IntPtr Public Structure VIDEOHDR Dim lpData As Integer '// address of video buffer Dim dwBufferLength As Integer '// size, in bytes, of the Data buffer Dim dwBytesUsed As Integer '// see below Dim dwTimeCaptured As Integer '// see below Dim dwUser As Integer '// user-specific data Dim dwFlags As Integer '// see below <VBFixedArray(3)> Dim dwReserved() As Integer '// reserved; do notuse} End Structure
Clase del form principal: Public Class frmCaptura Dim hwdc As Integer Dim conectado As Boolean Dim g As Graphics Private delCallBack As CallBackDelegate = New CallBackDelegate(AddressOf procesaFrame) Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click Dim res As Integer hwdc = capCreateCaptureWindow("Captura Cámara", WS_CHILD Or WS_VISIBLE, 0, 0, 320, 240, picCaptura.Handle.ToInt32, 0) If (hwdc <> 0) Then res = SendMessage(hwdc, WM_CAP_DRIVER_CONNECT, 0, 0) res = SendMessage(hwdc, WM_CAP_SET_PREVIEW, 1, 0) res = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 60, 0) conectado = True ' Configura callback res = SendMessage(hwdc, WM_CAP_SET_CALLBACK_FRAME, New IntPtr(0), delCallBack) Else MsgBox("No se encontró dispositivo de captura") End If End Sub ... Private Function procesaFrame(ByVal hwnd As IntPtr, ByRef lpVHdr As VIDEOHDR) As IntPtr ... End Function
¿Alguien sabría cómo hacerlo en VB 6? De hecho, ya tengo un avance, pero me gustaría saber si alguien ya lo ha hecho y que pudiera echarme una mano . Por el momento ya los estoy convenciendo de trabajar con .NET (con VB o C#, que lo manejo mejor), ya que con C/C++ por el momento nop (este si lo domino :p). Gracias.
153
« en: Miércoles 4 de Marzo de 2009, 06:15 »
Es extraño, si el archivo está en la misma carpeta no debiera haber problemas, para asegurarme probé con una llamada más sencilla: factorial.mfunction[ res ] = nombrefun( num ) res = 1; for cont = 1 : num res = res * cont; end
prueba.mResultado: fac = 120 >>
154
« en: Martes 3 de Marzo de 2009, 06:35 »
Por favor utiliza las etiquetas [code] para escribir código. El código que has mostrado tiene varios errores, pero no son complicados, muchos son de concepto: - el número mayor no se calcula haciendo sumas,
- para el número con mayor frecuencia ya te lo resolvieron (hay otras formas),
- si vas a calcular 50 números de Fibonacci, sería bueno que tu ciclo for contara 50 números ¿no?
- puedes calcular primero los números y luego pedir al usuario que ingrese el que evaluarás,
- en un vector de 50 posiciones guardas los números de la serie de Fibonacci, el usuario ingresa un número, recorres el vector buscándolo, si llegas al final y no lo encontraste, el número ingresado no corresponde a uno de los 50 primeros números de la serie.
Recomendación: intenta un poco más para resolverlos, pregunta por dudas un tanto más específicas, aquí no se hacen tareas (o no se deberían hacer).
155
« en: Martes 3 de Marzo de 2009, 05:56 »
No detallas muy bien tu problema, no mencionas si la función factorial que hiciste, está en un archivo separado o en el principal como una subfunción. Si está en un archivo separado, tu archivo principal debiera estar en la misma carpeta para que lo reconozca. Además, la función que llamas debiera corresponder con el nombre del archivo, puesto que es este el que determina el nombre de la función.
156
« en: Jueves 26 de Febrero de 2009, 06:17 »
Mejor detalla un poco mejor lo que deseas hacer, y qué problemas te has encontrado .
157
« en: Martes 24 de Febrero de 2009, 23:40 »
Las imágenes se cargan con la función imread. En el caso del ejemplo, se utiliza load porque carga los datos desde un archivo en formato MATLAB que contiene las variables adecuadas. X = imread( 'imagenes/imagen.tif' );
158
« en: Domingo 22 de Febrero de 2009, 22:25 »
No entiendo muy bien, ya que no comentas el contenido de los archivos. Si fuera simplemente concatenar los dos archivos, cargas el contenido de ambos, y luego creas uno donde unas ambos contenidos.
¿Qué contienen los archivos? ¿Cómo los cargas?
159
« en: Domingo 22 de Febrero de 2009, 20:21 »
El juego que hiciste, ¿está hecho solamente con funciones de consola? Si es así, una biblioteca gráfica sería un cambio importante, puedes intentar antes con ncurses, que es una biblioteca para interfaces basadas en texto.
160
« en: Domingo 22 de Febrero de 2009, 07:34 »
¿Podrías aclarar un poco? ¿Tienes imágenes a color de 16 bits? Es decir, un pixel de la imagen se representa por 16 bits ¿o se trata de imágenes a color en las que cada componente de sus pixeles se representa con enteros de 16 bits?
Si se trata de lo segundo, y convertiste de 16 bits a 8, para reescalar en sentido inverso usa una regla de tres:
2^16 - 2^8 x - uint8
donde x = ( uint8 * 2^16 ) / 2^8
161
« en: Domingo 22 de Febrero de 2009, 07:19 »
La función imshow es parte del toolbox de procesamiento de imágenes, comprueba que lo tengas instalado.
162
« en: Domingo 22 de Febrero de 2009, 07:13 »
Mi duda es como puedo tomar la imagen cada segundo hasta llegar a un tiempo de 15 minutos y almacenar la imagen que toma, PARa su correspondiente procesamiento. Utiliza una función 'callback' de tipo temporizador.
163
« en: Domingo 22 de Febrero de 2009, 06:52 »
El problema es el formato en que creas el objeto de video. En lugar de 'YUY2_...', prueba con 'RGB24_...' y verás.
164
« en: Domingo 22 de Febrero de 2009, 06:35 »
Con la función isdir podrías saber si hay un directorio con el nombre que especifiques. Luego lo creas con mkdir.
También, podrías usar solamente mkdir, la cual también es capaz de indicar si el directorio ya existía.
165
« en: Viernes 30 de Enero de 2009, 00:50 »
¿Podrías colocar el código que estás utilizando?
166
« en: Jueves 29 de Enero de 2009, 22:55 »
Para comparar cadenas de texto se debe utilizar la función strcmp o strcmpi, la primera distingue entre mayúsculas y la segunda no. Estas funciones comparan dos cadenas de texto y devuelven 1 en el caso de que sean iguales, 0 si no. Usarías algo como esto: esperado = 'archivo.txt'; recibido = ''; while ( strcmpi( esperado, recibido ) ~= 1 ) recibido = input( 'Introduzca nombre de archivo: ', 's' ); end
Si deseas mostrar un error si el archivo no corresponde, podrías hacerlo así: esperado = 'archivo.txt'; recibido = input( 'Introduzca nombre de archivo: ', 's' ); while ( strcmpi( esperado, recibido ) ~= 1 ) recibido = input( 'Error en nombre de archivo, introduzca de nuevo: ', 's' ); end
No entendí muy bien si deseas restringir el nombre del archivo o si deseas evitar que se introduzca uno que no existe :p. Suerte .
167
« en: Jueves 15 de Enero de 2009, 23:20 »
Pero MESA ¿no era una implementación software? Perdón, ya leí en la introducción de la página oficial: A variety of device drivers allows Mesa to be used in many different environments ranging from software emulation to complete hardware acceleration for modern GPUs.
168
« en: Jueves 15 de Enero de 2009, 19:34 »
Blackwind, gracias por el consejo . De hecho, mi proyecto lo estoy desarrollando en Windows, solo tratando de utilizar en su mayoría librerías que también estén disponibles en Linux para hacer más sencilla una futura portación .
169
« en: Martes 13 de Enero de 2009, 08:03 »
Idi**a de mi, ahora mismo que probé en linux encontré el error . Efectivamente, no estaba borrando . eso me pasa por creer ciegamente que el código estaba intacto desde la última vez que lo había visto funcionar :p. su, muchas gracias por la ayuda, y también por la recomendación, cuando estaba por comprarme un libro para empezar a echarle un vistazo a OpenGL me decidí por el de la Superbiblia porque el que comentas lo tiene mi asesor, y se supone que me lo prestaría (mañana mismo se lo pido ). Gracias .
170
« en: Martes 13 de Enero de 2009, 01:07 »
Qué tal, recién le estoy echando un vistazo a OpenGL, estoy checando unos ejemplos de la Superbiblia . Tengo un problema, el siguiente código: // Points.c // OpenGL SuperBible // Demonstrates OpenGL Primative GL_POINTS // Program by Richard S. Wright Jr. #include "../../shared/gltools.h" // OpenGL toolkit #include <math.h> #include <cstdio> // Define a constant for the value of PI #define GL_PI 3.1415f // Rotation amounts static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; // Called to draw scene void RenderScene(void) { GLfloat x,y,z,angle; // Storeage for coordinat // Save matrix state and do the rotation glPushMatrix(); glRotatef(xRot, 1.0f, 0.0f, 0.0f); glRotatef(yRot, 0.0f, 1.0f, 0.0f); // Call only once for all remaining points glBegin(GL_POINTS); z = -50.0f; for(angle = 0.0f; angle <= (2.0f*GL_PI)*3.0f; angle += 0.1f) { x = 50.0f*sin(angle); y = 50.0f*cos(angle); // Specify the point and move the Z value up a little glVertex3f(x, y, z); z += 0.5f; } // Done drawing points glEnd(); // Restore transformations glPopMatrix(); // Flush drawing commands glutSwapBuffers(); } // This function does any needed initialization on the rendering // context. void SetupRC() { // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); // Set drawing color to green glColor3f(0.0f, 1.0f, 0.0f); } void SpecialKeys(int key, int x, int y) { if(key == GLUT_KEY_UP) xRot-= 5.0f; if(key == GLUT_KEY_DOWN) xRot += 5.0f; if(key == GLUT_KEY_LEFT) yRot -= 5.0f; if(key == GLUT_KEY_RIGHT) yRot += 5.0f; if(key > 356.0f) xRot = 0.0f; if(key < -1.0f) xRot = 355.0f; if(key > 356.0f) yRot = 0.0f; if(key < -1.0f) yRot = 355.0f; // Refresh the Window glutPostRedisplay(); } void ChangeSize(int w, int h) { GLfloat nRange = 1000.0f; // Prevent a divide by zero if(h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); // Reset projection matrix stack glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange); else glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); // Reset Model view matrix stack glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("Points Example"); glutReshapeFunc(ChangeSize); glutSpecialFunc(SpecialKeys); glutDisplayFunc(RenderScene); SetupRC(); glutMainLoop(); return 0; }
Dibuja unos puntos en espiral y permite mover la perspectiva con las flechas del teclado, lo probé hace algunas semanas, y funcionaba muy bien, pero hoy intento de nuevo y ahora al intentar mover, el dibujo anterior no se borra, sino que las nuevas posiciones se van sobreponiendo a las anteriores, quedando todo encimado tras intentar mover varias veces. ¿Alguien sabe si es posible modificar esto en código? Porque por ahora mi única idea es algo con drivers o versión de alguna librería, acabo de instalar la última versión de DirectX pero no sé si tenga algo que ver con esto. Gracias de antemano por cualquier ayuda que puedan darme .
171
« en: Domingo 4 de Enero de 2009, 01:17 »
1) No. 2) Hay que programarlo. Esta es la lista de PICs que tienen controlador USB integrado: http://www.microchip.com/stellent/idcpl ... odeId=2654Todo lo relacionado con USB de Microchip lo encuentras en: http://www.microchip.com/usb/Si tienes otro microcontrolador (PIC o cualquier otro), puedes usar un controlador USB externo como el USBN9603 de National o el FT232. Para programar los PICs, no he visto hasta ahora código en ensamblador, gralmente. encuentras ejemplos y documentación en lenguaje C o Basic, el manejo del controlador USB se encapsula mediante el uso de librerías en estos lenguajes. Yo he probado con el compilador C de CCS: http://www.ccsinfo.comPor el lado de la aplicación en la PC, Microchip provee documentación y ejemplos para distintos modos de comunicación, incluyendo clases HID (dispositivos de interfaz humana); CDC, dispositivo de comunicación, esta clase permite trabajar el puerto USB como un puerto serie virtual (COM), y una librería para transferencias bulk. El protocolo USB define varios tipos de transferencia (comunicación) de datos, debes checar cuál es el que se adecua a tus necesidades . Para esto te recomiendo el libro "USB Complete" de Jan Axelson: http://www.lvr.com/Por último, te dejo un ejemplo de aplicación con un PIC18f2550 en modo de transferencias bulk, firmware compilado con CCS y la aplicación de la PC desarrollada en C# utilizando la librería de Microchip: http://www.hobbypic.com/index.php?optio ... &Itemid=27
173
« en: Domingo 14 de Diciembre de 2008, 19:01 »
Qué bien que ya casi lo tienes . Un solo apunte: para futuros trabajos podrías trabajar sólo con una foto, no directamente con video. De esta forma podrías manejar una imagen en donde coloques objetos de diferentes tonalidades o colores y evalúes el rendimiento, una vez que te convence el resultado trabajas con el video, sabiendo que tu algoritmo/procesamiento funciona . Nos vemos y te tomo la palabra, que para eso estamos aquí, para compartir . ¡Salud!
174
« en: Sábado 13 de Diciembre de 2008, 02:34 »
Primero comentar la opinión que algunos compañeros tienen con respecto al compilador que estás usando: es viejo y sus bibliotecas/librerías no son estándar. Ahora, no quiere decir que no sirva, si tú puedes hacer lo que quieres con él está muy bien . Sobre poner color, se hace con la función setcolor, para rellenar, en lugar de dibujar con líneas lo puedes hacer mediante polígonos con fillpoly, si no quieres rellenar usa drawpoly, estas y todas las funciones de la biblioteca graphics de Borland las puedes encontrar con ejemplos y documentación en esta página: http://c.conclase.net/Borland/libreria.php?lib=graphicsPor último, sobre lo que apuntaba al principio, conviene que pronto pruebes otros compiladores, como VC++ si trabajas en Windows, donde lamentablemente no existen las librerías de Borland para gráficos (graphics), en su lugar tendrás que utilizar alguna otra, entre las cuales están GDI, OpenGL, Allegro, SDL, DirectX... Suerte .
175
« en: Viernes 12 de Diciembre de 2008, 06:12 »
¿Qué biblioteca usas para dibujar? Podrías colocar el código del dibujo que hiciste para entender mejor por dónde vas encaminado .
Páginas: 1 ... 5 6 [7] 8 9 ... 41
|
|
|