- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
II try to use UIC::JpegExEncoder to compress a Mono 640x480 8bit image.Encodiong seems OK no error.
But the result image is blank. Quality is 75. Do you have any idea?
Thanks
The Bmp and wdp file attached(Rename Camera 1-1.wdp.jpg to Camera 1-1.wdp). And followed is my code:
bool EncodeJPEGXRImage(CIppImage& image,BaseStreamOutput& out,CJPEGXRIppImageInitParam* param,int thread)
{
Image imageCn;
Rect refgrid;
Point origin;
RectSize size;
ImageDataPtr dataPtr;
ImageColorSpec colorSpec;
ImageDataOrder dataOrder;
ImageSamplingGeometry geometry;
Ipp32u iChannels;
Ipp32u iPrecision;
Ipp32u iFormat;
Ipp32u iDU;
Ipp32u bAlphaPresent = 0;
Ipp16u iTilesUniform[4] = {0};
Ipp32u iWidth = image.Width();
Ipp32u iHeight = image.Height();
InputParams inParams;
Ipp32u i;
intalpha_mode = 0;
int aquality = 1;
JPEGXREncoder encoder;
iTilesUniform[0] = 0;
iTilesUniform[1] = 0;
iTilesUniform[2] = (iWidth < 16)?0:iWidth/16;
iTilesUniform[3] = (iHeight < 16)?0:iHeight/16;
inParams.iQuality = (param->Quality* 255)/100;
if(inParams.iQuality < 0) inParams.iQuality = 1;
aquality = inParams.iQuality;
inParams.iOverlap = 0;
inParams.iBands = 0;
inParams.iSampling = 0;
inParams.iTrim = 0;
inParams.bFrequency = 0;
inParams.bCMYKD = 0;
inParams.iShift = -1;
inParams.bAlphaPlane = 0;
inParams.pTilesUniform = iTilesUniform;
if(ExcStatusOk != encoder.Init())
returnfalse;
if(ExcStatusOk != encoder.SetParams(inParams))
returnfalse;
if(ExcStatusOk != encoder.AttachStream(out))
returnfalse;
iChannels = image.NChannels();
iPrecision = image.Precision();
iFormat = image.Format();
iDU = iPrecision/8;
size.SetWidth(image.Width());
size.SetHeight(image.Height());
origin.SetX(0);
origin.SetY(0);
refgrid.SetOrigin(origin);
refgrid.SetSize(size);
geometry.SetRefGridRect(refgrid);
geometry.ReAlloc(iChannels);
geometry.SetEnumSampling(UIC::S444);
dataOrder.ReAlloc(Interleaved, iChannels);
dataOrder.PixelStep()[0] = iChannels * iDU;
dataOrder.LineStep() [0] = image.Step();
imageCn.ColorSpec().ReAlloc(iChannels);
imageCn.ColorSpec().SetEnumColorSpace((ImageEnumColorSpace)image.Color());
imageCn.ColorSpec().SetColorSpecMethod(Enumerated);
imageCn.ColorSpec().SetComponentToColorMap(Direct);
for(i = 0; i < iChannels; i++)
{
if(iPrecision <= 8)
imageCn.ColorSpec().DataRange().SetAsRange8u(IPP_MAX_8U);
elseif(iPrecision <= 16)
{
if(iFormat == IF_UNSIGNED)
imageCn.ColorSpec().DataRange().SetAsRange16u(IPP_MAX_16U);
elseif(iFormat == IF_FIXED)
imageCn.ColorSpec().DataRange().SetAsRange16s(IPP_MIN_16S, IPP_MAX_16S);
else
imageCn.ColorSpec().DataRange().SetAsRange16f(IPP_MAX_16U);
}
else
{
if(iFormat == IF_UNSIGNED)
imageCn.ColorSpec().DataRange().SetAsRange32u(IPP_MAX_32U);
elseif(iFormat == IF_FIXED)
imageCn.ColorSpec().DataRange().SetAsRange32s(IPP_MIN_32S, IPP_MAX_32S);
else
imageCn.ColorSpec().DataRange().SetAsRange32f((Ipp32f)IPP_MIN_32S, (Ipp32f)IPP_MAX_32S);
}
}
dataPtr.p8u = image;
imageCn.Buffer().Attach(&dataPtr, dataOrder, geometry);
if(ExcStatusOk != encoder.AttachImage(imageCn))
returnfalse;
if(ExcStatusOk != encoder.WriteFileHeader(alpha_mode))
returnfalse;
// Planar alpha support
switch(image.Color())
{
caseRGBA:
caseBGRA:
caseRGBAP:
caseBGRAP:
caseCMYKA:
bAlphaPresent = 1;
break;
}
if(bAlphaPresent && alpha_mode == 1)
{
CIppImage imagePrimary;
CIppImage imageAlpha;
IppiSize iROI = {image.Width(), image.Height()};
Ipp8u* pData = image;
Ipp8u* pDataPr;
Ipp8u* pDataAl;
Ipp32u iStep = image.Step();
Ipp32u iPStep, iAStep;
Ipp32u i, j;
if(0 != imagePrimary.Alloc(image.Width(), image.Height(), iChannels - 1, iPrecision, 1))
returnfalse;
if(0 != imageAlpha.Alloc(image.Width(), image.Height(), 1, iPrecision, 1))
returnfalse;
pDataPr = imagePrimary;
iPStep = imagePrimary.Step();
pDataAl = imageAlpha;
iAStep = imageAlpha.Step();
if(iPrecision == 8)
{
if(image.Color() == IC_CMYKA)
{
for(i = 0; i < iHeight; i++)
{
Ipp8u* pSrc = pData + iStep * i;
Ipp8u* pDstPr = pDataPr + iPStep * i;
Ipp8u* pDstAl = pDataAl + iAStep * i;
for(j = 0; j < iWidth; j++, pSrc += 5, pDstPr += 4, pDstAl++)
{
pDstPr[0] = pSrc[0];
pDstPr[1] = pSrc[1];
pDstPr[2] = pSrc[2];
pDstPr[3] = pSrc[3];
pDstAl[0] = pSrc[4];
}
}
}
else
{
ippiCopy_8u_AC4C3R(pData, iStep, pDataPr, iPStep, iROI);
ippiCopy_8u_C4C1R(pData + 3, iStep, pDataAl, iAStep, iROI);
}
}
elseif(iPrecision == 16)
{
if(image.Color() == IC_CMYKA)
{
for(i = 0; i < iHeight; i++)
{
Ipp16u* pSrc = (Ipp16u*)(pData + iStep * i);
Ipp16u* pDstPr = (Ipp16u*)(pDataPr + iPStep * i);
Ipp16u* pDstAl = (Ipp16u*)(pDataAl + iAStep * i);
for(j = 0; j < iWidth; j++, pSrc += 5, pDstPr += 4, pDstAl++)
{
pDstPr[0] = pSrc[0];
pDstPr[1] = pSrc[1];
pDstPr[2] = pSrc[2];
pDstPr[3] = pSrc[3];
pDstAl[0] = pSrc[4];
}
}
}
else
{
ippiCopy_16s_AC4C3R((Ipp16s*)pData, iStep, (Ipp16s*)pDataPr, iPStep, iROI);
ippiCopy_16s_C4C1R((Ipp16s*)pData + 3, iStep, (Ipp16s*)pDataAl, iAStep, iROI);
}
}
else
{
ippiCopy_32s_AC4C3R((Ipp32s*)pData, iStep, (Ipp32s*)pDataPr, iPStep, iROI);
ippiCopy_32s_C4C1R((Ipp32s*)pData + 3, iStep, (Ipp32s*)pDataAl, iAStep, iROI);
}
geometry.SetRefGridRect(refgrid);
geometry.ReAlloc(iChannels - 1);
geometry.SetEnumSampling(UIC::S444);
dataOrder.ReAlloc(Interleaved, iChannels - 1);
dataOrder.PixelStep()[0] = (iChannels - 1) * iDU;
dataOrder.LineStep() [0] = iPStep;
switch(imageCn.ColorSpec().EnumColorSpace())
{
caseBGRA: imageCn.ColorSpec().SetEnumColorSpace(BGR); break;
caseRGBA: imageCn.ColorSpec().SetEnumColorSpace(RGB); break;
caseBGRAP: imageCn.ColorSpec().SetEnumColorSpace(BGR); break;
caseRGBAP: imageCn.ColorSpec().SetEnumColorSpace(RGB); break;
caseCMYKA: imageCn.ColorSpec().SetEnumColorSpace(CMYK);break;
default:
returnfalse;
}
dataPtr.p8u = pDataPr;
imageCn.Buffer().Attach(&dataPtr, dataOrder, geometry);
if(ExcStatusOk != encoder.AttachImage(imageCn))
returnfalse;
if(ExcStatusOk != encoder.WriteHeader())
returnfalse;
if(ExcStatusOk != encoder.WriteData())
returnfalse;
if(ExcStatusOk != encoder.FreeData())
returnfalse;
geometry.SetRefGridRect(refgrid);
geometry.ReAlloc(1);
geometry.SetEnumSampling(UIC::S444);
dataOrder.ReAlloc(Interleaved, 1);
dataOrder.PixelStep()[0] = iDU;
dataOrder.LineStep() [0] = iAStep;
imageCn.ColorSpec().SetEnumColorSpace(Grayscale);
dataPtr.p8u = pDataAl;
imageCn.Buffer().Attach(&dataPtr, dataOrder, geometry);
inParams.iQuality = aquality;
inParams.bAlphaPlane = 1;
if(ExcStatusOk != encoder.SetParams(inParams))
returnfalse;
if(ExcStatusOk != encoder.AttachImage(imageCn))
returnfalse;
if(ExcStatusOk != encoder.WriteHeader())
returnfalse;
if(ExcStatusOk != encoder.WriteData())
returnfalse;
if(ExcStatusOk != encoder.FreeData())
returnfalse;
}
else
{
if(ExcStatusOk != encoder.WriteHeader())
returnfalse;
if(ExcStatusOk != encoder.WriteData())
returnfalse;
if(ExcStatusOk != encoder.FreeData())
returnfalse;
}
returntrue;
}
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page