Russian Qt Forum
Май 18, 2012, 19:04
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Мультимедиа
(Модератор:
Sergeich
) >
Не могу вывести Pixmap
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Не могу вывести Pixmap (Прочитано 4734 раз)
Zmey
Гость
Не могу вывести Pixmap
«
:
Сентябрь 02, 2005, 09:05 »
Мне нужно показывать изображение из массива unsigned char (или из QByteArray).
Вот мой код:
Код:
uchar* ui32t;
QImage* ImageImaget = new QImage(128,128,32);
ImageImaget->setAlphaBuffer(TRUE);
bool t=ImageImaget->load("2.png","PNG");
int nb=ImageImaget->numBytes();
ui32t=ImageImaget->scanLine(0);
QPixmap pm;
pm.loadFromData(ui32t,nb,"PNG",(int)0);
textLabelMovie->setPixmap(pm);
Если делаю так, то работает:
Код:
QPixmap pm;
pm.load("2.png","PNG",0);
textLabelMovie->setPixmap(pm);
но мне нужно отображение рисунка из массива.
Что не так?
Записан
GrolfCry
Гость
Не могу вывести Pixmap
«
Ответ #1 :
Сентябрь 02, 2005, 10:36 »
а чем не устраивает
Код:
QPixmap pm("2.png");
Записан
andrek
Гость
Не могу вывести Pixmap
«
Ответ #2 :
Сентябрь 02, 2005, 10:52 »
QPixmap::loadFromData отлично справляется с static const unsigned char[]
Записан
Zmey
Гость
Не могу вывести Pixmap
«
Ответ #3 :
Сентябрь 02, 2005, 13:16 »
Есть запакованный файл с изображением, я его беру, распаковываю его через zlib, в итоге у меня есть QByteArray и его надо отобразить.
Запись типа такого:
Код:
static const unsigned char image_bmp_data[] = {
0x42,0x4d,0xc2,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
0x28,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,
0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x6d,0x0b,0x00,0x00,
0x6d,0x0b,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
0x10,0x00,0xff,0xff,0xff,0x00,0x51,0x61,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x01,0x01,0x01,........
работает. Но вот мои распакованные данные не показывает.
Записан
Zmey
Гость
Не могу вывести Pixmap
«
Ответ #4 :
Сентябрь 02, 2005, 15:15 »
Короче говоря, есть массив m*n*4 типа unsigned char, не важно откуда он получен, просто есть. Нужно теперь отобразить этот массив как изображение m - высота, n - ширина, 4 - глубина цвета.
Подскажите, кто знает.
Записан
andrek
Гость
Не могу вывести Pixmap
«
Ответ #5 :
Сентябрь 02, 2005, 15:38 »
bmp без заголовка?
а палитра есть?
выводи по точкам
от какой игрухи ресурсы ломаем?
Записан
Zmey
Гость
Не могу вывести Pixmap
«
Ответ #6 :
Сентябрь 02, 2005, 16:34 »
Цитата: "andrek"
bmp без заголовка?
а палитра есть?
выводи по точкам
от какой игрухи ресурсы ломаем?
Массив это просто массив, никакого заголовка, просто набор цифр, допустим это просто поток из платы ввода видеоданных.
Сделал таки, из массива получил QImage:
Код:
//ui32t - массив 128*128*4 uchar с нашими данными
//nb=128*128*4
QImage* i2 = new QImage(128,128,32);
i2->setAlphaBuffer(TRUE);
uchar* pi2=i2->scanLine(0);
memcpy(pi2,ui32t,nb);
Как теперь максимально быстро вывести его на экран?
Можно через QLabel, но он выводит только QPixmap, а функция QPixmap::convertFromImage как написано в ассистансе There are (slow) functions to convert between QImage and QPixmap: convertToImage() and convertFromImage().
Как просто вывести на форму QImage? Вроде как то через QPainter или через BitBlt, но у меня не получается. Может кто-нить даст пример?
Записан
Keiko
Гость
Re: Не могу вывести Pixmap
«
Ответ #7 :
Сентябрь 03, 2005, 00:08 »
блин, что за бред ?
Цитата: "Zmey"
Код:
uchar* ui32t;
QImage* ImageImaget = new QImage(128,128,32);
ImageImaget->setAlphaBuffer(TRUE);
bool t=ImageImaget->load("2.png","PNG");
Создал изображение QImage, потом его перезаписал с помощью QImage::load()
Цитата: "Zmey"
Код:
int nb=ImageImaget->numBytes();
ui32t=ImageImaget->scanLine(0);
QPixmap pm;
pm.loadFromData(ui32t,nb,"PNG",(int)0);
textLabelMovie->setPixmap(pm);
Получил указатель на 32-битную НЕСЖАТУЮ область памяти, потом зачем-то вызвал loadFromData с параметром "PNG".
Цитата: "Zmey"
Если делаю так, то работает:
Код:
QPixmap pm;
pm.load("2.png","PNG",0);
textLabelMovie->setPixmap(pm);
Конечно это будет работать, т.к. ты загрузил пиксмап из файла напрямую.
P.S. См.
внимательно
QPIxmap::convertFromImage(), QImage::load()
Записан
Keiko
Гость
Не могу вывести Pixmap
«
Ответ #8 :
Сентябрь 03, 2005, 00:10 »
Цитата: "Zmey"
Короче говоря, есть массив m*n*4 типа unsigned char, не важно откуда он получен, просто есть. Нужно теперь отобразить этот массив как изображение m - высота, n - ширина, 4 - глубина цвета.
Подскажите, кто знает.
Код:
QImage::QImage ( uchar * yourdata, int w, int h, int depth, int bpl, QRgb * colortable, int numColors, Endian bitOrder )
Constructs an image that uses an existing memory buffer. The buffer must remain valid for the life of the QImage. The image does not delete the buffer at destruction. The buffer is passed as yourdata. The image's width is w and its height is h. The color depth is depth. bpl specifies the number of bytes per line.
If colortable is 0, a color table sufficient for numColors will be allocated (and destructed later).
The endianness is specified by bitOrder.
Потом QPainter::drawImage либо QPixmap::convertFromImage() + QPainter::drawPixmap() (что, в приципе одно и тоже).
Записан
ppk
Новичок
Offline
Сообщений: 46
Re: Не могу вывести Pixmap
«
Ответ #9 :
Август 21, 2009, 13:46 »
Здравствуйте. Решил поднять старую тему - проблема та же.
Есть массив данных, который объявляется, как unsigned char *buffer.
В этот буфер пишется картинка и далее буфер сохраняется в файл.
При попытке отобразить картинку из буфера на Qlabel ничего не получается, хотя из файла эта картинка отображается.
Делаю так:
Код:
QLabel *l = new QLabel();
QPixmap pm(720,576);
QByteArray ba;
//буфер не пустой и имеет размер 720*576
ba = (char *) buffer;
//ba после присваивания в отладчике показывает всего несколько строк -
//гораздо меньше, чем исходный буфер
pm.loadFromData(ba);
l->setPixmap(pm);
l->show();
пробовал напрямую грузить pm.loadFromData из buffer - тоже ничего.
Подскажите, где ошибаюсь?
Заранее спасибо за помощь
Записан
Константин
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2576
Re: Не могу вывести Pixmap
«
Ответ #10 :
Август 21, 2009, 14:08 »
ba = (char *) buffer; - что за бред?
и попробуй QPixmap заменить на QImage
Записан
4.7
Gentoo ~amd64 / winxpprosp2 / fremantle armel
Qt - Qt Development Frameworks; QT - QuickTime
ppk
Новичок
Offline
Сообщений: 46
Re: Не могу вывести Pixmap
«
Ответ #11 :
Август 21, 2009, 14:40 »
Цитата: Константин от Август 21, 2009, 14:08
ba = (char *) buffer; - что за бред?
и попробуй QPixmap заменить на QImage
А как правильно?
Я пробовал и через ba.append((char *) buffer);
И так
Код:
QDataStream ds(&ba,QIODevice::WriteOnly);
char * cs = (char *) buffer;
ds.writeBytes((char *) buffer,720*576);
Результат тот же.
Записан
Константин
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2576
Re: Не могу вывести Pixmap
«
Ответ #12 :
Август 21, 2009, 16:14 »
!rtfm: QByteArray::fromRawData
Записан
4.7
Gentoo ~amd64 / winxpprosp2 / fremantle armel
Qt - Qt Development Frameworks; QT - QuickTime
ppk
Новичок
Offline
Сообщений: 46
Re: Не могу вывести Pixmap
«
Ответ #13 :
Август 23, 2009, 18:55 »
Делаю так:
Код:
QLabel *l = new QLabel();
QPixmap pm(720,576);
const char *cs = (char *) buffer;
QByteArray ba = QByteArray::fromRawData(cs,720*576);
pm.loadFromData(ba);
l->setPixmap(pm);
l->show();
Ничего не получается.
Под отладчиком видно, что ba после выполнения fromRawData не пустой, но его размер гораздо меньше cs.
Подскажите, где ошибаюсь?
Записан
BRE
Джедай : наставник для всех
Offline
Сообщений: 3231
Re: Не могу вывести Pixmap
«
Ответ #14 :
Август 23, 2009, 19:12 »
Цитата: ppk от Август 23, 2009, 18:55
Делаю так:
Код:
QLabel *l = new QLabel();
QPixmap pm(720,576);
const char *cs = (char *) buffer;
QByteArray ba = QByteArray::fromRawData(cs,720*576);
pm.loadFromData(ba);
l->setPixmap(pm);
l->show();
Ничего не получается.
Под отладчиком видно, что ba после выполнения fromRawData не пустой, но его размер гораздо меньше cs.
Подскажите, где ошибаюсь?
Если картинка в buffer не использует палитру, то размер нужно умножить на количество байт используемых для хранения цвета.
Записан
Каждое препятствие – это возможность
.
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...