213a214,216 > // ^IMAGE = ("BLAH.IMG",1) -- start at record 1 (1 based) > // ^IMAGE = ("BLAH.IMG") -- still start at record 1 (equiv of "BLAH.IMG") > // ^IMAGE = ("BLAH.IMG", 5 ) -- start at byte 5 (the fifth byte in the file) 226c229,230 < int nDetachedOffset = 0; --- > int nDetachedOffset=0; > int bDetachedOffsetBytes=FALSE; // use records by default 231,234c235,244 < nDetachedOffset = atoi(poDS->GetKeywordSub( osImageKeyword, 2 )); < } < < if( osQube[0] == '"' ) --- > nDetachedOffset = atoi(poDS->GetKeywordSub( osImageKeyword, 2 )) -1; // the spec states this is 1 based > if (strstr(poDS->GetKeywordSub( osImageKeyword, 2 ), "")!=NULL) > bDetachedOffsetBytes=TRUE; > > // this is done because GetKeywordSub doesn't keep quotes, which means the next test fails > CPLString osTPath = CPLGetPath(poOpenInfo->pszFilename); > CPLString osFilename = osQube; > poDS->CleanString( osFilename ); > osTargetFile = CPLFormCIFilename( osTPath, osFilename, NULL ); > } else if( osQube[0] == '"' ) 248a259 > int nLinePrefixBytes=0; 325c336,337 < nBands = atoi(poDS->GetKeyword("IMAGE.BANDS","1")); --- > nBands = atoi(poDS->GetKeyword("IMAGE.BANDS","1")); > nLinePrefixBytes = atoi(poDS->GetKeyword("IMAGE.LINE_PREFIX_BYTES","")); 341,343c353,358 < else if( nDetachedOffset > 0 ) < nSkipBytes = nDetachedOffset; < else --- > else if( nDetachedOffset > 0 ) { > if (bDetachedOffsetBytes) > nSkipBytes = nDetachedOffset; > else > nSkipBytes = nDetachedOffset * record_bytes; > } else 683c698 < nLineOffset = nPixelOffset * nCols; --- > nLineOffset = record_bytes;//nItemSize * nBands * nCols; 689c704 < nLineOffset = nPixelOffset * nCols; --- > nLineOffset = record_bytes;//nItemSize * nBands * nCols; 695c710 < nLineOffset = nItemSize * nBands * nCols; --- > nLineOffset = record_bytes;//nItemSize * nBands * nCols; 711c726 < nSkipBytes + nBandOffset * i, --- > nSkipBytes + nBandOffset * i+nLinePrefixBytes,