int imFileFormatECW::Open(const char* file_name) { NCSError eError = NCScbmOpenFileView((char*)file_name, &this->pNCSFileView, NULL); if (eError != NCS_SUCCESS) { if (eError == NCS_FILE_OPEN_ERROR || eError == NCS_FILE_NOT_FOUND || eError == NCS_FILE_INVALID) return IM_ERR_OPEN; else if (eError == NCS_FILE_OPEN_FAILED) return IM_ERR_FORMAT; else return IM_ERR_ACCESS; } NCSFileType fileType = NCScbmGetFileType(this->pNCSFileView); if (fileType == NCS_FILE_ECW) strcpy(this->compression, "ECW"); else if (fileType == NCS_FILE_JP2) strcpy(this->compression, "JPEG-2000"); else return IM_ERR_COMPRESS; this->image_count = 1; return IM_ERR_NONE; }
/* * Class: com_ermapper_ecw_JNCSFile * Method: ECWOpen * Signature: (Ljava/lang/String;Z)I */ JNIEXPORT jint JNICALL Java_com_ermapper_ecw_JNCSFile_ECWOpen (JNIEnv *pEnv, jobject JNCSFile, jstring Filename, jboolean bProgressive) { const char *pFilename = (*pEnv)->GetStringUTFChars(pEnv, Filename, (jboolean *)NULL); NCSFileView *pNCSFileView = NULL; NCSFileViewSetInfo *pNCSFileViewSetInfo = NULL; NCSError nError; if (bProgressive) { nError = NCScbmOpenFileView((char *)pFilename, &pNCSFileView, NCSJNIRefreshCallback); } else { nError = NCScbmOpenFileView((char *)pFilename, &pNCSFileView, NULL); } if (NCS_FAILED(nError)) { // Return the short filename, since people dont like diplaying the full ecwp url char *pProtocol, *pHost, *pECWFilename, *pShortFileName; int nProtocolLength, nHostLength, nFilenameLength; NCSecwNetBreakdownUrl((char *)pFilename, &pProtocol, &nProtocolLength, &pHost, &nHostLength, &pECWFilename, &nFilenameLength); if (pECWFilename && nFilenameLength > 0 && (strstr(pECWFilename, "/") || strstr(pECWFilename, "\\"))) { int len = strlen(pECWFilename), index = 0; for (index=len; index > 0; index--) { pShortFileName = &pECWFilename[index]; if (pECWFilename[index] == '\\' || pECWFilename[index] == '/') { pShortFileName ++; break; } } } else { pShortFileName = (char *)pFilename; } NCSFormatErrorText(NCS_FILE_OPEN_FAILED, pShortFileName, NCSGetLastErrorText(nError)); return NCS_FILE_OPEN_FAILED; } else { NCSJNIInfo *pJNIInfo = NULL; char *pMimeType = NULL; NCSFileViewFileInfo *pNCSFileInfo = NULL; nError = NCSCreateJNIInfoStruct(pEnv, JNCSFile, pNCSFileView, &pJNIInfo); NCScbmGetViewFileInfo(pNCSFileView, &pNCSFileInfo); // Set the properties in the actual Java object (*pEnv)->SetIntField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDWidth, (jint)pNCSFileInfo->nSizeX ); (*pEnv)->SetIntField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDHeight, (jint)pNCSFileInfo->nSizeY ); (*pEnv)->SetIntField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDNumberOfBands, (jint)pNCSFileInfo->nBands); (*pEnv)->SetDoubleField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDCompressionRate, (jdouble)pNCSFileInfo->nCompressionRate ); (*pEnv)->SetDoubleField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDCellIncrementX, (jdouble)pNCSFileInfo->fCellIncrementX ); (*pEnv)->SetDoubleField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDCellIncrementY, (jdouble)pNCSFileInfo->fCellIncrementY ); (*pEnv)->SetIntField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDCellSizeUnits, (jint)pNCSFileInfo->eCellSizeUnits); (*pEnv)->SetDoubleField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDOriginX, (jdouble)pNCSFileInfo->fOriginX ); (*pEnv)->SetDoubleField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDOriginY, (jdouble)pNCSFileInfo->fOriginY ); (*pEnv)->SetObjectField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDDatum, (*pEnv)->NewStringUTF(pEnv, pNCSFileInfo->szDatum)); (*pEnv)->SetObjectField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDProjection, (*pEnv)->NewStringUTF(pEnv, pNCSFileInfo->szProjection)); (*pEnv)->SetObjectField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDFilename, Filename); (*pEnv)->SetBooleanField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDIsOpen, JNI_TRUE); (*pEnv)->SetLongField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDNativeDataPointer, (jlong)pJNIInfo); (*pEnv)->SetIntField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDFileType, (jint)NCScbmGetFileType(pNCSFileView) ); pMimeType = NCScbmGetFileMimeType(pNCSFileView); if( pMimeType ) { (*pEnv)->SetObjectField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDFileMimeType, (*pEnv)->NewStringUTF(pEnv, pMimeType) ); NCSFree( pMimeType ); pMimeType = NULL; } else { (*pEnv)->SetObjectField(pEnv, JNCSFile, pGlobalJNCSFieldIDs->jIDFileMimeType, NULL ); } } (*pEnv)->ReleaseStringUTFChars(pEnv, Filename, (const char *)pFilename); NCScbmGetViewInfo(pNCSFileView, &pNCSFileViewSetInfo); pNCSFileViewSetInfo->pClientData = (void *)(*pEnv)->NewGlobalRef(pEnv, JNCSFile); return NCS_SUCCESS; }