программирование быстрого рисования 2D карты значений функции
я новичок на этом сайте, но несмотря на страшные угрозы в правилах форума (которые я выполнил :) ), решился на создание новой темы.
работаю в ВС++В 2-й год, пишу программу площадного анализа геофизических данных и вот впервые столкнулся с проблемой, которую сам, видимо, не смогу решить, поэтому и прошу вашей помощи.
а собственно проблема в следующем - как нарисовать карту? Но не так, как я это делаю сейчас, а именно: рассчитываю значение в пикселе, подбираю ему цвет в соответствии со шкалой и вывожу на экран - и так для каждого пикселя! Это очень долго! А нужна какая-нибудь функция, на вход которой подаётся матрица значений, а она рисует карту... Есть такая? Либо, возможно, нужно создавать bmp файл и потом его выводить?.. Но как это сделать и увеличит ли это скорость рисования?...
Буду благодарен за любую помощь!
С уважением, angel2c.
-Оптимальный вариант
А нужна какая-нибудь функция, на вход которой подаётся матрица значений, а она рисует карту...
-Ну раз очень нужна-сам напиши например так:
void paint(_karta karta)
{
for(int x=0;x<karta.x;x+=1)
for(int y=0;y<karta.y;y+=1)
ЧетоТамКудаРисуеш1->Canvas->Pixels[x][y]=RGB(karta.pixels[x][y].R,karta.pixels[x][y].G,karta.pixels[x][y].B);
}
И объяви структуру карты
struct _pixels{
int R;
int G;
int B;
};
struct _karta{
int x;
int y;
_pixels pixels[x][y];
};
_karta karta;
Если поимпровизировать, добавить область(начальные, конечные координаты области карты) и при необходимости перерисовывать карту не полностью, а только участки то моглобы и снизить, но при таком возростании кода только увеличит время прорисовки карты.
Хотя на мой взгляд если сильно тормозит при рисовании карты проще создать невидимый TBitmap и сначала на нём рисовать карту, а потом его канву переганять в канву видимого рисунка одним махом.
Тогда копай в сторону стандартов изображений PNG,BMP,GIF... Генерь саму картинку. Если еще убыстрить, то делай ассемблерные вставки.
Цитата: newcss
Тогда копай в сторону стандартов изображений PNG,BMP,GIF... .
БМП-самый быстрый будет-нетратится время на конверт из БМП в PNG или GIF
во-вторых, приведённый код - это то, что я сейчас примерно сделал. в таком случае карта во весь экран рисуется 15-30 секунд в зависимости от сложности расчёта значения в текущем пикселе... а хотелось бы как в крутых программах, а точнее мгновенно)) ну или хотя бы почти:D
про функцию, выводящую карту, я сам имел ввиду скорее что-то типа LoadFromBmp... то есть то, что вы в итоге и советуете. но подскажите, как создать bmp, зная цвета во всех пикселях? и что такое "ассемблерные вставки", которые еще круче?:confused: