2013-11-09 2 views
0

Imageloader.cppЧто не так с кодом загрузки? "Утверждение не удалось: "Не удалось найти файл""

// some code 

Image* loadBMP(const char* filename) { 
    ifstream input; 
    input.open(filename, ifstream::binary); 
    assert(!input.fail() || !"Could not find file"); **// I am getting this ERROR!** 
    char buffer[2]; 
    input.read(buffer, 2); 
    assert(buffer[0] == 'B' && buffer[1] == 'M' || !"Not a bitmap file"); 
    input.ignore(8); 
    int dataOffset = readInt(input); 

    //Read the header 
    int headerSize = readInt(input); 
    int width; 
    int height; 
    switch(headerSize) { 
     case 40: 
      //V3 
      width = readInt(input); 
      height = readInt(input); 
      input.ignore(2); 
      assert(readShort(input) == 24 || !"Image is not 24 bits per pixel"); 
      assert(readShort(input) == 0 || !"Image is compressed"); 
      break; 
     case 12: 
      //OS/2 V1 
      width = readShort(input); 
      height = readShort(input); 
      input.ignore(2); 
      assert(readShort(input) == 24 || !"Image is not 24 bits per pixel"); 
      break; 
     case 64: 
      //OS/2 V2 
      assert(!"Can't load OS/2 V2 bitmaps"); 
      break; 
     case 108: 
      //Windows V4 
      assert(!"Can't load Windows V4 bitmaps"); 
      break; 
     case 124: 
      //Windows V5 
      assert(!"Can't load Windows V5 bitmaps"); 
      break; 
     default: 
      assert(!"Unknown bitmap format"); 
    } 

    //Read the data 
    int bytesPerRow = ((width * 3 + 3)/4) * 4 - (width * 3 % 4); 
    int size = bytesPerRow * height; 
    auto_array<char> pixels(new char[size]); 
    input.seekg(dataOffset, ios_base::beg); 
    input.read(pixels.get(), size); 

    //Get the data into the right format 
    auto_array<char> pixels2(new char[width * height * 3]); 
    for(int y = 0; y < height; y++) { 
     for(int x = 0; x < width; x++) { 
      for(int c = 0; c < 3; c++) { 
       pixels2[3 * (width * y + x) + c] = 
        pixels[bytesPerRow * y + 3 * x + (2 - c)]; 
      } 
     } 
    } 

    input.close(); 
    return new Image(pixels2.release(), width, height); 
} 

main.cpp -> INIT функция

void init() { 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 
    glEnable(GL_NORMALIZE); 
    glEnable(GL_COLOR_MATERIAL); 

    Image* image = loadBMP("vtr.bmp"); 
    _textureId = loadTexture(image); 
    delete image; 
} 

() Что не так с этим? Потому что я получаю assert (! Input.fail() ||! "Не удалось найти файл"); эта ошибка, но мой файл находится в моей папке проекта.

EDIT: ИСПРАВЛЕНО, используя полный путь к моему файлу. как это: C: \ Users \ John \ Desktop \ project3 \ file.bmp

+1

Ваша папка проекта не обязательно в нужном месте. Ваша программа будет искать файл в текущем рабочем каталоге *, и кто знает, где это, это может быть что угодно. – john

ответ

0

Существуют различные возможности для этой неудачи: 1. Путь не может быть решена. Попробуйте использовать полный путь для имени файла. ИЛИ 2. Возможно, вам потребуется указать файл openmode.

std::ifstream::in | std::ifstream::binary 

Надеюсь, это поможет.

+0

Как я могу узнать точное местоположение, где моя программа читает файл? Кажется, что нет папки проекта. – Ernusc

+0

Вы можете указать путь явно.
, например.
'code' loadBMP (" C: \ mydocs \ xxx.bmp "); // Winows
'code'loadBMP ("/home/user/xxx.bmp "); // Linux/UNIX


Обычно программа ищет файлы по умолчанию в каталоге установки. –

Смежные вопросы