Documente Academic
Documente Profesional
Documente Cultură
Procesamiento de Imágenes
Biomédicas (PIB)
Autor: Isaac Peñalosa Solana
Tutor: Carlos Platero Dueñas
1 INTRODUCCIÓN ..................................................................................................................4
[OPTIONS]
CONTENTS=HID_CONTENTS
COMPRESS=true
WARING=2
[FILES]
EjemploAyuda.rtf
Este archivo especifica el identificador de contexto de la pantalla índice de
contenidos y el nombre del fichero RTF que contiene el texto de ayuda. Es preciso que
el fichero de ayuda esté guardado con formato texto (ASCII).
Las ayudas HTMLHelp se pueden hacer de dos formas distintas, con Visual
Studio.NET, o con editores de ayuda como HTMLHelp WorkShop
Para añadir un tema se hace clic en el botón insertar una cabecera y aparecerá
Donde se debe escribir el nombre del titulo, después clic en <<Add>> para
añadir la pagina htm con el tema y aparecerá:
Aquí se debe escribir el fichero o la URL de la página htm que contiene el tema,
que mas tarde se editará.
Para editar los temas se hará igual pero haciendo clic en insertar página
añadiendo la URL de la pagina Web con el tema
Una vez insertado las cabeceras y los temas quedara algo así:
2.3.1.3 Editar las páginas de ayuda
Para escribir la ayuda del programa, necesitaremos de un editor de páginas Web
como Microsoft FrontPage, ya que cada página de la ayuda es un fichero de tipo .htm.
Al tratarse de un fichero .htm ser pueden incluir en ellas texto, imágenes, links,
etc.
Con esto se habrá generado un proyecto MFC basado en cuadro de diálogos con
ayuda contextual de formato HTML.
Una vez se han editado todas las páginas de ayuda, el índice y la tabla de
contenidos, el proyecto se debe compilar para ver si existe algún error, si los hay habrá
que depurarlos y si no los hay, se genera la solución y ya tendremos el proyecto de
ayuda creado.
Para compilar el proyecto se hará:
En ésta parte del preproyecto explicare cómo se puede maximizar una aplicación
basada en cuadro de diálogos.
Existen distintas formas de maximizar una aplicación basada en cuadro de
diálogos mediante código reutilizable que se puede encontrar fácilmente en Internet en
sitios como http://www.codeproject.com buscando “resizable”
Yo utilicé dos clases: CDlgMan y CDlgAnchor que encontré en
http://www.codeproject.com/dialog/dlgresizearticle.asp.
Esta solución tiene dos ventajas. La primera es que se puede usar la clase en una
aplicación MFC o no-MFC. La segunda es que se puede añadir/quitar dinámicamente
los controles mientras se crea la aplicación.
La clase CDlgMan es la encargada de guardar los tamaños de los controles de la
ventana y la posición de los mismos y la clase CDlgAnchor se ocupa de reajustar todos
los controles del cuadro de diálogos según el tamaño de la ventana.
protected:
public:
}
Aquí es donde se pone este código para agrandar y/o acoplar los controles que se quiere
de la lista del archivo de cabecera. Se puede usar la función Add para los controles
dinámicamente creados. Y por último se necesita llamar al método OnSize y Save para
ejecutar la rutina y grabar la posición y tamaño de la ventana.
BOOL CMiProgramaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Agregar el elemento de menú "Acerca de..." al menú del
sistema.
//SetTimer(1,4000,NULL);
// IDM_ABOUTBOX debe estar en el intervalo de comandos del
sistema.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
dlgAnchor.Init(this->m_hWnd);
dlgAnchor.Add(IDC_STATIC_TODO, ANCHOR_ALL);
dlgAnchor.Add(IDC_STATIC, ANCHOR_TOP|ANCHOR_LEFT);
dlgAnchor.OnSize();
void CMiProgramaDlg::OnDestroy()
{
CDialog::OnDestroy();
dlgMan.Save();
}
3.4 Pequeño ejemplo de maximización
Como he explicado antes en el funcionamiento de las clases, el método de la
clase CDlgAnchor tiene por argumentos el ID del control y los ejes al que se quieren
fijar, así si se escribe:
dlgAnchor.Add(IDC_BUTTON1, ANCHOR_LEFT|ANCHOR_BOTTOM);
dlgAnchor.Add(IDC_BUTTON2, ANCHOR_RIGHT|ANCHOR_TOP);
dlgAnchor.Add(IDC_BUTTON3, ANCHOR_ALL);
#include <vfw.h>
Entonces el código es:
HWND HwnDc;
HwnDc=capCreateCaptureWindow((LPSTR)”Nombre”, WS_CHILD|WS_VISIBLE,
xi,yi,Ancho,Alto, hwnd, nDI);
SendMessage(hwnDc,WM_CAP_DRIVER_CONNECT,0,0L);
SendMessage(hwnDc,WM_CAP_SET_PREVIEW_RATE,66,0L);
SendMessage(hwnDc,WM_CAP_SET_PREVIEW,true,0L);
HwnDc=capCreateCaptureWindow((LPSTR)”Nombre”, WS_CHILD|WS_VISIBLE,
xi,yi,Ancho,Alto, hwnd, nDI);
WS_CHILD|WS_VISIBLE
Luego vienen los parámetros que indican posición inicial en “x” y “y” (xi, yi) y el alto y
ancho de la ventana (Ancho, Alto).
Ahora se tiene que decir dónde va a ir la ventana dónde se va a mostrar el video, eso
puede ser en una forma, un Picture box o un botón, se indica el objeto con su manejador
o “Handle”, va indicado con la variable “hwnd”.
Ahora se tiene que conectar la ventana con el driver de la cámara eso se hace
con:
SendMessage(hwnDc,WM_CAP_DRIVER_CONNECT,0,0L);
SendMessage(hwnDc,WM_CAP_SET_PREVIEW_RATE,66,0L);
SendMessage(hwnDc,WM_CAP_SET_PREVIEW,true,0L);
[ DllImport ( "avicap32.dll" )]
[ DllImport ( "user32.dll" )]
public extern static int SendMessageA ( int hWnd , int wMsg , short
wParam , int lParam );
Ahora se crearan tres métodos: Ventana, Conectar y Capturar los tres devolverán un
valor tipo bool, entonces se adiciona:
Lo que realizan cada una de las funciones ya esta explicado, lo que hay que
aclarar es que:
En el método ventana, el parámetro de entrada es el handle o manejador de el
objeto dónde se va a mostrar el video, que la ventana tiene de ancho 320 píxeles y de
alto 240 y que su origen estará en la posición 0,0 del objeto donde irá.
El método conectar conecta la ventana al primer driver que encuentra, así que el
único driver instalado debe ser el de la cámara que se va a usar, si no se quiere tener
problemas, pero se puede variar el penúltimo parámetro de la función:
SendMessage(hwnDc,WM_CAP_DRIVER_CONNECT,0,0);
else
else
else
Eso es todo, la verdad la idea era mostrar como usar las funciones de “Video for
Windows” en C#, aunque se tiene que admitir que es una manera algo obsoleta por así
llamarlo, es muy sencillo y casi todas las WebCam pueden usarse con este método.
A continuación se muestra otra manera de capturar video desde una cámara Web
pudiendo elegir la conexión de la cámara, S-Video, Composite, TV-Tuner o USB
4.2.1 Introducción
Esta es una aplicación para capturar video en directo desde varios dispositivos
como una tarjeta de captura la entrada de video o una WebCam conectada al USB. La
mayoría de las funciones del API usan DirectX SDK.
Importante:
4.2.3 Requerimientos
CSize sizenew(477,392);
CPoint point(20,20);
pdc = GetDC();
picture.Load(nombreImagen);
sizeoriginal = picture.GetSize(pdc);
picture.Draw(pdc,point,sizenew);
• “Crear un proyecto”
• “Gestionar los ficheros M-Files y MEX-Files”
• “Compilar el proyecto”
• “Empaquetado y distribución del componente”
Clases
Cuando se crea un componente, se debe proporcionar uno o más nombres de
clase. El nombre de componente representa el nombre del fichero DLL para ser creado.
Un nombre de clase denota el nombre de la clase que realiza una llamada en un método
específico en tiempo de ejecución. El parentesco entre el nombre del componente y el
nombre de la clase, y los métodos (funciones de Matlab) van dentro una clase particular,
es puramente organizacional.
Como regla general, cuando se compilan muchas funciones de Matlab, esa clase
ayuda a determinar las diferentes categorías de funciones, para crear una clase separada
para cada categoría. El nombre de cada clase sería descriptivo.
Versiones
Los componentes COM también soportan un simple mecanismo de control de
versiones. A cada componente se le asigna un número de versión.
Este número se añade automáticamente dentro del nombre de fichero DLL y de
la información de registro de sistema. Como regla general, la primera versión de un
componente es 1.0 (valor por defecto). Los cambios hechos al componente antes de su
distribución se guardan bajo el mismo número de versión.
Después del desarrollo completo y su distribución, se debe cambiar el número de
versión para los siguientes cambios, Así se pueden manejar fácilmente las diferentes
versiones. El sistema diferencia las clases de versiones diferentes del mismo
componente, aunque tengan el mismo nombre.
Component name: sirve para dar el nombre del componente DLL creado en el
proceso de construcción. Después de escribir el nombre de componente,
automáticamente se introduce un nombre de Clase idéntico al nombre de componente.
Si se prefiere se puede cambiar el nombre de la clase para que sea más descriptivo.
Aunque el nombre del componente y de la clase puede ser el mismo, el nombre de
componente no puede se igual al el nombre de algún fichero M o MEX añadidos al
proyecto más tarde.
Para añadir una clase a su componente se debe introducir el nombre de clase en
el apartado Class name y hacer clic en <<Add>>. La clase añadida ahora aparecerá en
la lista de Clases.
Version: Por defecto el valor de la versión del Proyecto es 1.0.
Project directory: especifica dónde se van a guardar los archivos del proyecto.
El directorio de proyecto se genera automáticamente a partir del nombre de su directorio
actual y el nombre del componente.
Create a singleton MCR indica a Matlab Compiler que debe generar el código
de tal forma que sólo cree una instancia del MCR por aplicación. Si el usuario
selecciona esta opción al crear el componente y usa este componente en una aplicación
de Visual Studio, cada instancia del componente no tiene como resultado la creación de
un nuevo componente MCR, sino que, las instancias siguientes usarán el mismo MCR.
Para añadir los ficheros sólo se tiene que hacer clic en Add File… y seleccionar
el fichero, para quitarlo clic en Remove file una vez seleccionado el fichero a borrar, en
la ventana de proyecto. Si se desea editar el fichero .m pulsar la opción Edit File…
Archivo Función
Figure A-1: Creating a Stand-Alone COM Object with the MATLAB Compiler