Тот же DevIL-проект в WIN терпит неудачу с Ubuntu - PullRequest
0 голосов
/ 05 января 2020

Используя DevIL в Linux, функция ilCopyPixels () всегда возвращает false, тогда как в Windows она работает нормально. Я пытаюсь манипулировать входным изображением с помощью библиотеки, и оно действительно работает нормально, но нет никаких шансов, когда я пытаюсь скомпилировать его с g ++ в Ubuntu, например:

g ++ main. cpp PictureOperation.h PictureOperation. cpp StopWatch.h StopWatch. cpp -std = gnu ++ 11 -lIL

Я не получаю сообщение об ошибке, поэтому он тоже хорошо компилируется, но функция ilCopyPixels из DevIL возвращает false в этом случае. Вот моя функция Init класса "PictureOperation":

bool PictureOperation::Init(){                                                              
ilInit();   // init DevIL

ILuint tmp = ilGenImage();
ilBindImage(tmp);

ilLoadImage(reinterpret_cast<const char *>(mInput.c_str()));

// image-information
mHeight = ilGetInteger(IL_IMAGE_HEIGHT);
mWidth = ilGetInteger(IL_IMAGE_WIDTH);

// copy into a buffer
assert(mPicOld == nullptr);
mPicOld = new ILubyte[mHeight*mWidth];
ILuint res = ilCopyPixels(0, 0, 0, mWidth, mHeight, 1, IL_COLOR_INDEX, IL_UNSIGNED_BYTE, mPicOld);

return res; // returns true if copying was successful                                               
}

Итак, в конце концов, кажется, что моя конфигурация с g ++ и devil не работает хорошо. Надеемся, любые решения.

Дополнительно:

PictureOperation::PictureOperation(std::string const& inputFile, std::string const& outputFile, const int mask[SIZE_OF_MATRIX][SIZE_OF_MATRIX]){
// initialization of the members
mPicOld = nullptr;
mHeight = 0;
mWidth = 0;

mInput = inputFile;
mOutput = outputFile;

for (int y = 0; y < SIZE_OF_MATRIX; ++y) {
    for (int x = 0; x < SIZE_OF_MATRIX; ++x) {
        mFilterMask[y][x] = mask[y][x];
    }
}
}
...