crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 19.1.2025, 2:45