我的 bmp imporer 怎么了?

Posted

技术标签:

【中文标题】我的 bmp imporer 怎么了?【英文标题】:What's wrong with my bmp imporer? 【发布时间】:2012-12-26 15:43:55 【问题描述】:

所以我制作了一个小型 bmp 导入器,以便能够在 opengl 中使用纹理,但是在我加载图片和其他东西而不是纹理之后,它只是将颜色棕色放在 ... sqare 我也尝试过不止一种纹理,我得到了同样的结果。 这是一些代码:

int LoadBitmap ( char *filename) 
  BITMAPFILEHEADER fileheader;
  BITMAPINFOHEADER fileinfo;
  RGBTRIPLE rgb;
  unsigned char *texture;
  FILE *f=fopen(filename,"r");
  num_texture++;
  fread(&fileheader,sizeof(fileheader),1,f);
  fread(&fileinfo,sizeof(fileinfo),1,f);
  cout<<fileinfo.biWidth<<" "<<fileinfo.biHeight<<endl;

  texture=new unsigned char[fileinfo.biWidth*fileinfo.biHeight*4];
  int j=0;
  for(int i=0;i<fileinfo.biWidth*fileinfo.biHeight;i++)
  
    fread(&rgb,sizeof(rgb),1,f);

    texture[j]=rgb.rgbtRed;
    texture[j+1]=rgb.rgbtGreen;
    texture[j+2]=rgb.rgbtBlue;
    texture[j+3]=255;
    j+=4;
  
  fclose(f);

  glBindTexture(GL_TEXTURE_2D,num_texture);

  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);


  glTexImage2D(GL_TEXTURE_2D,0,4,fileinfo.biWidth,fileinfo.biHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,texture);
  gluBuild2DMipmaps(GL_TEXTURE_2D,4,fileinfo.biWidth,fileinfo.biHeight,GL_RGBA,GL_UNSIGNED_BYTE,texture);

  delete[] texture;
  return num_texture;
  return 0;

这里是绘图部分:

glEnable(GL_TEXTURE_2D);
int a=LoadBitmap("texture1.bmp");
glBindTexture(GL_TEXTURE_2D,a);
glBegin(GL_QUADS);
  glTexCoord2f(0,0);
  glVertex3f(-10,-10,0 );
  glTexCoord2f(0,1);
  glVertex3f(-10,10,0);
  glTexCoord2f(1,1);
  glVertex3f(10,10,0 );
  glTexCoord2f(1,0);
  glVertex3f(10,-10,0 );
 glEnd();

【问题讨论】:

【参考方案1】:
FILE *f=fopen(filename,"r");

您可能想尝试以二进制模式打开文件,它可能只是检测文件结尾,或者以其他方式破坏输入。

FILE *f=fopen(filename,"rb");

您还对文件的实际格式做了一些假设,但假设您自己生成了 BMP,我想这可能没问题。

【讨论】:

Iv 在询问之前查看了 bmp 格式:en.wikipedia.org/wiki/BMP_file_format 但遗憾的是我不知道如何实现那些最佳的东西(我的意思是我真的不知道如何通过它们,如果他们不在那里)我希望能够导入任何 bmp 但我不确定如果没有结构名称如何在乞求时拥有某种标题或 idk,因为它们具有可变大小

以上是关于我的 bmp imporer 怎么了?的主要内容,如果未能解决你的问题,请参考以下文章

matlab 保存的图像总有白边 怎么回事

HALCON 怎么处理 C# 已经读取好的图片?

怎么把BMP格式的照片转化成JPG的?详细

matlab imread函数

为啥 skimage.imread() 不为我的 bmp 返回 RGB 值?

电脑中BMP格式图片无法打开