crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> 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

Спасибо сказали: 67 раз(а)




Репутация:   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,
но видимо там есть свои косики, я эти вопросом не интересовался
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.6.2018, 9:25