尝试存储.ppm图像数据时出错

时间:2015-03-06 00:25:24

标签: c++ opengl ppm cstdio

在尝试存储.ppm文件的图像数据时,我发出错误信息:

  

Map.exe中0x01071712处的未处理异常:0xC0000005:访问冲突写入位置0x0bf13746。

我认为这意味着它写入了不属于图像数组的某些内存部分。但是,我不太清楚如何补救它。任何帮助表示赞赏。为简单起见,我正在为这个C ++程序使用C函数。我对C ++ IO套件的每个小方面都不熟悉,无法尝试任何相关的东西。该程序确实涉及OpenGL的使用,如果这有助于任何事情。

#include <stdio.h>
#include <gl/glut.h>
int x; //x and y determine window size based upon image size
int y;
GLubyte image[3 * 1401 * 1198];
void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glRasterPos2i(0, 0);
    glDrawPixels(x, y, GL_RGB, GL_UNSIGNED_BYTE, image);
    glFlush();
}
//void myFunc(int x, int y){
//}
int main(int argc, char **argv){
    //boilerplate stuff
    FILE *rawData;
    char c;
    char buffer[70];
    int k;
    int red;
    int green;
    int blue;

    rawData = fopen("europe.ppm", "rb");
    fscanf(rawData, "%[^\n]", buffer);
    if(buffer[0] != 'P' || buffer[1] != '6'){
        exit(0);
    }

    fscanf(rawData, "%c", &c);
    while(c == '#'){
        fscanf(rawData, "%[^\n] ", buffer);
        printf("%s\n", buffer);
        fscanf(rawData, "%c", &c);
    }
    ungetc(c, rawData);
    fscanf(rawData, "%d %d %d", &x, &y, &k); //only reading resolution in because of ppm file format

    float s = 255.0 / k;
    if (k == 255) for(int i = 0; 1 < (x * y); i++){
        fscanf(rawData, "%d %d %d", &red, &green, &blue);
        image[3*x*y - (3*i)-3] = red;
        image[3*x*y - (3*i)-2] = green;
        image[3*x*y - (3*i)-1] = blue;
    }
    else for(int i = 0; i < (x*y); i++){
        fscanf(rawData, "%d %d %d", &red, &green, &blue);
        image[3*x*y - (3*i)-3] = red * s;
        image[3*x*y - (3*i)-2] = green * s;
        image[3*x*y - (3*i)-1] = blue * s;
    }
    fclose(rawData);

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(x, y);
    glutCreateWindow("Europe");
    glutDisplayFunc(display);
    //glutPassiveMotionFunc(myFunc);
    glutMainLoop();
    return 0;
}

0 个答案:

没有答案