21xrx.com
2025-03-17 16:45:57 Monday
文章检索 我的文章 写文章
如何在C++中导入图片?
2023-07-13 19:20:03 深夜i     12     0
C++ 导入 图片 方法

在C++中,导入图片可以通过许多不同的方法,其中一种方法是使用OpenGL库。OpenGL是一个专门用于图形渲染的库,它提供了许多函数和工具来处理图形和图像。

在使用OpenGL时,需要创建一个纹理对象来加载图片。纹理是一个图像单元的集合,它们可以绘制到三维对象表面上,以创建更多真实感觉的图像。

下面是一个使用OpenGL库的简单例子,演示了如何在C++中导入图片:

#include <GL/glut.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int width = 400;
int height = 400;
GLuint texture[1];
void loadTexture(void)
{
  FILE *file;
  unsigned char *image;
  int imgWidth;
  int imgHeight;
  GLenum type;
  file = fopen("texture.bmp", "rb");
  if (file == NULL)
  {
    cout << "Error opening the file." << endl;
    exit(0);
  }
  fseek(file, 18, SEEK_CUR);
  fread(&imgWidth, 4, 1, file);
  fread(&imgHeight, 4, 1, file);
  fseek(file, 24, SEEK_CUR);
  image = (unsigned char *)malloc(imgWidth * imgHeight * 3);
  fread(image, imgWidth * imgHeight * 3, 1, file);
  fclose(file);
  glGenTextures(1, &texture[0]);
  glBindTexture(GL_TEXTURE_2D, texture[0]);
  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imgWidth, imgHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
  free(image);
}
void init(void)
{
  glEnable(GL_TEXTURE_2D);
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glMatrixMode(GL_PROJECTION);
  gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
  loadTexture();
}
void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glBindTexture(GL_TEXTURE_2D, texture[0]);
  glBegin(GL_POLYGON);
  glTexCoord2f(0.0, 0.0);
  glVertex2f(-1.0, -1.0);
  glTexCoord2f(0.0, 1.0);
  glVertex2f(-1.0, 1.0);
  glTexCoord2f(1.0, 1.0);
  glVertex2f(1.0, 1.0);
  glTexCoord2f(1.0, 0.0);
  glVertex2f(1.0, -1.0);
  glEnd();
  glFlush();
}
int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(width, height);
  glutInitWindowPosition(100, 100);
  glutCreateWindow("Texture Mapping");
  init();
  glutDisplayFunc(display);
  glutMainLoop();
  return 0;
}

这段代码将图片文件导入为纹理,然后绘制了一个使用纹理映射的正方形。用户可以替换图片文件的文件名,以便导入其他图片。

总之,使用OpenGL库是一种简单和方便的方法来在C++中导入图片。值得指出的是,还有其他库和工具可以进行类似的操作,包括OpenCV、SOIL等。在选择使用哪种方法时,需要根据实际需求和开发环境进行评估和选择。

  
  

评论区