+ return !anImage.isNull();
+}
+
+bool HYDROData_Image::OpenECW(char* theFileName, QImage& theImage, ECW_FileInfo* theECWInfo)
+{
+ NCSFileView *pNCSFileView;
+ NCSFileViewFileInfo *pNCSFileInfo;
+ NCSError eError = NCS_SUCCESS;
+ UINT32 band, nBands;
+ UINT32 XSize, YSize;
+ NCSecwInit();
+
+ eError = NCScbmOpenFileView(theFileName, &pNCSFileView, NULL);
+ if(eError != NCS_SUCCESS)
+ return false;
+
+ eError = NCScbmGetViewFileInfo(pNCSFileView, &pNCSFileInfo);
+ if(eError != NCS_SUCCESS)
+ return false;
+
+ XSize = pNCSFileInfo->nSizeX;
+ YSize = pNCSFileInfo->nSizeY;
+ nBands = pNCSFileInfo->nBands;
+ if (theECWInfo)
+ {
+ //ECW_CellUnits myCellSizeUnits;
+ CellSizeUnits aCellUnits = pNCSFileInfo->eCellSizeUnits;
+ if (aCellUnits == ECW_CELL_UNITS_METERS)
+ theECWInfo->myCellSizeUnits = ECW_CellUnits_Meters;
+ else if (aCellUnits == ECW_CELL_UNITS_DEGREES)
+ theECWInfo->myCellSizeUnits = ECW_CellUnits_Deg;
+ else if (aCellUnits == ECW_CELL_UNITS_FEET)
+ theECWInfo->myCellSizeUnits = ECW_CellUnits_Feet;
+ else
+ theECWInfo->myCellSizeUnits = ECW_CellUnits_Unknown;
+ theECWInfo->myCellIncrementX = pNCSFileInfo->fCellIncrementX;
+ theECWInfo->myCellIncrementY = pNCSFileInfo->fCellIncrementY;
+ theECWInfo->myOriginX = pNCSFileInfo->fOriginX;
+ theECWInfo->myOriginY = pNCSFileInfo->fOriginY;
+ theECWInfo->myXSize = pNCSFileInfo->nSizeX;
+ theECWInfo->myYSize = pNCSFileInfo->nSizeY;
+ }
+
+ std::vector<UINT32> band_list(nBands);
+ for( band = 0; band < nBands; band++ )
+ band_list[band] = band;
+
+ eError = NCScbmSetFileView(pNCSFileView, nBands, &band_list[0], 0, 0, XSize - 1, YSize - 1, XSize, YSize); //view an image into the original size
+
+ if(eError != NCS_SUCCESS)
+ {
+ NCScbmCloseFileView(pNCSFileView);
+ return false;
+ }
+
+ UINT8 *pRGBTriplets;
+ pRGBTriplets = (UINT8 *) malloc(XSize*3);
+
+ QImage anImage(XSize, YSize, QImage::Format_RGB32);
+
+ for(UINT32 line = 0; line < YSize; line++)
+ {
+ NCSEcwReadStatus eStatus;
+ eStatus = NCScbmReadViewLineRGB(pNCSFileView, pRGBTriplets);
+ if(eStatus == NCSECW_READ_OK)
+ {
+ QRgb* crp = (QRgb*)anImage.scanLine(line);
+ for(UINT32 j = 0; j < XSize; j++)
+ {
+ QRgb val = qRgb((int)pRGBTriplets[j*3],(int)pRGBTriplets[j*3+1],(int)pRGBTriplets[j*3+2]);
+ memcpy((void*)(crp+j), &val, sizeof(QRgb));
+ }
+ }
+ else
+ {
+ free(pRGBTriplets);
+ NCScbmCloseFileView(pNCSFileView);
+ return false;
+ }
+ }
+
+ free(pRGBTriplets);
+ NCScbmCloseFileView(pNCSFileView);
+ theImage = anImage;
+ return true;
+}