CHARLS_IMEXPORT JLS_ERROR JpegLsEncode(void* pdataCompressed, size_t cbyteBuffer, size_t* pcbyteWritten, const void* pdataUncompressed, size_t cbyteUncompressed, const JlsParamaters* pparams) { JlsParamaters info = *pparams; if(info.bytesperline == 0) { info.bytesperline = info.width * ((info.bitspersample + 7)/8); if (info.ilv != ILV_NONE) { info.bytesperline *= info.components; } } JLS_ERROR parameterError = CheckInput(pdataCompressed, cbyteBuffer, pdataUncompressed, cbyteUncompressed, &info); if (parameterError != OK) return parameterError; if (pcbyteWritten == NULL) return InvalidJlsParameters; Size size = Size(info.width, info.height); LONG cbit = info.bitspersample; JLSOutputStream stream; stream.Init(size, info.bitspersample, info.components); if (info.colorTransform != 0) { stream.AddColorTransform(info.colorTransform); } if (info.ilv == ILV_NONE) { LONG cbyteComp = size.cx*size.cy*((cbit +7)/8); for (LONG icomp = 0; icomp < info.components; ++icomp) { const BYTE* pbyteComp = static_cast<const BYTE*>(pdataUncompressed) + icomp*cbyteComp; stream.AddScan(pbyteComp, &info); } } else { stream.AddScan(pdataUncompressed, &info); } stream.Write((BYTE*)pdataCompressed, cbyteBuffer); *pcbyteWritten = stream.GetBytesWritten(); return OK; }
CHARLS_IMEXPORT(JLS_ERROR) JpegLsEncode(void* compressedData, size_t compressedLength, size_t* pcbyteWritten, const void* uncompressedData, size_t uncompressedLength, struct JlsParameters* pparams) { JlsParameters info = *pparams; if(info.bytesperline == 0) { info.bytesperline = info.width * ((info.bitspersample + 7)/8); if (info.ilv != ILV_NONE) { info.bytesperline *= info.components; } } JLS_ERROR parameterError = CheckInput(compressedData, compressedLength, uncompressedData, uncompressedLength, &info); if (parameterError != OK) return parameterError; if (pcbyteWritten == NULL) return InvalidJlsParameters; Size size = Size(info.width, info.height); JLSOutputStream stream; stream.Init(size, info.bitspersample, info.components); if (info.colorTransform != 0) { stream.AddColorTransform(info.colorTransform); } if (info.ilv == ILV_NONE) { LONG cbyteComp = size.cx*size.cy*((info.bitspersample +7)/8); for (LONG component = 0; component < info.components; ++component) { const BYTE* compareData = static_cast<const BYTE*>(uncompressedData) + component*cbyteComp; stream.AddScan(compareData, &info); } } else { stream.AddScan(uncompressedData, &info); } stream.Write((BYTE*)compressedData, compressedLength); *pcbyteWritten = stream.GetBytesWritten(); return OK; }