FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Manejar Trozos de BMP
Hola!
Como novato acabo de darme cuenta que en Delphi se puede manejar trozos de un BMP (Números graficados por así decirlo=0123456789 dibujados en un solo BMP [con una determinada altura y ancho]) y que estos se puedan mostrar en un TPanel o TPaintBox, solo cierta parte. Vi este ejemplo en una Aplicación como ejemplo pero ejecutable ¿Como se realiza este proceso? 1.- Me explico: por así decirlo necesito mostrar solo el "4" y el "9" adyacentemente de la "Cadena BMP" = '0123456789' (gráficado) ¿como lo hago? 2.- De mostrarlo, ¿como simular un parpadeo (blinkado) con un trozo de BMP, el "4" (parpadeando) por así decirlo y el "9" nada que ver? 3.- ¿Donde es más adecuado (óptimo) mostrar este trozo de BMP? ¿En un TPanel? ¿En un TPaintBox? ¿En un TIMage? ¿En un TForm directamente? ¿Es indiferente según necesidades? Saludos |
#2
|
|||
|
|||
He encontrado en la página http://www.latiumsoftware.com/es/pascal/0012.php se asemeja a lo que requiero, pero este recorta seleccionando la imagen con el mouse, Lo que intento es realizar un cierto cálculo y como resultado obtenga un número (en integer o en string) pero que de alguna manera lo relacione con el BMP graficado del 0 al 9 y pueda mostrar solo aquel que me interese del BMP
¿Como relaciono ese cálculo para que pueda recortar solo una parte del BMP y mostrar lo que requiero? Sobre el blinkado, me parece que debo crear un Gif, la pregunta es si tuviera que hacer todos los números (0-9) y todo el abecedario (A-Z) sería un trabajo tedioso. ¿No habrá forma de (relacionado a mi primera pregunta) de capturar sola una parte del BMP y hacerla blinkar realizando otra BMP de números de color diferente? |
#3
|
|||
|
|||
hola
para lo que tu quieres, yo usaria un TPanel y dentro un TImage, cargado con el bmp con los numeros. en el ejemplo de codigo he usado unos TSpeedButton con los numeros del 0 al 9. El TPanel tiene que tener el ancho de un numero cualquiera, que sera, logicamente, la decima parte del bmp
para el tema del parpadeo, puedes hacer mas o menos lo mismo pero con la propiedad Top del TImage, y el bmp hacerlo el doble de alto, la parte de arriba con el numero en verde y la de abajo en rojo, por ejemplo de forma que, usando un TTimer te vaya pasando de rojo a verde segun el intervalo que le pongas. espero haberte aclarado algo, un saludo |
#4
|
|||
|
|||
He encontrado ejemplos como este:
El ejemplo que encontré entre algunos, siempre se basan midiendo de un TPaintBox, TImage o de un TPanel PEGADOS al Form (es decir en el formulario están como OBLIGADOS uno de estos objetos para calcularlos con el CopyRect). Pero no encuentro un ejemplo que teniendo el BitMap en mi Directorio calcular (un x-ancho) y mostrarlo evidentemente en un TPaintBox, TImage, TPanel o en el Form solo UNA PARTE del BMP después de cierto cálculo. Intentaré explicarlo sencillamente, tengo un TButton y un TPanel (con 2 TImage)...... ojo que no se si elegí la forma correcta aquí de los componentes, derepente hubiera sido mejor mostrarlos en un TpaintBox o directamente en el Form en cierta posición, no sé:
En el Case para cada caso mostraría un número de miBMP recortado en los TIMage contenidos en el TPanel o en un TPaintBox. Quizá me digan que más sencillo resultaría crear BMPs para cada uno y mostrarlos.... de acuerdo! pero lo que no quiero es llenar por ejemplo de 10 BMPs como fuente de números en mi Directorio, mucho menos de 23 BMPs del Abecedario. Prefiero crear uno LARGO (uno solo) conteniendo a todos, para luego recortarlos uno a uno y mostrarlos según necesidades y cálculo. Como dije arriba, de los ejemplos que encontré en la Red, todos se basan en el CopyRect teniendo el gráfico en el Form, y así calculando sus medidas y recortarlo. Lo que yo necesito es ver la forma de hacer ese recorte sin que se vea (sin que se encuentre) en el Form, solo sabiendo las medidas de mi BMP que se encuentra en mi directorio y tomando en el Case un ancho diferente para cada uno. - Luego será otro lo del blinkado. Última edición por Deiv fecha: 11-06-2006 a las 02:50:50. |
#5
|
||||
|
||||
Vamos a ir por partes, o mejor por trozos
Primero lo que tu pides:
Para utilizar esa funcion, pasale como parametro la ruta del bmp con los diferentes dibujos uno a continuacion del otro en horizontal, pasale tambien el numero de elementos que contine y el indice del que quieres dibujar teniendo en cuenta que el primero sera el 0 y el ultimo Count-1. Por ejemplo, si el bitmap tiene 10 elementos:
Ahora te digo lo que haria yo, utilizaria un TImageList y en el OnCreate del formulario utilizaria esto para cargar las imagenes:
Y luego cada vez que lo quisiera dibujar utilizaria esto otro:
Tu decides ... Última edición por seoane fecha: 11-06-2006 a las 04:42:29. |
#6
|
|||
|
|||
Hola Deiv
la verdad es que no entiendo realmente tu problema ¿ estas obligado a cargar la imagen ?, por supuesto, siempre tendras que cargarla en memoria para hacer los calculos, da lo mismo el sistema que uses. ¿Que problema te supone cargar un JPG de 32*320 pixel?, son 5 Kb. Ademas, teniendola en tu ejecutable te evitas que por error borren tu imagen del directorio y te salte una excepcion. Con la solucion que te propongo solo tienes que tener un TPanel mas en tu formulario (de 32 * 32 pixel) que contiene la imagen completa y luego solo es cuestion de moverla con un calculo sencillo como es, en tu caso
tienes, por supuesto, muchas otras soluciones, pero mas sencillas y con menos codigo... bueno, tu tienes la ultima palabra, utiliza la solucion que mas te convenga y haznos saber como te queda un saludo |
#7
|
|||
|
|||
Gracias amigos, en este momento no dispongo de Delphi, llegando a casa probaré las sugerencias y luego les comento.
Saludos |
#8
|
|||
|
|||
Gracias Seoane (interesante tu nueva identificación "Registered User") y gracias Madriles por sus orientaciones, me solucionaron el caso, tienen razón existe muchas formas, yo ya la estaba viendo "cuadrado" pensando que no había solución, ahora solo me queda como realizar el BLINKADO con un TTimer para el mismo caso.
|
#9
|
|||
|
|||
parpadeo del bmp
hola de nuevo,
para el parpadeo del bmp, siguiendo con mi propuesta, solo tienes que hacer el bmp el doble de alto, en la parte superior el numero normal y en la parte de abajo el numero de parpadeo, nose en color verde por ejemplo asi con este codigo u otro parecido lo consigues
un saludo |
#10
|
|||
|
|||
No consigo transparentar la parte que recupero del BitMap he colocado el código, en TFormCreate:
al código de arriba:
Mi BitMap tiene fondo blanco, y con el DRAW me dibuja todo pero transparente, en cambio según el código de arriba no logro transparentarlo. Una ayuda please. Saludos Última edición por Deiv fecha: 20-06-2006 a las 20:45:57. |
#11
|
||||
|
||||
Cita:
De todas yo consideraria la posibilidad de usar un TImageList como te sugeri un poco mas arriba. |
#12
|
|||
|
|||
Gracias Seoane, funciona!
|
#13
|
|||
|
|||
Probé el consejo de Seoane con el TImageList, y modifiqué un poco el código para transparentarlo de la siguiente forma:
Funciona bien. He cargado 2 PaintBox capturando en ellos diferentes trozos del BitMap que tengo: Todo bien, he intendado MOVERLOS y cruzar a ambos manteniendo su transparencia con TTimer, y ahí tengo un problemita del cual no me doy cuenta, y requiero de vuestra ayuda: Necesitaba sobreponer uno sobre el otro en el momento de cruce transparentes. Arriba lo que hace es uno sobrepone al otro pero sin transparentarlo (lo tapa, o lo cubre). Es decir necesito en el momento de cruce dibujar uno y encima el otro, pero mostrando ambos ¿Donde voy mal? Pd.- Tal vez no me estoy dejando entender si el código de arriba no estuviera en un TTimer, y los ubico en posición de cruce (left) me muestra bien a ambos (sin TTimer) es lo que requiero en realidad pero que eso se vea así al momento de cruce. Gracias y saludos |
#14
|
|||
|
|||
Finalmente, para el poco conocimiento que tengo logre lo que quería, tuve que darle muchas vueltas al código y finalmente comprendí que el orden de las líneas estaban mal. Este funciona:
Ahora estoy enredado en otro, estoy intentando blinkar habiendo creado el doble de alto como sugirió madriles, pero el ejemplo de arriba está dado para un TImage con la propiedad Top, y yo estoy trabajando con una TImageList como mencioné en mi último post y este no tiene la propiedad Top???? ¿Como podría blinkar esa sección del TImageList? |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
manejar directorios | XxEdwinxX | Varios | 1 | 20-12-2005 23:26:28 |
como manejar el datapicker | jas010 | Conexión con bases de datos | 7 | 04-04-2005 22:32:40 |
Manejar subtitulos... | SGOFx | Varios | 6 | 05-02-2005 21:09:16 |
Manejar dirección API | cardomjar | Varios | 7 | 08-12-2004 13:13:59 |
Manejar Componetes | sergio_015 | OOP | 12 | 25-11-2004 12:01:47 |
|