Вопрос довольно сложный и затрагивает не только 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
/// Рисование в заданном виджете (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);
}
Честно говоря не соавсем понял, что ты хочешь:
Впринципе предполагается, что приложение пока что будет работать только на Windows, поэтому особых проблем с этим быть не должно. В будущем, если понадобится, то будет произведен перенос и на другие платформы. Шансы, что будет работать и на других платформах, есть! Но сможете помочь-то? А то я даже не знаю с какой стороны подступиться к данной проблеме.
Массив имеется, точнее сказать я его получу, особых проблем с этим нет. Проблема в том как создать нужную картинку заполненную определенными цветами?
Ну если у тебя есть массив с точками и их цветом, то не вижу проблем в их рисовании!
У меня есть массив цветов, но нет массива точек. Я не знаю, как точно их получить... Как?
Ну если скажу, ведь офигеешь! ))
Хочу получить точно такую же картинку:
[attachment=325:topo_dem_chart.JPG]
Вот так вот Цвета берутся в зависимости от высоты, а высота из определенного бинарного файла высот. А мне нужен цикл по ширине и высоте виджета (аааааа, вот сам и ответил на вопрос, почти что ))))
Спасибо. Если, что еще что-то спрошу!
Ну с помощью такого вот незатейливого кода, проблема решена
// Отрисовка 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);
}
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)