int Radiuse=20;QImage *img;img = new QImage(frame1);frame1->installEventFilter(this);QTimer *tm;tm=new QTimer(this);connect(tm,SIGNAL(timeout()),SLOT(DRAWW()));tm->start(667);...eventFilter(){ ...if(obj==frame1){Qpainter pnt;pnt->drawImage(0,0,*img,0,0,0);}}void Draw_shum(){QPainter pnt2(img);radiuse+=20;if(radiuse>380)tm->stop();// x, y - координаты точек в массивеif(radiuse>=sqrt(x*x+y*y)){ pnt.setPen(QColor("из массива случайных чисел берется")); pnt.drawPoint(x,y);}}void DRAWW(){Draw_shum();frame1->update();}
C++ (Qt)eventFilter(){ ... if(obj==frame1) { Qpainter pnt; pnt->drawImage(0,0,*img,0,0,0); }}
// конструктор img_obp1 = new QImage( frame_obp->width(), frame_obp->height(), QImage::Format_RGB32);void pr::paintEvent(QPaintEvent *pe){ frame_obp->paintEvent(pe); // РУГАЕТСЯ НА ЭТУ СТРОЧКУ error C2248: 'QFrame::paintEvent' : cannot access protected member declared in class 'QFrame' // если убрать верхнюю строчку не рисуется ничего QPainter p(frame_obp); p.drawImage(0,0,*img_obp1,0,0,0,0);}//слот таймера 0.6 сек// старт таймера по кнопке происходитvoid pr::Krug(){ Draw_shum(); frame_obp->update();}// функция прорисовкиvoid pr::Draw_shum(){ QRgb rgb_col; int col=0,r_col=0,g_col=0,b_col=0,rez=0; acc_d->Detection_account(); // расчет радиуса прорисовки на 1 цикл if(D_shkala>0) Radius+=4*48/D_shkala; if(Radius>=384 && T_obmen->isActive()==true) { KRUG_DRAW_SHUM->stop(); return; } float Rez1=0; int count_r=0, count_g=0; QString str; int Num_col=0; int i,j; for (i=0;i<384;i++) { for(j=0;j<384;j++) { Rez1=sqrt((float)((i)*(i)+(j)*(j))); if(Radius>Rez1 )//условие попадет ли точка в сектор окружности радиуса Radius { // верхний правый сектор отображается Num_col=acc_d->OUT_STR.Rastr[i+384][384-j]; if(Num_col>=255) r_col=255; if(Num_col<=0)r_col=0; if(Num_col>0 && Num_col<255)r_col=byr_colors[Num_col][0]; if(Num_col>=255)g_col=255; if(Num_col<=0)g_col=0; if(Num_col>0 && Num_col<255)g_col=byr_colors[Num_col][1]; if(Num_col>=255)b_col=255; if(Num_col<=0)b_col=0; if(Num_col>0 && Num_col<255)b_col=byr_colors[Num_col][2]; img_obp1->setPixel(i,-j,qRgb(r_col,g_col,b_col)); // проверка if(r_col>0) count_r++; LE_1->setText(str.setNum(count_r)); if(g_col>0) count_g++; LE_2->setText(str.setNum(count_g)); // // нижний правый сектор окружности отображается Num_col=acc_d->OUT_STR.Rastr[i+384][384+j]; if(Num_col>=255)r_col=255; if(Num_col<=0)r_col=0; if(Num_col>0 && Num_col<255)r_col=byr_colors[Num_col][0]; if(Num_col>=255)g_col=255; if(Num_col<=0)g_col=0; if(Num_col>0 && Num_col<255)g_col=byr_colors[Num_col][1]; if(Num_col>=255)b_col=255; if(Num_col<=0)b_col=0; if(Num_col>0 && Num_col<255)b_col=byr_colors[Num_col][2]; img_obp1->setPixel(i,j,qRgb(r_col,g_col,b_col)); // проверка if(r_col>0) count_r++; LE_1->setText(str.setNum(count_r)); if(g_col>0) count_g++; LE_2->setText(str.setNum(count_g)); // // нижний левый сектор окружности отображается Num_col=acc_d->OUT_STR.Rastr[384-i][384-j]; if(Num_col>=255)r_col=255; if(Num_col<=0)r_col=0; if(Num_col>0 && Num_col<255)r_col=byr_colors[Num_col][0]; if(Num_col>=255)g_col=255; if(Num_col<=0)g_col=0; if(Num_col>0 && Num_col<255)g_col=byr_colors[Num_col][1]; if(Num_col>=255)b_col=255; if(Num_col<=0)b_col=0; if(Num_col>0 && Num_col<255)b_col=byr_colors[Num_col][2]; img_obp1->setPixel(-i,-j,qRgb(r_col,g_col,b_col)); // проверка if(r_col>0) count_r++; LE_1->setText(str.setNum(count_r)); if(g_col>0) count_g++; LE_2->setText(str.setNum(count_g)); // // верхний левый сектор окружности отображается Num_col=acc_d->OUT_STR.Rastr[384-i][384+j]; if(Num_col>=255)r_col=255; if(Num_col<=0)r_col=0; if(Num_col>0 && Num_col<255)r_col=byr_colors[Num_col][0]; if(Num_col>=255)g_col=255; if(Num_col<=0)g_col=0; if(Num_col>0 && Num_col<255)g_col=byr_colors[Num_col][1]; if(Num_col>=255)b_col=255; if(Num_col<=0)b_col=0; if(Num_col>0 && Num_col<255)b_col=byr_colors[Num_col][2]; img_obp1->setPixel(-i,j,qRgb(r_col,g_col,b_col)); // проверка if(r_col>0) count_r++; LE_1->setText(str.setNum(count_r)); if(g_col>0) count_g++; LE_2->setText(str.setNum(count_g)); // Count_cel_obn=0; int R1=0,R2=0;//расстояние до цели от центра окружности for(int t=0;t<2;t++) { if(acc_d->OUT_STR.Mass_obn[t][0]==1) { Count_cel_obn++; R1=(int)sqrt((float)((acc_d->OUT_STR.Otmetka[t][0]-384)*(acc_d->OUT_STR.Otmetka[t][0]-384) +(acc_d->OUT_STR.Otmetka[t][1]-384)*(acc_d->OUT_STR.Otmetka[t][1]-384))); R2=(int)sqrt((float)((acc_d->OUT_STR.Otmetka[t][2]-384)*(acc_d->OUT_STR.Otmetka[t][2]-384) +(acc_d->OUT_STR.Otmetka[t][3]-384)*(acc_d->OUT_STR.Otmetka[t][3]-384))); if(R1<=Radius && R2<=Radius && R1>0 && R2>0) { QRect rec1(acc_d->OUT_STR.Otmetka[t][0]-384,acc_d->OUT_STR.Otmetka[t][1]-384,3,3); QRect rec2(acc_d->OUT_STR.Otmetka[t][2]-384,acc_d->OUT_STR.Otmetka[t][3]-384,3,3); rgb_col=qRgb(255,255,255); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384,acc_d->OUT_STR.Otmetka[t][1]-384,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384+1,acc_d->OUT_STR.Otmetka[t][1]-384,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384-1,acc_d->OUT_STR.Otmetka[t][1]-384,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384,acc_d->OUT_STR.Otmetka[t][1]-384+1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384+1,acc_d->OUT_STR.Otmetka[t][1]-384+1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384-1,acc_d->OUT_STR.Otmetka[t][1]-384+1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384,acc_d->OUT_STR.Otmetka[t][1]-384-1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384+1,acc_d->OUT_STR.Otmetka[t][1]-384-1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][0]-384-1,acc_d->OUT_STR.Otmetka[t][1]-384-1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384,acc_d->OUT_STR.Otmetka[t][3]-384,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384+1,acc_d->OUT_STR.Otmetka[t][3]-384,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384-1,acc_d->OUT_STR.Otmetka[t][3]-384,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384,acc_d->OUT_STR.Otmetka[t][3]-384+1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384+1,acc_d->OUT_STR.Otmetka[t][3]-384+1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384-1,acc_d->OUT_STR.Otmetka[t][3]-384+1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384,acc_d->OUT_STR.Otmetka[t][3]-384-1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384+1,acc_d->OUT_STR.Otmetka[t][3]-384-1,rgb_col); img_obp1->setPixel(acc_d->OUT_STR.Otmetka[t][2]-384-1,acc_d->OUT_STR.Otmetka[t][3]-384-1,rgb_col); } } } } } } End_radius=Radius-1; Count_krug++; if(End_radius>=384) LE_4->setText("end");}
C++ (Qt)frame_obp->paintEvent(pe);
C++ (Qt)#include <QImage>#include <QColor> const int ImageWidth = 512;const int ImageHeight = 512; int main( int, char *[] ){ QImage img( ImageWidth, ImageHeight, QImage::Format_RGB32 ); // Заливаем картинку Qt::Green QRgb *p = reinterpret_cast<QRgb *>( img.bits() ); // получаем указатель на начало буфера QRgb fillColor = QColor( Qt::green ).rgb(); for( int i = 0; i < ImageWidth * ImageHeight; ++i ) *p++ = fillColor; // Устанавливаем точку по координатам 10, 10 int x = 10; int y = 10; QRgb *point = reinterpret_cast<QRgb *>( img.scanLine( y ) ) + x; // другой способ получения адреса в буфере картинки QRgb pointColor = QColor( 20, 40, 60 ).rgb(); // r=20 g=40 b=60 *point = pointColor; // Для того, что бы переместиться к следующей точке достаточно инкрементировать указатель point: // ++point // предыдущей: // --point // Для того, что бы переместиться к точке под текущей достаточно к указателю прибавить длину строки point += ImageWidth; *point = pointColor; img.save( "test.png" ); return 0;}