Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Aarondct16 en 16 Octubre 2016, 23:23 pm



Título: ¿carga de imagenes BMP en C??
Publicado por: Aarondct16 en 16 Octubre 2016, 23:23 pm
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

Código
  1. #include <stdio.h>
  2. #include <dos.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <graphics.h>
  6.  
  7.  
  8. int loadbitmap(char *filename,int,int);
  9.  
  10. main ()
  11. {
  12.  
  13. loadbitmap("p.bmp",100,100);
  14.  
  15.  
  16. }
  17.  
  18.  
  19. int loadbitmap(char *filename,int wid,int hei)
  20. {
  21. FILE *ptr=NULL;
  22. int width,height, ch,ch1,ch2;
  23. unsigned long temp=0,i=0,j=0;
  24. unsigned long ww;
  25. char *linea;
  26.  int adapta, modo;
  27. detectgraph(&adapta,&modo);
  28. initgraph(&adapta,&modo,"");
  29.  
  30. ptr=fopen(filename,"rb");
  31. linea = (char *) malloc (sizeof(ptr));
  32.  
  33.  
  34. if(!ptr) return 0;
  35. width=0;height=0;
  36. fseek(ptr,18,SEEK_SET);
  37. fread(linea, width, 1, ptr);
  38. for(i=0x1;i<=0x10000;i*=0x100)
  39. {
  40. temp=fgetc(ptr);
  41. width+=(temp*i);
  42. }
  43. fseek(ptr,22,SEEK_SET);
  44. for(i=0x1;i<=0x10000;i*=0x100)
  45. {
  46. temp=fgetc(ptr);
  47. height+=(temp*i);
  48. }
  49.  
  50.  
  51. ww=width;
  52. if(ww%2)
  53. ww++;ww/=2;
  54. if(ww%4)
  55. ww=(ww/4)*4+4;
  56.  
  57. fseek(ptr,119,SEEK_SET);
  58. moveto(200,300);
  59.  
  60.  
  61. for(i=0;i<height;i++)
  62.  
  63. for(j=0;j<ww;j++)
  64.  
  65.  
  66. {
  67.  
  68. ch=fgetc(ptr);
  69. ch1=ch;ch2=ch;
  70. ch1=ch1&(0xf0);ch1=ch1>>4;
  71. ch2=ch2&(0x0f);
  72.  
  73.  
  74. if(j*2<width)
  75.  
  76. putpixel((j)*2+wid,(hei+height-1-i),getcol(ch1));
  77. if(j*2+1<width)
  78. putpixel((j)*2+1+wid,(hei+height-1-i),getcol(ch2));
  79. }
  80. fclose(ptr);
  81. return 1;
  82. }
  83.  
  84.  
  85.  
  86. int getcol(int col)
  87. {
  88. switch(col)
  89. {
  90. case 0: return 0;
  91. case 1: return 4;
  92. case 2: return 2;
  93. case 3: return 6;
  94. case 4: return 1;
  95. case 5: return 5;
  96. case 6: return 3;
  97. case 7: return 7;
  98. case 8: return 8;
  99. case 9: return 12;
  100. case 10:return 10;
  101. case 11:return 14;
  102. case 12:return 9;
  103. case 13:return 13;
  104. case 14:return 11;
  105. case 15:return 15;
  106. }
  107. return col;
  108. }



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
(https://s16.postimg.org/ueokps9v9/subir.jpg)


nada en comparacion con la que quiero insertar

(https://s21.postimg.org/5l7haqzrr/image.jpg)

les agradecería mucho si me pudieran ayudar


Título: Re: ¿carga de imagenes BMP en C??
Publicado por: dato000 en 17 Octubre 2016, 02:53 am
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/


Título: Re: ¿carga de imagenes BMP en C??
Publicado por: Aarondct16 en 17 Octubre 2016, 04:30 am
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


Título: Re: ¿carga de imagenes BMP en C??
Publicado por: dato000 en 17 Octubre 2016, 05:28 am
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


Título: Re: ¿carga de imagenes BMP en C??
Publicado por: engel lex en 17 Octubre 2016, 05:47 am
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