Autor Tema: Mostrar imagen bmp de manera aleatoria  (Leído 5937 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Mostrar imagen bmp de manera aleatoria
« en: 02 de Abril de 2012, 13:42:34 »
Hola amigos, utilizando el graphic resource de microchip, obtengo un archivo .c, el cual es una imagen bmp, lo que deseo hacer es mostrarla en un display TFT, me gustaria hacerlo dibujando punto por punto de una manera no lineal ni en orden, para que ese efecto haga que no se note como va dibujando pixel a pixel.

Código: C
  1. asm(".section .const, psv");
  2.  
  3. extern const char __logo_BMP_desa[] __attribute__((space(prog), aligned(2)));
  4.  
  5. const IMAGE_FLASH logo_BMP_desa =
  6. {
  7.     (FLASH | IMAGE_MBITMAP | COMP_NONE),
  8.     (FLASH_BYTE *)__logo_BMP_desa
  9. };
  10. asm(".section *, code");
  11. asm(".global ___logo_BMP_desa");
  12. asm(".align 2");
  13. asm("___logo_BMP_desa:");
  14. /****************************************
  15.  * Bitmap header
  16.  ****************************************/
  17. asm(".byte 0x00");           // Compresssion
  18. asm(".byte 0x10");           // Color Depth
  19. asm(".byte 0xDD, 0x00");     // Height
  20. asm(".byte 0x90, 0x01");     // Width
  21. /********************************
  22.  * Bitmap Image Body
  23.  *********************************/
  24. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  25. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  26. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  27. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  28. ......
  29. ....
  30. ...

Como puedo hacer para acceder a cada byte del archivo?
Estoy usando C30.

Saludos
« Última modificación: 02 de Abril de 2012, 17:28:00 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #1 en: 02 de Abril de 2012, 14:48:50 »
Encontré algo de codigo en la web de suky.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #2 en: 02 de Abril de 2012, 21:30:19 »
Buscando en la carpeta de microchip encontre como hacen dibujo de archivo bmp, estoy intentando usar solo parte del codigo y meterlo en el mio, pero la data generada por el soft hace referencia a graphics.h y este a un monton de cosas que no me interesan.

Como puedo hacer para mi archivo no dependa de ese bendito graphics.h.

El codigo para mostrar el bmp es este
Código: C
  1. void PutImage16BPP(SHORT left, SHORT top, FLASH_BYTE *bitmap, BYTE stretch)
  2. {
  3.     register FLASH_WORD *flashAddress;
  4.     register FLASH_WORD *tempFlashAddress;
  5.     WORD                sizeX, sizeY;
  6.     register WORD       x, y;
  7.     WORD                temp;
  8.     register BYTE       stretchX, stretchY;
  9.  
  10.     // Move pointer to size information
  11.     flashAddress = (FLASH_WORD *)bitmap + 1;
  12.  
  13.     // Read image size
  14.     sizeY = *flashAddress;
  15.     flashAddress++;
  16.     sizeX = *flashAddress;
  17.     flashAddress++;
  18.  
  19.     DisplayEnable;
  20.     for(y = 0; y < sizeY; y++)
  21.     {
  22.         tempFlashAddress = flashAddress;
  23.         for(stretchY = 0; stretchY < stretch; stretchY++)
  24.         {
  25.             flashAddress = tempFlashAddress;
  26.             SetAddress(left, top);
  27.             for(x = 0; x < sizeX; x++)
  28.             {
  29.  
  30.                 // Read pixels from flash
  31.                 temp = *flashAddress;
  32.                 flashAddress++;
  33.  
  34.                 // Set color
  35.                 SetColor(temp);
  36.  
  37.                 // Write pixel to screen                  
  38.                 for(stretchX = 0; stretchX < stretch; stretchX++)
  39.                 {
  40.                     WritePixel(_color);
  41.                 }
  42.             }
  43.             top++;
  44.         }
  45.     }
  46. }

Y la imagen esta por aca

Código: C
  1. asm(".section .const, psv");
  2.  
  3. extern const char __logo_BMP_desa[] __attribute__((space(prog), aligned(2)));
  4.  
  5. const IMAGE_FLASH logo_BMP_desa =
  6. {
  7.    (FLASH | IMAGE_MBITMAP | COMP_NONE),
  8.    (FLASH_BYTE *)__logo_BMP_desa
  9. };
  10. asm(".section *, code");
  11. asm(".global ___logo_BMP_desa");
  12. asm(".align 2");
  13. asm("___logo_BMP_desa:");
  14. /****************************************
  15. * Bitmap header
  16. ****************************************/
  17. asm(".byte 0x00");           // Compresssion
  18. asm(".byte 0x10");           // Color Depth
  19. asm(".byte 0xDD, 0x00");     // Height
  20. asm(".byte 0x90, 0x01");     // Width
  21. /********************************
  22. * Bitmap Image Body
  23. *********************************/
  24. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  25. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  26. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  27. asm(".byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF");
  28. ......
  29. ....
  30. ...

Saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #3 en: 02 de Abril de 2012, 23:38:48 »
Y la imagen donde la tenes? En una eeprom, SD, o? En la memoria de programa está  :mrgreen:

Citar
Como puedo hacer para mi archivo no dependa de ese bendito graphics.h.

Vas a tener que ver que vincula la funcion que utilizas con los include  :tongue: Microchip en eso complica bastante las cosas. Por ahí te conviene entender como es que están guardados los datos de la imagen en el archivo y hacer tu propia función

Dibujar pixeles aleatorios va a ser un toque complejo me parece, pensando en que elijes al azar, verificando que no se haya elegido antes y además de completar el dibujo  :tongue: A estas horas de la noche no se me ocurre nada  :x
« Última modificación: 02 de Abril de 2012, 23:42:21 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #4 en: 03 de Abril de 2012, 00:50:26 »
La imagen esta en la flash del pic.
Logre hacer que ya no me de errores, colocandole los siguientes includes

#include "GenericTypeDefs.h"
#include "Primitive.h"

y eliminando el graphics.h

En el display solo se muestra una linea  :?, lo de aleatoria lo estuve pensando y mejor lo hare por bloques fijos desordenados :z) pero la idea sigue siendo la misma, evitar que se vea el dibujo pixel a pixel, línea a línea.

En lo que estoy es mostrar la imagen, aun no logro hacerlo, por los codigos que he vistao, creo que voy bien.

Sigo en esto  :)

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #5 en: 03 de Abril de 2012, 01:20:22 »
Logré dibujar el bmp en el display, la imagen esta pequeña, ahora me toca hacerla de tamaño completo.

sigo con esto  :)
« Última modificación: 03 de Abril de 2012, 01:39:05 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #6 en: 03 de Abril de 2012, 02:18:21 »
Ahora ya es muy grande el archivo y no compila por el tamaño.  :?

Y ahora, ya no puedo poner memoria externa. otro  :?
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #7 en: 03 de Abril de 2012, 08:34:00 »
Ahora ya es muy grande el archivo y no compila por el tamaño.  :?

Y ahora, ya no puedo poner memoria externa. otro  :?

Si, las imágenes a color ocupan mucho espacio. Generalmente se puede usar memorias de 16 Mbit o una SD Card  :?


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #8 en: 03 de Abril de 2012, 12:32:01 »
Bueno aun sigo en esto, ya muestro imagen a pantalla completa haciendo un zoom de 3, no tiene buena resolución pero bueno pasa, lo de la muestra "aleatoria" aun esta en pausa, y es que tengo que poner algo mas de codigo y ya no entra, me dice que use un pic de mas capacidad, estoy usando un pic24HJ256Gp210, lo raro es ke en el memory usage me muestra 34818 de 87552 en flash y en ram 1626 de 16384, acaso el archivo de la imagen bmp no es cargada en el calculo del memory usage o hay que hacer algun arreglo en el mplab.

Ayudenme please.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #9 en: 03 de Abril de 2012, 19:42:03 »
Definitivamente el pic no esta lleno, veo en el soft del pickit3 que aun queda bastante memoria libre, pero me sigue dando este error:

ILI9327+HX.o(.text+0x18): In function `Lcd_Init':
D:\CARLOS\CARLOS\codigo\ILI9327+HX.c:127: Link Error: PC Relative branch to '___delay32' is out of range. Suggest large-code model.
ILI9327+HX.o(.text+0x20):D:\CARLOS\CARLOS\codigo\ILI9327+HX.c:129: Link Error: PC Relative branch to '___delay32' is out of range. Suggest large-code model.
ILI9327+HX.o(.text+0x28):D:\CARLOS\CARLOS\codigo\ILI9327+HX.c:131: Link Error: PC Relative branch to '___delay32' is out of range. Suggest large-code model.
ILI9327+HX.o(.text+0x3c):D:\CARLOS\CARLOS\codigo\ILI9327+HX.c:136: Link Error: PC Relative branch to '___delay32' is out of range. Suggest large-code model.
Link step failed.
----------------------------------------------------------------------
Release build of project `D:\CARLOS\CARLOS\codigo\asdf.mcp' failed.
Language tool versions: pic30-as.exe v3.31, pic30-gcc.exe v3.31, pic30-ld.exe v3.31, pic30-ar.exe v3.31
Tue Apr 03 17:32:24 2012
----------------------------------------------------------------------
BUILD FAILED


Que puedo hacer con eso? Estara entrando a tallar la limitación de codigo?, no creo.

 :?



A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #10 en: 04 de Abril de 2012, 21:28:29 »
Alguna sugerencia  :lol:
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #11 en: 04 de Abril de 2012, 21:38:51 »
Hola! Viste que te sugiere algo? Fíjate que se puede hacer en Project/Build Options/Project ... MPLAB C30/Categories/Memory Model  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #12 en: 05 de Abril de 2012, 13:04:40 »
Joer suky, ya compilo, estaba mirando pero lo del heap size y no me di cuenta de eso.

Crei que me sugeria un pic con mas memoria  :lol:

Muchas gracias suky  :)

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Vtronic

  • PIC16
  • ***
  • Mensajes: 121
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #13 en: 05 de Abril de 2012, 17:16:36 »
La imagen bmp se dibuja píxel por píxel, lo que se me ocurre es

hacer una matriz con dos vectores del mismo tamaño de la imagen
llenar con 1 la posición de la matriz que corresponda la coordenada del píxel
generar las posiciones del píxel aleatoriamente
verificar
            si esta ya esta llena la casilla generar otra coordenada
            si esta vaciá dibujar el píxel con el valor correspondiente
haces esto hasta que los píxeles dibujados sean igual a la cantidad de píxeles de la imagen

mencione vectores porque no se me viene el nombre de la función para hacer una matriz   :oops: algo parecido implemente en un juego de ajedrez tal vez se ponga lento al dibujar en la pantalla pero es una opción

Saludos.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mostrar imagen bmp de manera aleatoria
« Respuesta #14 en: 09 de Abril de 2012, 23:54:36 »
Nuevamente aparece el error  :(,


Program Memory  [Origin = 0x200, Length = 0x2a9fe]

section                    address   length (PC units)   length (bytes) (dec)
-------                    -------   -----------------   --------------------
.text                        0x200              0x177a          0x2337  (9015)
.const                      0x197a               0x6f6           0xa71  (2673)
.text                       0x2070              0xa418          0xf624  (63012)
C:\Users\Carlos\AppData\Local\Temp/cc6RQS3R.s.scn1    0xc488              0x4ad6          0x7041  (28737)
.text                      0x10f5e               0x9ec           0xee2  (3810)
.dinit                     0x1194a               0x26e           0x3a5  (933)
.text                      0x11bb8               0x1e8           0x2dc  (732)

                     Total program memory used (bytes):        0x1a970  (108912) 41%


Data Memory  [Origin = 0x800, Length = 0x4000]

section                    address      alignment gaps    total length  (dec)
-------                    -------      --------------    -------------------
.nbss                        0x800                   0           0x112  (274)
.ndata                       0x912                   0           0x10e  (270)
.data                        0xa20                   0           0x200  (512)
.dconst                      0xc20                   0            0x2a  (42)
.data                        0xc4a                   0            0x26  (38)
.bss                         0xc70                   0             0x6  (6)
.heap                        0xc76                   0           0x3e8  (1000)

                        Total data memory used (bytes):          0x85e  (2142) 13%


Dynamic Memory Usage

region                     address                      maximum length  (dec)
------                     -------                      ---------------------
heap                         0xc76                               0x3e8  (1000)
stack                       0x105e                              0x37a2  (14242)

                        Maximum dynamic memory (bytes):         0x3b8a  (15242)

c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(fputc.XXo)(.libc.fputc+0x6e):fake: Link Error: PC Relative branch to '_write' is out of range. Suggest large-code model.
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(flsbuf.XXo)(.libc._flsbuf+0x30):fake: Link Error: PC Relative branch to '_write' is out of range. Suggest large-code model.
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(flsbuf.XXo)(.libc._flsbuf+0x52):fake: Link Error: PC Relative branch to '_write' is out of range. Suggest large-code model.
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(flsbuf.XXo)(.libc._flsbuf+0x76):fake: Link Error: PC Relative branch to '_write' is out of range. Suggest large-code model.
Link step failed.
----------------------------------------------------------------------






alguna otra cosa por hacer que no sea poner memoria externa?

Saludos
« Última modificación: 09 de Abril de 2012, 23:58:00 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.


 

anything