crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Примитивное рисование в файл
NordWest
  опции профиля:
сообщение 24.5.2009, 18:35
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Здравствуйте!

Требуется рисовать графики, для начала совсем примитивные, но опыта нет и в примерах в основном пишется про рисование в окнах. А нужно из консольного приложения в файл .jpg, .bmp... ну в любой графический.

Из примеров и описания набрал кое чего, пробую так:
CODE

QImage *baseImg;
QVector<QRgb> colormap;

int maxIW = 1160;
int maxIH = 1040;

baseImg = new QImage(maxIW, maxIH, QImage::Format_Indexed8);
for (k=0; k<256;k++) colormap << qRgb(k,k,k);
baseImg->setColorTable(colormap);

QPainter painter(baseImg);
painter.setBrush(Qt::cyan);
painter.setPen(Qt::darkCyan);
painter.drawEllipse(10,20, 80,70);
painter.end();

baseImg->save("drawing.bmp");


Получается черный прямоугольник размерами 1160х1040.

Что я тут упустил для правильного черчения?

О, изменил одну строчку:
CODE
baseImg = new QImage(maxIW, maxIH, QImage::Format_RGB444);


Добавил ещё:
CODE
QBrush baseBrush(Qt::white, Qt::SolidPattern);
painter.fillRect(0, 0, 100, 100, baseBrush);


Получилось:

Сообщение отредактировал NordWest - 24.5.2009, 18:37
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.5.2009, 18:41
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(NordWest @ 24.5.2009, 19:17) *
for (k=0; k<256;k++) colormap << qRgb(k,k,k);
baseImg->setColorTable(colormap);

зачем это?

в дебуг ничего не вываливается случаем?

Цитата(NordWest @ 24.5.2009, 19:17) *
А нужно из консольного приложения в файл .jpg, .bmp... ну в любой графический.

если я не ошибаюсь чтоб рисовать и создать устройства рисования нужно создать не консольное приложение.
QPixmap и д.р. точно использует то что создает QApplication, а QCoreApplication не достаточно.. :(

Цитата
Warning: Qt requires that a QApplication object exists before any paint devices can be created. Paint devices access window system resources, and these resources are not initialized before an application object is created.


почему выбрал QImage?

Сообщение отредактировал kwisp - 24.5.2009, 18:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 24.5.2009, 18:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Вот такой код заработал и в принципе примитивов мне пока хватит для разрисовки простейших графиков:
CODE

baseImg = new QImage(maxIW, maxIH, QImage::Format_RGB444);

QBrush baseBrush(Qt::white, Qt::SolidPattern);
QPainter painter(baseImg);

painter.setBackground(baseBrush);
painter.setBrush(Qt::cyan);
painter.setPen(Qt::darkCyan);
painter.drawEllipse(10,20, 80,70);
painter.drawLine(10, 50, 300, 350);
painter.end();

baseImg->save("drawing.bmp", "BMP");


Только вот фон не заливается. Ну да это мелочи, fillRect поможет.

Цитата
зачем это?

Хз, из кода другой программы переносил, удалю.

Цитата
если я не ошибаюсь чтоб рисовать и создать устройства рисования нужно создать не консольное приложение.
QPixmap и д.р. точно использует то что создает QApplication, а QCoreApplication не достаточно.. :(

Да, извиняюсь, ошибка терминологии видимо. у меня QApplication вызывается. Просто нет основного окна как контекста для рисования.

Цитата
почему выбрал QImage?

Что знал... Мне нужно в файл писать. QPicture стал ругаться, типа отсутствует окно...
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.5.2009, 19:00
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


NordWest,
можно готовое решение рисования слямзить из Qwt .:) грабить виджет графика на картинку и сохранять её может получится виджет даже не показывать.
посмотри может пригодится.:)
на этом форуме есть темы по Qwt
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 24.5.2009, 22:00
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Цитата
можно готовое решение рисования слямзить из Qwt .:)

Да ну, я уже вырисовываюсь во всю :)

Сообщение отредактировал NordWest - 24.5.2009, 22:37
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 24.5.2009, 22:38
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Вот и с надписями получилось:
CODE

painter.setPen(basePen);
infoStr = QString("M = %1 - %2").arg((int)dims[2][i], 2, 10, QLatin1Char(' ')).arg((int)dims[2][i+1], 2, 10, QLatin1Char(' '));
painter.setFont(QFont("Arial", 40));
painter.drawText(textRect, infoStr, textOpt);


Сообщение отредактировал NordWest - 24.5.2009, 22:41
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.5.2009, 22:38
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


NordWest,
мда. красиво.

а что это?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 24.5.2009, 22:40
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Цитата(kwisp @ 24.5.2009, 23:38) *
NordWest,
мда. красиво.

а что это?


Векторные поля ошибок по положениям звезд на ПЗС-кадре. :) такие дела...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 28.5.2009, 12:14
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


А как бы вот ещё текст рисовать вертикально? Снизу вверх или наоборот.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 28.5.2009, 12:23
Сообщение #10


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Смотри внимательно описание QPainter. А именно
Цитата
void QPainter::rotate ( qreal angle )

И там далее по ссылкам.

Или используй совместно QMatrix и QPainter

Сообщение отредактировал igor_bogomolov - 28.5.2009, 12:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 16.4.2024, 22:09