Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1.  
  2. #include "stdafx.h"
  3.  
  4. #include "GL\glew.h"
  5. #include "cargarbmp.hpp"
  6.  
  7. GLuint cargarBmp(const char * rutaArchivo) {
  8. //Leer cabacera del archivo
  9. unsigned char cabecera[54]; //cabecera
  10. unsigned int posicionData; //Posicion de donde empieza la data
  11. unsigned int ancho, alto;
  12. unsigned int tamanoImagen; //ancho * alto * 3
  13. unsigned char *data; //Informacion RGB
  14.  
  15. //FILE * archivo = fopen(rutaArchivo, "rb");
  16. FILE * archivo;
  17. fopen_s(&archivo, rutaArchivo, "rb");
  18.  
  19.  
  20. if (!archivo) {
  21. printf("No se pudo abrir el archivo %s \n", rutaArchivo);
  22. return 0;
  23. }
  24.  
  25. if (fread(cabecera, 1, 54, archivo) != 54) { //Archivo BMP no es válido
  26. printf("Archivo BMP no es válido");
  27. return 0;
  28. }
  29.  
  30. if (cabecera[0] != 'B' || cabecera[1] != 'M') { //No es un archivo BMP
  31. printf("Archivo BMP no es válido");
  32. return 0;
  33. }
  34.  
  35. posicionData = *(int *)&(cabecera[0x0A]);
  36. tamanoImagen = *(int *)&(cabecera[0x22]);
  37. ancho = *(int *)&(cabecera[0x12]);
  38. alto = *(int *)&(cabecera[0x16]);
  39.  
  40. if (tamanoImagen == 0) {
  41. tamanoImagen = ancho * alto * 3;
  42. //Multiplicamos por 3 porque es RGB
  43. }
  44. if (posicionData == 0) {
  45. posicionData = 54;
  46. //Inicializamos justo despues de la cabecera
  47. }
  48.  
  49. data = new unsigned char[tamanoImagen];
  50. fread(data, 1, tamanoImagen, archivo);
  51.  
  52. fclose(archivo);
  53.  
  54. GLuint texturaID;
  55. //Generar textura
  56. glGenTextures(1, &texturaID);
  57. //Le digo a OpenGL que voy a trabajar
  58. //sobre esa textura
  59. glBindTexture(GL_TEXTURE_2D, texturaID);
  60. //Mandar imagen a OpenGL
  61. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho,
  62. alto, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
  63.  
  64. //Parametros de textura
  65. //Al hacer zoom se tomará el pixel mas cercano
  66. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
  67. GL_NEAREST);
  68. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
  69. GL_NEAREST);
  70.  
  71. return texturaID;
  72.  
  73.  
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement