急!

解决方案 »

  1.   

    http://www.betajin.com/alphasun/
    有一个JPEG的类可以down,你去看看
      

  2.   

    http://member.netease.com/~inetsoft/downloads/sourcecode/windows/bitmap/jpeg.zip
      

  3.   

    BOOL  CDib::LoadJpeg (const char* szFileName)
    {
    BOOL bRet = FALSE ;
    BYTE * pStart = NULL ;
    HANDLE hMap = NULL ;
    HANDLE hFile = INVALID_HANDLE_VALUE ; Free();
    __try
    {
    // 映射文件
    pStart = this->__fooImageReadFile (szFileName, &hFile, &hMap) ;
    if (pStart == NULL)
    __leave ; // 读文件
    if (!this->LoadJpeg (pStart, ::GetFileSize (hFile, NULL)))
    __leave ;
    bRet = TRUE ;
    }
    __finally
    {
    this->__fooImageUnmapFile ((BYTE *)pStart, hMap, hFile) ;
    }
    return bRet ;
    }BOOL CDib::LoadJpeg(BYTE * pStart, int iFileSize)
    {
    BOOL bRet = FALSE ; __try
    {
    JPEG_CORE_PROPERTIES image ;
    ::ZeroMemory (&image, sizeof(image)) ; // Init the IJL
    if (ijlInit (&image) != IJL_OK)
    return FALSE; // 读图象信息
    image.JPGBytes = pStart ;
    image.JPGSizeBytes = iFileSize ;
    if (ijlRead (&image, IJL_JBUFF_READPARAMS) != IJL_OK)
    return FALSE; // 设置目标DIB
    image.DIBChannels = 3 ;
    image.DIBColor = IJL_BGR ;
    switch (image.JPGChannels)
    {
    case 1 : image.JPGColor = IJL_G ; break ;
    case 3 : image.JPGColor = IJL_YCBCR ; break ;
    case 4 : image.JPGColor = IJL_YCBCRA_FPX ;
    image.DIBChannels = 4 ;
    image.DIBColor = IJL_RGBA_FPX ;
    break ;
    default : image.JPGColor = image.DIBColor = (IJL_COLOR)IJL_YCBCR ;
    } m_nWidth = image.JPGWidth ;
    m_nHeight = image.JPGHeight ; m_pBMI = (LPBITMAPINFO)GlobalAllocPtr(GHND, 40);
    if (m_pBMI == 0)
    return FALSE;
    // set up a DIB 
    m_pBitmapInfoHeader = (BITMAPINFOHEADER*) m_pBMI; m_pBitmapInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
    m_pBitmapInfoHeader->biWidth = m_nWidth;
    m_pBitmapInfoHeader->biHeight = m_nHeight;
    m_pBitmapInfoHeader->biPlanes = 1;
    m_pBitmapInfoHeader->biBitCount = 24;
    m_pBitmapInfoHeader->biCompression = BI_RGB;
    m_pBitmapInfoHeader->biSizeImage = 0;
    m_pBitmapInfoHeader->biXPelsPerMeter = 0;
    m_pBitmapInfoHeader->biYPelsPerMeter = 0;
    m_pBitmapInfoHeader->biClrUsed = 0;
    m_pBitmapInfoHeader->biClrImportant = 0; //设置颜色数
    m_nBitCount = (BYTE)m_pBitmapInfoHeader->biBitCount; image.DIBWidth    = m_nWidth ;
    image.DIBHeight   = -m_nHeight ; // DIB Format
    image.DIBPadBytes = IJL_DIB_PAD_BYTES(image.DIBWidth,image.DIBChannels);//this->GetPitch() - m_nWidth * image.DIBChannels ; //数据长度
    DWORD dwLength = (m_nWidth * 3 + image.DIBPadBytes) * m_nHeight;
    m_pDibData = (LPBYTE)GlobalAllocPtr(GHND, dwLength );
    if (m_pDibData == 0)
    {
    GlobalFreePtr(m_pBMI);
    m_pBMI = NULL;
    return FALSE;
    } m_pBitmapInfoHeader->biWidth = m_nWidth;
    m_pBitmapInfoHeader->biHeight = m_nHeight;

    image.DIBBytes    = m_pDibData ;

    if (ijlRead (&image, IJL_JBUFF_READWHOLEIMAGE) != IJL_OK)
    return FALSE; //指向位图数据
    m_pBits = m_pDibData;
    // 32位色图象交换R B
    if (image.DIBChannels == 4)
    {
    BYTE tmp;
    for(int i=0;i<m_nHeight;i++)//b<->r
    for(int j=0;j<m_nWidth;j++)
    {
    tmp=*(m_pBits+(long)i*m_nWidth*3+j*3);
    *(m_pBits+(long)i*m_nWidth*3+j*3)=*(m_pBits+(long)i*m_nWidth*3+j*3+2);
    *(m_pBits+(long)i*m_nWidth*3+j*3+2)=tmp;
    }
    }

    ijlFree (&image) ;
    bRet = TRUE ;
    m_bValid=TRUE; //设置有效标志
    }
    __finally
    {
    return FALSE;
    }
    return bRet ;
    }