bool Lerc::Convert(const CntZImage& zImg, T* arr, BitMask* pBitMask) const { if (!arr || !zImg.getSize()) return false; const bool fltPnt = (typeid(*arr) == typeid(double)) || (typeid(*arr) == typeid(float)); int h = zImg.getHeight(); int w = zImg.getWidth(); if (pBitMask) { pBitMask->SetSize(w, h); pBitMask->SetAllValid(); } const CntZ* srcPtr = zImg.getData(); T* dstPtr = arr; int num = w * h; for (int k = 0; k < num; k++) { if (srcPtr->cnt > 0) *dstPtr = fltPnt ? (T)srcPtr->z : (T)floor(srcPtr->z + 0.5); else if (pBitMask) pBitMask->SetInvalid(k); srcPtr++; dstPtr++; } return true; }