Название: Не могу вывести Pixmap Отправлено: Zmey от Сентябрь 02, 2005, 09:05 Мне нужно показывать изображение из массива unsigned char (или из QByteArray).
Вот мой код: Код: uchar* ui32t; Если делаю так, то работает: Код: QPixmap pm; но мне нужно отображение рисунка из массива. Что не так? Название: Не могу вывести Pixmap Отправлено: GrolfCry от Сентябрь 02, 2005, 10:36 а чем не устраивает
Код:
Название: Не могу вывести Pixmap Отправлено: andrek от Сентябрь 02, 2005, 10:52 QPixmap::loadFromData отлично справляется с static const unsigned char[]
Название: Не могу вывести Pixmap Отправлено: Zmey от Сентябрь 02, 2005, 13:16 Есть запакованный файл с изображением, я его беру, распаковываю его через zlib, в итоге у меня есть QByteArray и его надо отобразить.
Запись типа такого: Код: static const unsigned char image_bmp_data[] = { работает. Но вот мои распакованные данные не показывает. Название: Не могу вывести Pixmap Отправлено: Zmey от Сентябрь 02, 2005, 15:15 Короче говоря, есть массив m*n*4 типа unsigned char, не важно откуда он получен, просто есть. Нужно теперь отобразить этот массив как изображение m - высота, n - ширина, 4 - глубина цвета.
Подскажите, кто знает. Название: Не могу вывести Pixmap Отправлено: andrek от Сентябрь 02, 2005, 15:38 bmp без заголовка?
а палитра есть? выводи по точкам от какой игрухи ресурсы ломаем? Название: Не могу вывести Pixmap Отправлено: Zmey от Сентябрь 02, 2005, 16:34 Цитата: "andrek" bmp без заголовка? а палитра есть? выводи по точкам от какой игрухи ресурсы ломаем? Массив это просто массив, никакого заголовка, просто набор цифр, допустим это просто поток из платы ввода видеоданных. ;) Сделал таки, из массива получил QImage: Код: //ui32t - массив 128*128*4 uchar с нашими данными Как теперь максимально быстро вывести его на экран? Можно через QLabel, но он выводит только QPixmap, а функция QPixmap::convertFromImage как написано в ассистансе There are (slow) functions to convert between QImage and QPixmap: convertToImage() and convertFromImage(). Как просто вывести на форму QImage? Вроде как то через QPainter или через BitBlt, но у меня не получается. Может кто-нить даст пример? Название: Re: Не могу вывести Pixmap Отправлено: Keiko от Сентябрь 03, 2005, 00:08 блин, что за бред ?
Цитата: "Zmey" Код: uchar* ui32t; Создал изображение QImage, потом его перезаписал с помощью QImage::load() Цитата: "Zmey" Код:
Получил указатель на 32-битную НЕСЖАТУЮ область памяти, потом зачем-то вызвал loadFromData с параметром "PNG". Цитата: "Zmey" Если делаю так, то работает: Код: QPixmap pm; Конечно это будет работать, т.к. ты загрузил пиксмап из файла напрямую. P.S. См. внимательно QPIxmap::convertFromImage(), QImage::load() Название: Не могу вывести Pixmap Отправлено: Keiko от Сентябрь 03, 2005, 00:10 Цитата: "Zmey" Короче говоря, есть массив m*n*4 типа unsigned char, не важно откуда он получен, просто есть. Нужно теперь отобразить этот массив как изображение m - высота, n - ширина, 4 - глубина цвета. Подскажите, кто знает. Код:
Потом QPainter::drawImage либо QPixmap::convertFromImage() + QPainter::drawPixmap() (что, в приципе одно и тоже). Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 21, 2009, 13:46 Здравствуйте. Решил поднять старую тему - проблема та же.
Есть массив данных, который объявляется, как unsigned char *buffer. В этот буфер пишется картинка и далее буфер сохраняется в файл. При попытке отобразить картинку из буфера на Qlabel ничего не получается, хотя из файла эта картинка отображается. Делаю так: Код: QLabel *l = new QLabel(); пробовал напрямую грузить pm.loadFromData из buffer - тоже ничего. Подскажите, где ошибаюсь? Заранее спасибо за помощь Название: Re: Не могу вывести Pixmap Отправлено: ритт от Август 21, 2009, 14:08 ba = (char *) buffer; - что за бред?
и попробуй QPixmap заменить на QImage Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 21, 2009, 14:40 ba = (char *) buffer; - что за бред? и попробуй QPixmap заменить на QImage А как правильно? Я пробовал и через ba.append((char *) buffer); И так Код: QDataStream ds(&ba,QIODevice::WriteOnly); Результат тот же. Название: Re: Не могу вывести Pixmap Отправлено: ритт от Август 21, 2009, 16:14 !rtfm: QByteArray::fromRawData
Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 23, 2009, 18:55 Делаю так:
Код: QLabel *l = new QLabel(); Ничего не получается. Под отладчиком видно, что ba после выполнения fromRawData не пустой, но его размер гораздо меньше cs. Подскажите, где ошибаюсь? Название: Re: Не могу вывести Pixmap Отправлено: BRE от Август 23, 2009, 19:12 Делаю так: Если картинка в buffer не использует палитру, то размер нужно умножить на количество байт используемых для хранения цвета. Код: QLabel *l = new QLabel(); Ничего не получается. Под отладчиком видно, что ba после выполнения fromRawData не пустой, но его размер гораздо меньше cs. Подскажите, где ошибаюсь? Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 23, 2009, 19:56 Вот, как выглядит ba после
QByteArray ba = QByteArray::fromRawData(cs,720*576): "\1c\1c\1c\1c\1b\19\18\1c"\c\198\1d\1b\c\12\18\15\12\11\11\13\16\1a\1d\1d\1d\1d\1c\1a\18\16\15\18\1b\1f!! \1e\1d\1e !"!\1e\1c\1a\1a\1b\1d\1e!#&'%"\1e\1c\1c\1d\1f \1e\1c\1a\19\1a\1c\1e\1f\1e\1c\1b\19\19\19\19\1a\1b\1c\1d\1e\1f\1f\1f\1f\1f \1f\1f\1f\1f "#\b"\cd\ee5\e3\bd\b4r\eb" Исходный буфер гораздо больше и соответствует размеру 720*576. Вот его начало: 0x9145460 "\034\034\034\034\033\031\030\034\"\f\0318\035\033\f\022\030\025\022\021\021\023\026\032\035\035\035\035\034\032\030\026\025\030\033\037!! \036\035\036 !\"!\036\034\032\032\033\035\036!#&'%\"\036\034\034\035\037 \036\034\032\031\032\034\036\037\036\034\033\031\031\031\031\032\033\034\035\036\037\037\037\037\037 \037\037\037\037 \"#$#! \036\034\033\032\032\033\034\036 !!\"#$%%#\" \036\037 !! \037\035\036\036\036\035\034\032\031\030\032\034\036\037 \037! \025\f\025!##$$\" \035\033\035\037\"$#!\037\036\035\035\035\034\032\027\025\024\026\031\034\036\037\037\037\037\037\037\036\036\035\035\034\033\031\026\024\023\023\023\022\022\027\034\033\027\r\005\b\020\031 \034\030\034\"&(('%\"\037\034\030\026\030\033\034\032\024\016\r\016\020\022\023\025\027\030\031\032\034\035\037\037\035\032\026\024\032!! !+2-%\034\026\034\"\027\016\024\034\035\034\033\032\032\032\032\033\034\037'2CROHA=BJQVTNIDCCCDHKOQPMJF@;7447;BKYx\224\227\222\216\213\216\222\223\224\225\226\227\230\232\235\241\246\255\265\276\305\307\306\304\301\276\272\265\251~]\201\252\244\226\223\220\206\200\221\246\270\303\271\253\255\262\263\264\266\267\270\270\270\267\265\263\257\252\245\244\251\260\267\275\276\275\274\273\273\273\273\274\274\275\276\275\272\266\264\263\263\267\304\321\321\317\315\313\314\315\316\316\316\316\315\315\314\314\314\313\313\312\306\304\322\335\322\305\307\313\315\316\315\313\312\310\307\306\303\307\336\366\375\376\377\372\356\303\302\352\307\315\310\311\311\311\312\313\320\323\312\305\324\345\350\345\330\312\307\303\302\313\311\310\310\307\307\306\303\277\274\266\250\232\216\213\241\272\303\307\310\306\306\305\303\301\301\301\301\276\261\243\225\215\225\244\263\300\305\307\311\310\305\300\273\267\270\274\302\303\251\217\214\225\255\304\304\277\301\302\277\274\275\276\272\267\274\275\254\226\201w\220\257\301\312\301\266\266\270\266\265\265\266\267\267\270\271\272\274\275\277\300\300\277\274\272\267\264\262\260\257\261\265\270\272\273\273\272\271\271\270\267\266\264\263\261\260\257\256\255\254\253\253\252\252\252\253\254\255\255\256\257\257\256\254\251\247\245\243\242\241\242\244\247\250\247\246\244\242\241\240\237\237\240\242\244\245\244\242\240 ... Попытка увеличить размер в 2 или 4 раза выводит сообщение, что ba находится вне области видимости. Название: Re: Не могу вывести Pixmap Отправлено: ритт от Август 23, 2009, 21:22 и кто такое cs?
Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 23, 2009, 21:31 unsigned char *buffer
... const char *cs = (char *) buffer; Я немного ранее приводил кусок кода Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 23, 2009, 22:01 Посмотрел код по сохранению этого буфера в файл в чужой библиотеке.
Перед сохранением в начала буфера добавляется строка: "P5\n720 576\n255\n" Сделал у себя также: QByteArray p("P5\n720 576\n255\n"); QByteArray ba = QByteArray::fromRawData(cs,720*576).prepend(p); И все получилось. Может быть кто-нибудь подскажет почему без этой строки QPixmap не хочет отображать картинку? Название: Re: Не могу вывести Pixmap Отправлено: ритт от Август 24, 2009, 00:12 строка QByteArray ba = QByteArray::fromRawData(cs,720*576).prepend(p); стала бессмысленной.
"P5\n720 576\n255\n" - какая-то сигнатура? Название: Re: Не могу вывести Pixmap Отправлено: ppk от Август 24, 2009, 09:24 Что означает эта строка не знаю, поэтому и спрашиваю, но она пишется в начало файла перед буфером, если буфер сохраняется в файл.
Там явно прослеживаются размеры изображения 576 X 720. |