¿carga de imagenes BMP en C??

Iniciado por Aarondct16, 16 Octubre 2016, 23:23 PM

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

Aarondct16

hola , me gustaría que me pudieran ayudar a cargar una imagen en  lenguaje C, yo uso el compilador de TC20 por que es el que utiliza la universidad.

yo tengo el siguiente código

#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>


int loadbitmap(char *filename,int,int);

main ()
{

loadbitmap("p.bmp",100,100);


getch();
}


int loadbitmap(char *filename,int wid,int hei)
{
FILE *ptr=NULL;
int width,height, ch,ch1,ch2;
unsigned long temp=0,i=0,j=0;
unsigned long ww;
char *linea;
 int adapta, modo;
detectgraph(&adapta,&modo);
initgraph(&adapta,&modo,"");

ptr=fopen(filename,"rb");
linea = (char *) malloc (sizeof(ptr));


if(!ptr) return 0;
width=0;height=0;
fseek(ptr,18,SEEK_SET);
fread(linea, width, 1, ptr);
for(i=0x1;i<=0x10000;i*=0x100)
{
temp=fgetc(ptr);
width+=(temp*i);
}
fseek(ptr,22,SEEK_SET);
for(i=0x1;i<=0x10000;i*=0x100)
{
temp=fgetc(ptr);
height+=(temp*i);
}


ww=width;
if(ww%2)
ww++;ww/=2;
if(ww%4)
ww=(ww/4)*4+4;

fseek(ptr,119,SEEK_SET);
moveto(200,300);


for(i=0;i<height;i++)

for(j=0;j<ww;j++)


{

ch=fgetc(ptr);
ch1=ch;ch2=ch;
ch1=ch1&(0xf0);ch1=ch1>>4;
ch2=ch2&(0x0f);


if(j*2<width)

putpixel((j)*2+wid,(hei+height-1-i),getcol(ch1));
if(j*2+1<width)
putpixel((j)*2+1+wid,(hei+height-1-i),getcol(ch2));
}
fclose(ptr);
return 1;
}



int getcol(int col)
{
switch(col)
{
case 0: return 0;
case 1: return 4;
case 2: return 2;
case 3: return 6;
case 4: return 1;
case 5: return 5;
case 6: return 3;
case 7: return 7;
case 8: return 8;
case 9: return 12;
case 10:return 10;
case 11:return 14;
case 12:return 9;
case 13:return 13;
case 14:return 11;
case 15:return 15;
}
return col;
}




el cual aparentemente si lee la imagen pero a la hora de mostrarla en pantalla no lo hace como me gustaría obteniendo el siguiente resultado



nada en comparacion con la que quiero insertar



les agradecería mucho si me pudieran ayudar

dato000

Para el manejo de imagenes BMP te recomendaria Allegro, que creo que tambien maneja interfaz con cursor mouse y te permite usar estilos para interfaces. (como barras semicirculares y que permitan estilos en letras, cosas que veo que usas en tu login).


echale un vistazo a estos tutos, son faciles de implementar:

http://devcpp-allegro.blogspot.com.co/2012/01/mi-primer-ejemplo.html
http://devcpp-allegro.blogspot.com.co/2012/02/como-creo-un-menu-en-c.html

Hay otras librerias, como SDL, SFML OpenGL, MiniWin (este lo recomiendo especialmente por su increible facilidad de manejo y el excelente tutor que es Paueky)

Solo mira un poco:

https://www.youtube.com/watch?v=2yagNLyWa-M
https://miniwin.readthedocs.io/en/latest/



Aarondct16

es que creo que ningunas de esas librerias son compatibles con turbo C y puesto a que la universidad me exige ese compilador no puedo cambiar a otro

dato000

Pues deberias cambiar el compilador y ese horrendo turboc, una de las cosas de la universidad que los docentes esperan de sus estudiantes es que se salgan de la curva, muestren categoria por medio de la iniciativa y el ingenio.

Maldita sea, yo casi nunca seguia esas indicaciones de programas horribles que usaban ahi, tanto que practicamente modernice solo 3 laboratorios enteros porque sus encargados eran unos fucking vagos.

Por la universidad conoci esos horrendos adefecios de TurboC, TurboB, Borland, Dev-C++ y no los use mucho tiempo, siempre recurria a mejores alternativas, y los profesores la mayoria de veces no ponian problema si se les explicaba razonablemente mis elecciones.

Lo unico que puedo recomendar al respecto al uso de ese con graficas, es seguir un tutorial preciso de ese tema o consultar la documentación oficial al respecto:

https://www.youtube.com/watch?v=HntBYTdagas
http://electrosofts.com/cgraphics/
http://www.softwareandfinance.com/Turbo_C/Graphics/Index.html



engel lex

la cosa no está en montar guerra... si está bien proponer, pero para acá no es del todo una solucíon

leete la documentación de la estructura del bmp, porque lo que se ve es que parece que estás cuadranmdo mal  la cantidad de lineas y parte de la linea se está dibujando en la siguiente... modifica el ancho
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.