GFL to QImage |
Здравствуйте, гость ( Вход | Регистрация )
GFL to QImage |
Гость_Alexey_* |
22.2.2008, 1:26
Сообщение
#1
|
Гости |
Каким образом лудше из
GFL_BITMAP * bitmap конвертировать в QImage этот вопрос обсуждаеся в http://newsgroup.xnview.com/viewtopic.php?t=1052 но ответа я так и не нашел =( |
|
|
Tonal |
22.2.2008, 8:48
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Видимо следует разобраться с форматами данных, в котором GFL_BITMAP предоставляет пикселы и QImage ожидает.
Какие цвета используется, какая длинна строки (scan line), прозрачность... Насколько я понимаю, все эти данные есть и в GFL_BITMAP надо их просто корректно установить для экземпляра QImage, а уже потом передавать данные. Да, есть ещё вариант написать адаптер, который бы для работы с изображением использовал XnView. P.S. Да, а зачем вообще его - XnView использовать? Ежли надо много форматов можно, например FreeImage использовать - оно хоть открытое. :-) А в XnView я как-то года 3-4 назад багу посылал и код для обхода его, но баг и ныне там... Сообщение отредактировал Tonal - 22.2.2008, 8:48 |
|
|
Гость_Alexey_* |
28.2.2008, 4:40
Сообщение
#3
|
Гости |
CODE QImage image; // .... gflGetDefaultLoadParams( &load_option ); load_option.Flags |= GFL_LOAD_METADATA; load_option.Flags |= GFL_LOAD_FORCE_COLOR_MODEL | GFL_LOAD_ORIGINAL_COLORMODEL; load_option.Origin = GFL_BOTTOM_LEFT; load_option.ColorModel = GFL_BGRA; load_option.LinePadding = 4; // .... error = gflLoadBitmapFromHandle (QFile("bla bla bla"), &bitmap, &load_option, NULL); if ( error == GFL_NO_ERROR) { unsigned char * data = bitmap->Data; const unsigned height = bitmap->Height; const unsigned width = bitmap->Width; const unsigned pitch = bitmap->BytesPerLine; QImage::Format format = QImage::Format_RGB32; QImage tempImage(width, height, format); tempImage.fill(Qt::black); // set metrics data tempImage.setDotsPerMeterX(bitmap->Xdpi); tempImage.setDotsPerMeterY(bitmap->Ydpi); for (unsigned y = 0; y < height; ++y) memcpy(tempImage.scanLine(height - y - 1), (bitmap->Data+(pitch*y)), pitch); image = tempImage; } В данном виде работает, хотя по немонятным мне причинам gflLoadBitmapFromHandle подвисает на некотрых форматах =( ну а насчет FreeImage в приложении которое я разрабатываю есть поддержка загрузки изображений и через FreeImage, но видимо там есть свои косики, я эти вопросом не интересовался |
|
|
Текстовая версия | Сейчас: 13.1.2025, 23:41 |