高人,谁帮我看看这个功能怎么搞定啊.程序处理后得到BYTE型RAW数据,怎么利用Cximage保存为JPG格式图像.
BOOL CImgLink::SetImage(unsigned char **pImage,int *nWidth,int *nHeight,int *nColor,CString strFullpath)
{
int nImageType=GetTypeFromFileName(strFullpath);
CxImage *pSelectedImage = NULL;
if(nImageType!=CXIMAGE_FORMAT_UNKNOWN)
{
pSelectedImage=new CxImage(strFullpath, nImageType);
}
*nWidth = pSelectedImage->GetWidth();
*nHeight = pSelectedImage->GetHeight();
*nColor = pSelectedImage->GetNumColors();
int nByteWidth;
if(*nColor == 0) // 彩色
{
nByteWidth = (*nWidth*24+31)/32*4;
*pImage = new unsigned char[nByteWidth**nHeight];
for(int i=0; i<*nHeight; i++)
for(int j=0; j<*nWidth; j++)
{ (*pImage)[i*nByteWidth+j*3+0] = pSelectedImage->GetBits()[i**nWidth*3+j*3+0];
(*pImage)[i*nByteWidth+j*3+1] = pSelectedImage->GetBits()[i**nWidth*3+j*3+1];
(*pImage)[i*nByteWidth+j*3+2] = pSelectedImage->GetBits()[i**nWidth*3+j*3+2];
}
} DWORD size = nByteWidth**nHeight;
size = pSelectedImage->GetSize();
BYTE *pbuffer = new BYTE[size];
memcpy(pbuffer,pSelectedImage->GetBits(),size*sizeof(BYTE));
CxImage imgcopy(pbuffer,size,CXIMAGE_FORMAT_JPG);
if(imgcopy.IsValid()) return FALSE;
if(!imgcopy.IsGrayScale()) imgcopy.IncreaseBpp(24);
imgcopy.SetJpegQuality(99);
imgcopy.Save("c:\\test.jpg",CXIMAGE_FORMAT_JPG);
// delete pSelectedImage;
// pSelectedImage = NULL;
return TRUE;}生成的图象大小为0,全部为黑色,哪里有问题呢?高人指点,把我仅有的分全部散掉.
BOOL CImgLink::SetImage(unsigned char **pImage,int *nWidth,int *nHeight,int *nColor,CString strFullpath)
{
int nImageType=GetTypeFromFileName(strFullpath);
CxImage *pSelectedImage = NULL;
if(nImageType!=CXIMAGE_FORMAT_UNKNOWN)
{
pSelectedImage=new CxImage(strFullpath, nImageType);
}
*nWidth = pSelectedImage->GetWidth();
*nHeight = pSelectedImage->GetHeight();
*nColor = pSelectedImage->GetNumColors();
int nByteWidth;
if(*nColor == 0) // 彩色
{
nByteWidth = (*nWidth*24+31)/32*4;
*pImage = new unsigned char[nByteWidth**nHeight];
for(int i=0; i<*nHeight; i++)
for(int j=0; j<*nWidth; j++)
{ (*pImage)[i*nByteWidth+j*3+0] = pSelectedImage->GetBits()[i**nWidth*3+j*3+0];
(*pImage)[i*nByteWidth+j*3+1] = pSelectedImage->GetBits()[i**nWidth*3+j*3+1];
(*pImage)[i*nByteWidth+j*3+2] = pSelectedImage->GetBits()[i**nWidth*3+j*3+2];
}
} DWORD size = nByteWidth**nHeight;
size = pSelectedImage->GetSize();
BYTE *pbuffer = new BYTE[size];
memcpy(pbuffer,pSelectedImage->GetBits(),size*sizeof(BYTE));
CxImage imgcopy(pbuffer,size,CXIMAGE_FORMAT_JPG);
if(imgcopy.IsValid()) return FALSE;
if(!imgcopy.IsGrayScale()) imgcopy.IncreaseBpp(24);
imgcopy.SetJpegQuality(99);
imgcopy.Save("c:\\test.jpg",CXIMAGE_FORMAT_JPG);
// delete pSelectedImage;
// pSelectedImage = NULL;
return TRUE;}生成的图象大小为0,全部为黑色,哪里有问题呢?高人指点,把我仅有的分全部散掉.
我现在也碰到这个问题,一起来解决~~
不知你是怎么做的,我想:
要有以下几个步骤:
读取RAW到内存
NEW 一个 bmp图,可借助CDib类(网上找找,很多人用的).生成BMP的头文件和什么调色表,再接上内存中的// 这下面是RAW图像格式和BITMAP图像格式的相互间的交互转换
CDib* CRaw::GetDib()
//由Raw图像获得Dib位图. {
CDib* pDib= new CDib(m_sizeImage, 8);
BYTE* pColorTable= (BYTE*) pDib->m_lpvColorTable;
BYTE* pImage;
CSize sizeDib;
int nX, nY;
if (m_sizeImage.cx%4==0)
sizeDib.cx=m_sizeImage.cx;
else
sizeDib.cx=((m_sizeImage.cx)/4+1)*4;
sizeDib.cy=m_sizeImage.cy;
for (int i=0; i<256; i++){
pColorTable[i*4]= i;
pColorTable[i*4+1]= i;
pColorTable[i*4+2]= i;
pColorTable[i*4+3]= 0;
}
pImage= new BYTE[sizeDib.cy*sizeDib.cx];
memset(pImage, 0, sizeDib.cy*sizeDib.cx);
for (nY=0; nY<M_SIZEIMAGE.CY; pDib- pImage[nY*sizeDib.cx+nX]="m_pBuff[(m_sizeImage.cy-1-nY)*m_sizeImage.cx+nX];" nX++) nX<m_sizeImage.cx; (nX="0;" for nY++)>m_lpImage= pImage;
return pDib;
}
CxImage orgimage;
orgimage.CreateFromHANDLE(pDib); //生成文件