Salome HOME
refs #525: autocolor of zones in a calculation case.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Tool.cxx
index f2e3f6fe3e75f8598f610333c0c16313ec175b94..dce2fd85dda963e9c18c73800928883dc20f01f3 100644 (file)
@@ -730,3 +730,50 @@ QString HYDROGUI_Tool::GetCoordinateString( const double theNumber, bool isInLoc
     return QString::number( theNumber, 'f', 2 );
 }
 
+Handle(Image_PixMap) HYDROGUI_Tool::Pixmap( const QImage& theImage )
+{
+    Handle(Image_PixMap) pix;
+    if ( theImage.isNull() || theImage.format() == QImage::Format_Invalid )
+        return pix;
+
+    Handle(Image_PixMap) tmpPix = new Image_PixMap();
+    tmpPix->SetTopDown( false );
+    QImage anImage = theImage.mirrored();
+    if ( !anImage.hasAlphaChannel() && anImage.allGray() )
+    {
+        tmpPix->InitTrash( Image_PixMap::ImgGray, anImage.width(), anImage.height(), anImage.width() );
+        for ( int r = 0; r < anImage.height(); r++ )
+        {
+            Standard_Byte* aRowData = tmpPix->ChangeRow( anImage.height() - r - 1 );
+            for  ( int p = 0; p < anImage.width(); p++ )
+                aRowData[p] = qRed( anImage.pixel( p, r ) );
+        }
+    }
+    else
+    {
+        Image_PixMap::ImgFormat aFormat;
+        if ( anImage.hasAlphaChannel() )
+        {
+            if ( anImage.format() != QImage::Format_ARGB32 )
+                anImage = anImage.convertToFormat( QImage::Format_ARGB32 );
+            aFormat = Image_PixMap::ImgRGBA;
+        }
+        else
+        {
+            if ( anImage.format() != QImage::Format_RGB888 )
+                anImage = anImage.convertToFormat( QImage::Format_RGB888 );
+            aFormat = Image_PixMap::ImgRGB;
+        }
+
+        tmpPix->InitWrapper( aFormat, (Standard_Byte*)anImage.bits(), anImage.width(), anImage.height(), anImage.bytesPerLine() );
+    }
+
+    if ( !tmpPix.IsNull() )
+    {
+        pix = new Image_PixMap();
+        pix->InitCopy( *tmpPix.operator->() );
+        pix->SetTopDown( tmpPix->IsTopDown() );
+    }
+
+    return pix;
+}