首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在c中读取OpenGL的jpg纹理

在C语言中,可以使用OpenGL库读取JPG纹理。以下是一个简单的示例代码:

代码语言:c
复制
#include <GL/glut.h>
#include <jpeglib.h>
#include <jerror.h>

// 读取JPG图像并返回纹理ID
GLuint loadJPGTexture(const char *filename) {
    struct jpeg_decompress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE *infile;
    JSAMPARRAY buffer;
    int row_stride;
    GLuint texture;

    // 打开文件
    infile = fopen(filename, "rb");
    if (infile == NULL) {
        printf("Error opening JPEG file %s\n", filename);
        return 0;
    }

    // 初始化JPEG解压结构
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_decompress(&cinfo);
    jpeg_stdio_src(&cinfo, infile);
    jpeg_read_header(&cinfo, TRUE);

    // 获取图像尺寸
    int width = cinfo.image_width;
    int height = cinfo.image_height;

    // 设置解压参数
    jpeg_start_decompress(&cinfo);
    row_stride = cinfo.output_width * cinfo.output_components;

    // 分配内存
    buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);

    // 读取图像数据
    unsigned char *image_data = (unsigned char *) malloc(width * height * 3);
    int row = 0;
    while (cinfo.output_scanline < cinfo.output_height) {
        jpeg_read_scanlines(&cinfo, buffer, 1);
        memcpy(image_data + row * width * 3, buffer[0], row_stride);
        row++;
    }

    // 结束解压
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    fclose(infile);

    // 创建纹理
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image_data);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    // 释放内存
    free(image_data);

    return texture;
}

在这个示例中,我们使用了JPEG库来读取JPG图像,并将其转换为OpenGL纹理。你可以使用这个函数来加载JPG纹理,并将其应用到OpenGL对象上。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

12分22秒

32.尚硅谷_JNI_让 C 的输出能显示在 Logcat 中.avi

5分53秒

Elastic 5分钟教程:使用跨集群搜索解决数据异地问题

11分33秒

061.go数组的使用场景

11分2秒

变量的大小为何很重要?

2分4秒

PS小白教程:如何在Photoshop中制作出水瓶上的水珠效果?

1分26秒

PS小白教程:如何在Photoshop中完美合并两张图片?

4分32秒

PS小白教程:如何在Photoshop中使用蒙版工具插入图片?

1分29秒

U盘根目录乱码怎么办?U盘根目录乱码的解决方法

6分24秒

手搓操作系统踩坑之宏没有加括号-来自为某同学支持和答疑的总结

14分35秒

Windows系统未激活或key不合适,导致内存只能用到2G

3分8秒

智能振弦传感器参数智能识别技术:简化工作流程,提高工作效率的利器

50秒

SD NAND兼容SDIO接口:SD卡通信的关键技术

领券