Hello everyone.Im new to OpenGL…
I tried opening a bitmap image(.bmp) in my program and then displaying it using the OpenGL primitives…
I just used GL_POINTS and then put the pixel info onto the screen…
But this is not working for all bitmaps!!
Here is the code:
#include<gl/glut.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct {
unsigned short type;
unsigned long size;
unsigned short reserved1;
unsigned short reserved2;
unsigned long offsetbits;
} BITMAPFILEHEADER1;
typedef struct {
unsigned long size;
unsigned long width;
unsigned long height;
unsigned short planes;
unsigned short bitcount;
unsigned long compression;
unsigned long sizeimage;
long xpelspermeter;
long ypelspermeter;
unsigned long colorsused;
unsigned long colorsimportant;
} BITMAPINFOHEADER1;
typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
} SINGLE_PIXEL1;
void display()
{
FILE *fp;unsigned char p;
int x=0,y=0,c=0;
float r,g,b;
BITMAPINFOHEADER1 bitm;
BITMAPFILEHEADER1 bitmp;
glClearColor(1.0,1.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
fp = fopen("****","rb");//Filename is given
fread(&bitmp,14,1,fp);
fread(&bitm,40,1,fp);
gluOrtho2D(0.0,bitm.width,0.0,bitm.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0,0,bitm.width,bitm.height);
glBegin(GL_POINTS);
while(!feof(fp))
{
fread(&p,1,1,fp);
b = p/255;
fread(&p,1,1,fp);
g = p/255;
fread(&p,1,1,fp);
r = p/255;
glColor3f(r,g,b);
glVertex2i(x++,y);
if(x == bitm.width)
{
x = 0;
y++;
}
}
glEnd();
glFlush();
fclose(fp);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,150);
glutCreateWindow("BITMAP");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}