高人,谁帮我看看这个功能怎么搞定啊.程序处理后得到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,全部为黑色,哪里有问题呢?高人指点,把我仅有的分全部散掉.

解决方案 »

  1.   

    没人回答你.
    我现在也碰到这个问题,一起来解决~~
    不知你是怎么做的,我想:
    要有以下几个步骤:
    读取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); //生成文件
       
      

  2.   

    不是JPG格式的话,怎么可能生成JPG呢,转化成dib,然后再从dib转换到jpg吧?