Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "GL\glew.h"
- #include "cargarbmp.hpp"
- GLuint cargarBmp(const char * rutaArchivo) {
- //Leer cabacera del archivo
- unsigned char cabecera[54]; //cabecera
- unsigned int posicionData; //Posicion de donde empieza la data
- unsigned int ancho, alto;
- unsigned int tamanoImagen; //ancho * alto * 3
- unsigned char *data; //Informacion RGB
- //FILE * archivo = fopen(rutaArchivo, "rb");
- FILE * archivo;
- fopen_s(&archivo, rutaArchivo, "rb");
- if (!archivo) {
- printf("No se pudo abrir el archivo %s \n", rutaArchivo);
- return 0;
- }
- if (fread(cabecera, 1, 54, archivo) != 54) { //Archivo BMP no es válido
- printf("Archivo BMP no es válido");
- return 0;
- }
- if (cabecera[0] != 'B' || cabecera[1] != 'M') { //No es un archivo BMP
- printf("Archivo BMP no es válido");
- return 0;
- }
- posicionData = *(int *)&(cabecera[0x0A]);
- tamanoImagen = *(int *)&(cabecera[0x22]);
- ancho = *(int *)&(cabecera[0x12]);
- alto = *(int *)&(cabecera[0x16]);
- if (tamanoImagen == 0) {
- tamanoImagen = ancho * alto * 3;
- //Multiplicamos por 3 porque es RGB
- }
- if (posicionData == 0) {
- posicionData = 54;
- //Inicializamos justo despues de la cabecera
- }
- data = new unsigned char[tamanoImagen];
- fread(data, 1, tamanoImagen, archivo);
- fclose(archivo);
- GLuint texturaID;
- //Generar textura
- glGenTextures(1, &texturaID);
- //Le digo a OpenGL que voy a trabajar
- //sobre esa textura
- glBindTexture(GL_TEXTURE_2D, texturaID);
- //Mandar imagen a OpenGL
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho,
- alto, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
- //Parametros de textura
- //Al hacer zoom se tomará el pixel mas cercano
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
- GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
- return texturaID;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement