Vasara Posted September 7, 2020 Share Posted September 7, 2020 (edited) Добрый день. Из документации понял, что для записи сгенерированных данных в картинку карты высот в классе Image есть методы: set2D () и перегруженный setPixels (). С первым, благодаря примеру, всё более менее понятно. Со вторым возникли трудности. Создаю файл: image->create2D(lmapTileResolutionX, lmapTileResolutionY, Image::FORMAT_RGBA8); Генерирую и заполняю массив чаров: heightSourceArray = new unsigned char [lmapTileResolutionX * lmapTileResolutionY]; heightSourceArray i = (rand())%255; Вызываю метод image->setPixels(heightSourceArray); В режиме дебага вылетает с необработанным исключением 0x00007FFCDCB3DB9E (ucrtbase.dll) . Так как других ошибок дебагер не выдаёт, идеи куда смотреть закончились. С Уважением, Константин. Edited October 8, 2020 by Vasara Link to comment
morbid Posted September 8, 2020 Share Posted September 8, 2020 Здравствуйте, Константин. Я правильно, понял, что вы уже сами разобрались с проблемой? How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
Vasara Posted September 8, 2020 Author Share Posted September 8, 2020 (edited) 5 hours ago, morbid said: Здравствуйте, Константин. Я правильно, понял, что вы уже сами разобрались с проблемой? Здравствуйте. Нашёл более подходящий способ для решения моих задач. setPixels оставил на разберусь "может быть когда нибудь потом". Edited September 8, 2020 by Vasara Link to comment
semenov.anton Posted June 5, 2021 Share Posted June 5, 2021 (edited) Здравствуйте! У меня возникла та же проблема при попытке подсунуть в ImagePtr->setPixels массив из unsigned char *, который сформировала библиотека CImg. CImg<unsigned char> testImg(2048, 2048, 1, 3); testImg.fill(0); unsigned char purple[] = { 255,0,255 }; testImg.draw_text(100,100,"Hello World",purple); unsigned char * ref = testImg.data(); _testImg->setPixels(ref); _tiltmeter->setLayerImage(7, _testImg, 1); _testImd глобален и в нём уже лежит изображение. Что в итоге надо сделать, чтобы ImagePtr воспринимал другой массив? UPD: пишет следующую ошибку - Expression: data == NULL && "Image::setPixels(): data is not NULL" Edited June 5, 2021 by semenov.anton Link to comment
sweetluna Posted June 7, 2021 Share Posted June 7, 2021 Здравствуйте. Перед тем как вызвать setPixels, вызывайте clear() для очистки data, а после нужно вызвать create2D с флагом allocate выставленным в 0. ImagePtr img = Image::create(); unsigned char* ref = nullptr; img->create2D(3, 3, Image::FORMAT_RGBA8); img->clear(); img->setPixels(ref); img->create2D(3, 3, Image::FORMAT_RGBA8, 1, 0, 0); May RenderDoc/Nsight Graphics/Intel GPA bless you Link to comment
semenov.anton Posted June 7, 2021 Share Posted June 7, 2021 @sweetluna Спасибо большое, помогло!!! Link to comment
Recommended Posts