crossplatform.ru

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

> Заполнение области определенным цветом
AD
  опции профиля:
сообщение 26.11.2008, 20:23
Сообщение #1


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Вопрос довольно сложный и затрагивает не только Qt. Есть область (прямоугольник), где рисуется карта и траектория средствами библиотеки нашей фирмы. Для отрисовки используется такая вот функция:
/// Функция отрисовки карты (для Windows)
#ifdef Q_WS_WIN
void SubSahara::Draw(HDC hdc)
{
    if(!bInit) return;

    for(int y = begSize.y; y < spSize.y; y++)
    {
            SetDIBitsToDevice(hdc,                        ///< handle to DC
                begSize.x,                              ///< x-coord of destination upper-left corner
                y,                                        ///< y-coord of destination upper-left corner
                spSize.x,                                ///< source rectangle width
                1,                                        ///< source rectangle height
                0,                                        ///< x-coord of source lower-left corner
                0,                                        ///< y-coord of source lower-left corner
                0,                                        ///< first scan line in array
                1,                                        ///< number of scan lines
                                                        ///< array of DIB bits
                (CONST VOID *)(pDevice->GetSurface() + spSize.x * y),
                pBmi,                                    ///< bitmap information
                DIB_RGB_COLORS);
    }
}
#endif // Q_WS_WIN

pBmi - имеет тип BITMAPINFO
при использовании делается так:
/// Рисование в заданном виджете (trackView)
void TLV::paintEvent(QPaintEvent *events)
{
    QPainter painter(this);
    /// Рисование карты Мира Сахарой
    int Xbeg = trackView -> x() + 10;
    int yb = dockWidget -> y() + 10;
    int Ybeg = (toolbarAction -> isChecked()) ? yb + toolBar -> height() + TLVClass::menuBar -> height()
        : yb + TLVClass::menuBar -> height();
    int Xend = trackView -> width();
    int Yend = trackView -> height();

    pSahara -> SetBitmapSize(Xbeg, Ybeg, Xend, Yend + Ybeg);
    pSahara -> Refresh();

    #ifdef Q_WS_WIN
        pSahara -> Draw(painter.paintEngine() -> getDC());
    #endif // Q_WS_WIN    

    QMainWindow::paintEvent(events);
}


Имеются определенные функции для получения массива QRgb. Задача заполнить область, в которой происходит рисование (по сути, виджет trackView), цветами из этого массива. Каким образом сделать массив заполнения этой области? Подскажите, пожалуйста, средства Qt какими можно это сделать и как сделать?

Заранее благодарен.

Сообщение отредактировал AD - 27.11.2008, 12:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 26.11.2008, 20:49
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Честно говоря не соавсем понял, что ты хочешь:
Цитата(AD @ 26.11.2008, 20:23) *
Имеются определенные функции для получения массива QRgb
Цитата(AD @ 26.11.2008, 20:23) *
Каким образом сделать массив заполнения этой области?
У тебя имеется массив или его нужно сделать? :)

Да и если я не ошибаюсь HDC и BITMAPINFO это чисто виндовые типы, следовательно о кроссплатформенности можно забыть.

Пардон, просмотрел #ifdef Q_WS_WIN... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 27.11.2008, 12:24
Сообщение #3


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Впринципе предполагается, что приложение пока что будет работать только на Windows, поэтому особых проблем с этим быть не должно. В будущем, если понадобится, то будет произведен перенос и на другие платформы. Шансы, что будет работать и на других платформах, есть! :) Но сможете помочь-то? А то я даже не знаю с какой стороны подступиться к данной проблеме.

Массив имеется, точнее сказать я его получу, особых проблем с этим нет. Проблема в том как создать нужную картинку заполненную определенными цветами?

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

Сообщений в этой теме


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


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




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