Esempio n. 1
0
 int copyDataToRasterElement(DataElement* pElement, DataPointerArgs* pArgs, void* pData)
 {
    RasterElement* pRaster = dynamic_cast<RasterElement*>(pElement);
    if (pRaster == NULL || pData == NULL)
    {
       setLastError(SIMPLE_BAD_PARAMS);
       return 1;
    }
    const RasterDataDescriptor* pDesc = static_cast<const RasterDataDescriptor*>(pRaster->getDataDescriptor());
    void* pRawData = pRaster->getRawData();
    if (pArgs == NULL && pRawData != NULL)
    {
       size_t len = pDesc->getRowCount() * pDesc->getColumnCount() * pDesc->getBandCount()
                  * pDesc->getBytesPerElement();
       memcpy(pRawData, pData, len);
       setLastError(SIMPLE_NO_ERROR);
       return 0;
    }
    DataPointerArgs args = {
       0, pDesc->getRowCount() - 1,
       0, pDesc->getColumnCount() - 1,
       0, pDesc->getBandCount() - 1,
       0 };
    switch (pDesc->getInterleaveFormat())
    {
    case BSQ:
       args.interleaveFormat = 0;
       break;
    case BIP:
       args.interleaveFormat = 1;
       break;
    case BIL:
       args.interleaveFormat = 2;
       break;
    }
    if (pArgs == NULL)
    {
       pArgs = &args;
    }
    bool success = true;
    switchOnComplexEncoding(pDesc->getDataType(), copySubcube, pData, pRaster,
       pArgs->rowStart, pArgs->rowEnd,
       pArgs->columnStart, pArgs->columnEnd,
       pArgs->bandStart, pArgs->bandEnd, true, success);
    if (!success)
    {
       setLastError(SIMPLE_OTHER_FAILURE);
       return 1;
    }
    setLastError(SIMPLE_NO_ERROR);
    return 0;
 }
Esempio n. 2
0
void ConvolutionFilterShell::ConvolutionFilterThread::run()
{
   EncodingType encoding = static_cast<const RasterDataDescriptor*>(
         mInput.mpRaster->getDataDescriptor())->getDataType();
   switchOnComplexEncoding(encoding, convolve, NULL);
}
Esempio n. 3
0
 void* createDataPointer(DataElement* pElement, DataPointerArgs* pArgs, int* pOwn)
 {
    RasterElement* pRaster = dynamic_cast<RasterElement*>(pElement);
    if (pRaster == NULL || pOwn == NULL)
    {
       setLastError(SIMPLE_BAD_PARAMS);
       return NULL;
    }
    void* pRawData = pRaster->getRawData();
    if (pArgs == NULL && pRawData != NULL)
    {
       *pOwn = 0;
       setLastError(SIMPLE_NO_ERROR);
       return pRawData;
    }
    *pOwn = 1;
    const RasterDataDescriptor* pDesc = static_cast<const RasterDataDescriptor*>(pRaster->getDataDescriptor());
    DataPointerArgs args = {
       0, pDesc->getRowCount() - 1,
       0, pDesc->getColumnCount() - 1,
       0, pDesc->getBandCount() - 1,
       0 };
    switch (pDesc->getInterleaveFormat())
    {
    case BSQ:
       args.interleaveFormat = 0;
       break;
    case BIP:
       args.interleaveFormat = 1;
       break;
    case BIL:
       args.interleaveFormat = 2;
       break;
    }
    if (pArgs == NULL)
    {
       pArgs = &args;
    }
    unsigned int rowCount = pArgs->rowEnd - pArgs->rowStart + 1;
    unsigned int columnCount = pArgs->columnEnd - pArgs->columnStart + 1;
    unsigned int bandCount = pArgs->bandEnd - pArgs->bandStart + 1;
    pRawData = new (std::nothrow) char[rowCount * columnCount * bandCount * pDesc->getBytesPerElement()];
    if (pRawData == NULL)
    {
       setLastError(SIMPLE_NO_MEM);
       return NULL;
    }
    bool success = true;
    switchOnComplexEncoding(pDesc->getDataType(), copySubcube, pRawData, pRaster,
       pArgs->rowStart, pArgs->rowEnd,
       pArgs->columnStart, pArgs->columnEnd,
       pArgs->bandStart, pArgs->bandEnd, false, success);
    if (!success)
    {
       delete [] pRawData;
       setLastError(SIMPLE_OTHER_FAILURE);
       return NULL;
    }
    setLastError(SIMPLE_NO_ERROR);
    return pRawData;
 }