Используя 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];
}
}
}