crossplatform.ru

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


  Ответ в Заполнение области определенным цветом
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 27.11.2008, 18:46
  Ну с помощью такого вот незатейливого кода, проблема решена
// Отрисовка DEM-карты
void ScrTrack::drawDemChart(GRAPHIC_DEVICE& device, const CHART_SCOPE& scope, const DRAW_MODE& mode)
{
    SPOINT end_coord(device.GetSize());
    for(int x=0; x<end_coord.x; ++x)
        for(int y=0; y<end_coord.y; ++y)
        {
            SPOINT current_coord(x, y);
            GPOINT geo_coord;
            scope.ScrToGeo(geo_coord, current_coord);
            double delta_height = GetHMax(geo_coord.lat / GEO_1_DEG, geo_coord.lon / GEO_1_DEG);
            unsigned char index = demCalcColor(delta_height);
            device.SetPixelIndex(current_coord, index);
        }
}


А в итоге такая картинка:
[attachment=326:dem_chart_new.JPG]

Вообще тем, кто с этим будет работать интересна картинка при сильном приближении, как раз когда видны квадратики изображения, но для красоты я поместил данную картинку. :)
ViGOur Дата 27.11.2008, 17:10
 
Цитата(AD @ 27.11.2008, 16:58) *
(аааааа, вот сам и ответил на вопрос, почти что ))))
Я тебе уже как-то говорил, проговаривай про себя то, что ты хочешь сделать... :)
AD Дата 27.11.2008, 16:58
  Ну если скажу, ведь офигеешь! :)))
Хочу получить точно такую же картинку:
[attachment=325:topo_dem_chart.JPG]
Вот так вот :) Цвета берутся в зависимости от высоты, а высота из определенного бинарного файла высот. А мне нужен цикл по ширине и высоте виджета (аааааа, вот сам и ответил на вопрос, почти что :)))))
Спасибо. Если, что еще что-то спрошу! :)
ViGOur Дата 27.11.2008, 16:35
 
Цитата(AD @ 27.11.2008, 15:59) *
но нет массива точек. Я не знаю, как точно их получить... Как?
что именно ты хочешь нарисовать? Гравифик или что-то еще?
AD Дата 27.11.2008, 15:59
  У меня есть массив цветов, но нет массива точек. Я не знаю, как точно их получить... Как?
ViGOur Дата 27.11.2008, 14:58
  Ну если у тебя есть массив с точками и их цветом, то не вижу проблем в их рисовании!
AD Дата 27.11.2008, 12:24
  Впринципе предполагается, что приложение пока что будет работать только на Windows, поэтому особых проблем с этим быть не должно. В будущем, если понадобится, то будет произведен перенос и на другие платформы. Шансы, что будет работать и на других платформах, есть! :) Но сможете помочь-то? А то я даже не знаю с какой стороны подступиться к данной проблеме.

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

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

Пардон, просмотрел #ifdef Q_WS_WIN... :)
AD Дата 26.11.2008, 20:23
  Вопрос довольно сложный и затрагивает не только 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 какими можно это сделать и как сделать?

Заранее благодарен.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 0:24