\r
CV_IMPL int cvCreateButton(const char* button_name,CvButtonCallback on_change, void* userdata , int button_type, int initial_button_state )\r
{\r
+\r
if (!guiMainThread)\r
CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" );\r
\r
void GuiReceiver::enablePropertiesButtonEachWindow()\r
{\r
CvWindow* w;\r
+ CvWinModel* temp;\r
\r
//For each window, enable window property button\r
foreach (QWidget *widget, QApplication::topLevelWidgets())\r
\r
if (widget->isWindow() && !widget->parentWidget ())//is a window without parent\r
{\r
- w = (CvWindow*) widget;\r
- //active window properties button\r
- w->vect_QActions[9]->setDisabled(false);\r
+ temp = (CvWinModel*) widget;\r
+ if (temp->type == type_CvWindow)\r
+ {\r
+ w = (CvWindow*) widget;\r
+ //active window properties button\r
+ w->vect_QActions[9]->setDisabled(false);\r
+ }\r
}\r
}\r
}\r
\r
if (!global_control_panel)\r
return;\r
-\r
QPointer<CvButtonbar> b;// = icvFindButtonbarByName( button_name.toLatin1().data(), global_control_panel->myLayout );\r
\r
//if (b)//button with this name already exist\r
// return;\r
\r
+\r
if (global_control_panel->myLayout->count() == 0)//if that is the first button attach to the control panel, create a new button bar\r
{\r
+\r
b = CvWindow::createButtonbar(button_name);//the bar has the name of the first button attached to it\r
- \r
enablePropertiesButtonEachWindow();\r
\r
}else{\r
\r
#endif\r
\r
- image2Draw_ipl=cvCreateImage(cvSize(viewport()->width(),viewport()->height()),IPL_DEPTH_8U,3);\r
- \r
+ image2Draw_mat = cvCreateMat( viewport()->width(),viewport()->height(), CV_8UC3 );\r
+\r
nbChannelOriginImage = 0;\r
- cvZero(image2Draw_ipl);\r
+ cvZero(image2Draw_mat);\r
\r
setInteractive(false);\r
setMouseTracking (true);//receive mouse event everytime\r
\r
ViewPort::~ViewPort()\r
{\r
- if (image2Draw_ipl)\r
- cvReleaseImage(&image2Draw_ipl);\r
+ if (image2Draw_mat)\r
+ \r
+ cvReleaseMat(&image2Draw_mat);\r
\r
\r
//#if defined( HAVE_QT_OPENGL )\r
return img1->width == img2->width && img1->height == img2->height;\r
}\r
\r
-void ViewPort::updateImage(void* arr)\r
+void ViewPort::updateImage(const CvArr *arr)\r
{\r
//if (!arr)\r
//CV_Error(CV_StsNullPtr, "NULL arr pointer (in showImage)" );\r
CV_Assert(arr)\r
\r
- IplImage* tempImage = (IplImage*)arr;\r
+ CvMat * mat, stub;\r
+ int origin=0;\r
\r
- if (!isSameSize(image2Draw_ipl,tempImage))\r
- {\r
- cvReleaseImage(&image2Draw_ipl);\r
+ if( CV_IS_IMAGE_HDR( arr ))\r
+ origin = ((IplImage*)arr)->origin;\r
\r
- //the image in ipl (to do a deep copy with cvCvtColor)\r
- image2Draw_ipl=cvCreateImage(cvGetSize(tempImage),IPL_DEPTH_8U,3);\r
+ mat = cvGetMat(arr, &stub);\r
\r
- //the ipl image in qt format (with shared memory)\r
- //image2Draw_qt = QImage((uchar*) image2Draw_ipl->imageData, image2Draw_ipl->width, image2Draw_ipl->height,QImage::Format_RGB888);\r
+ //IplImage* tempImage = (IplImage*)arr;\r
\r
- //nbChannelOriginImage = tempImage->nChannels;\r
+ if( CV_IS_IMAGE_HDR( arr ))\r
+ origin = ((IplImage*)arr)->origin;\r
+\r
+ if (!CV_ARE_SIZES_EQ(image2Draw_mat,mat))\r
+ {\r
+ cvReleaseMat(&image2Draw_mat);\r
+ //the image in ipl (to do a deep copy with cvCvtColor)\r
+ image2Draw_mat = cvCreateMat( mat->rows, mat->cols, CV_8UC3 );\r
\r
updateGeometry();\r
}\r
\r
- nbChannelOriginImage = tempImage->nChannels;\r
-\r
+ nbChannelOriginImage = cvGetElemType(mat);\r
\r
- //cvCvtColor(tempImage,image2Draw_ipl,CV_BGR2RGB);//will not work if tempImage is 1 channel !!\r
- cvConvertImage(tempImage,image2Draw_ipl,CV_CVTIMG_SWAP_RB );\r
+ cvConvertImage(mat,image2Draw_mat,(origin != 0 ? CV_CVTIMG_FLIP : 0) + CV_CVTIMG_SWAP_RB );\r
\r
viewport()->update();\r
}\r
\r
QSize ViewPort::sizeHint() const\r
{\r
- if(image2Draw_ipl)\r
- return QSize(image2Draw_ipl->width,image2Draw_ipl->height);\r
+ if(image2Draw_mat)\r
+ return QSize(image2Draw_mat->cols,image2Draw_mat->rows);\r
else\r
return QGraphicsView::sizeHint();\r
}\r
{\r
\r
controlImagePosition();\r
- ratioX=width()/float(image2Draw_ipl->width);\r
- ratioY=height()/float(image2Draw_ipl->height);\r
+ ratioX=width()/float(image2Draw_mat->cols);\r
+ ratioY=height()/float(image2Draw_mat->rows);\r
\r
\r
if(param_keepRatio == CV_WINDOW_KEEPRATIO)//to keep the same aspect ratio\r
{\r
- QSize newSize = QSize(image2Draw_ipl->width,image2Draw_ipl->height);\r
+ QSize newSize = QSize(image2Draw_mat->cols,image2Draw_mat->rows);\r
newSize.scale(event->size(),Qt::KeepAspectRatio);\r
\r
//imageWidth/imageHeight = newWidth/newHeight +/- epsilon\r
\r
void ViewPort::draw2D(QPainter *painter)\r
{\r
- image2Draw_qt = QImage((uchar*) image2Draw_ipl->imageData, image2Draw_ipl->width, image2Draw_ipl->height,QImage::Format_RGB888);\r
+ image2Draw_qt = QImage((uchar*) image2Draw_mat->data.ptr, image2Draw_mat->cols, image2Draw_mat->rows,QImage::Format_RGB888);\r
image2Draw_qt_resized = image2Draw_qt.scaled(viewport()->width(),viewport()->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);\r
painter->drawImage(0,0,image2Draw_qt_resized);\r
//painter->drawImage(0,0,image2Draw_qt_resized);\r
}\r
\r
+//only if CV_8UC1 or CV_8UC3\r
void ViewPort::drawStatusBar()\r
{\r
if (mouseCoordinate.x()>=0 &&\r
mouseCoordinate.y()>=0 &&\r
- mouseCoordinate.x()<image2Draw_ipl->width &&\r
- mouseCoordinate.y()<image2Draw_ipl->height)\r
+ mouseCoordinate.x()<image2Draw_mat->cols &&\r
+ mouseCoordinate.y()<image2Draw_mat->rows)\r
{\r
QRgb rgbValue = image2Draw_qt.pixel(mouseCoordinate);\r
\r
- if (nbChannelOriginImage==3)\r
+ if (nbChannelOriginImage==CV_8UC3 )\r
{\r
centralWidget->myStatusBar_msg->setText(tr("<font color='black'>Coordinate: %1x%2 ~ </font>")\r
.arg(mouseCoordinate.x())\r
tr("<font color='green'>G:%4 </font>").arg(qGreen(rgbValue))+//.arg(value.val[1])+\r
tr("<font color='blue'>B:%5</font>").arg(qBlue(rgbValue))//.arg(value.val[2])\r
);\r
- }else{\r
+ }\r
+\r
+ if (nbChannelOriginImage==CV_8UC1)\r
+ {\r
//all the channel have the same value (because of cvconvertimage), so only the r channel is dsplayed\r
centralWidget->myStatusBar_msg->setText(tr("<font color='black'>Coordinate: %1x%2 ~ </font>")\r
.arg(mouseCoordinate.x())\r