我是大四的学生,现在正在做关于图象格式转换的毕业设计。老师要求写几种格式(如jpg,gif等)向bmp格式的转换,现在急需这个转换源代码或者相关的资料。希望能得到大家的帮助,.cn  本人感激万分,谢谢!!!!!!!!

解决方案 »

  1.   

    1.使用lib库解码:jpglib,giflib
    2.显示(如用OleLoadPicture)后提取dib
      

  2.   

    这样的程序太多了,下面是比较好用的一个。CxImage
    http://www.codeproject.com/bitmap/cximage.asp
      

  3.   

    http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=15124 看看
      

  4.   

    ChangeJpgToBmp(CString filename)
    {
    if(filename == "")
    {
    AfxMessageBox("请先输入文件路径");
    return false;
    }
    HANDLE hFile = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    _ASSERTE(INVALID_HANDLE_VALUE != hFile); // 取得文件大小
    DWORD dwFileSize = GetFileSize(hFile, NULL);
    _ASSERTE(-1 != dwFileSize);
    LPVOID pvData = NULL;
    //根据文件大小分配内存
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
    _ASSERTE(NULL != hGlobal);
    pvData = GlobalLock(hGlobal);
    _ASSERTE(NULL != pvData);
    DWORD dwBytesRead = 0;
    //读取文件并存入全局内存
    BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
    _ASSERTE(FALSE != bRead);
    GlobalUnlock(hGlobal);
    CloseHandle(hFile);
    LPSTREAM pstm = NULL;
    // 通过全局内存创建 IStream* 的指针
    HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
    _ASSERTE(SUCCEEDED(hr) && pstm);
    //通过图形文件创建IPicture 对象 IPicture* gpPicture = NULL;  if (gpPicture)
    gpPicture->Release();
    hr = OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
    _ASSERTE(SUCCEEDED(hr) && gpPicture);
    pstm->Release();
    if (gpPicture == NULL)
    return false; BOOL bResult = FALSE;
    ILockBytes *Buffer = 0;
    IStorage   *pStorage = 0;
    IStream    *FileStream = 0;
    BYTE    *BufferBytes;
    STATSTG BytesStatistics;
    DWORD OutData;
    long OutStream;
    CFile BitmapFile; CFileException e;
    double SkipFloat = 0;
    DWORD ByteSkip = 0;
    _ULARGE_INTEGER RealData; CreateILockBytesOnHGlobal(NULL, TRUE, &Buffer); // Create ILockBytes Buffer hr = ::StgCreateDocfileOnILockBytes(Buffer,
     STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, &pStorage); hr = pStorage->CreateStream(L"PICTURE",
     STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, 0, &FileStream); gpPicture->SaveAsFile(FileStream, TRUE, &OutStream); // Copy Data Stream
    FileStream->Release();
    pStorage->Release();
    Buffer->Flush();  // Get Statistics For Final Size Of Byte Array
    Buffer->Stat(&BytesStatistics, STATFLAG_NONAME); // Cut UnNeeded Data Coming From SaveAsFile() (Leave Only "Pure" Picture Data)
    SkipFloat = (double(OutStream) / 512); // Must Be In a 512 Blocks...
    if(SkipFloat > DWORD(SkipFloat)) ByteSkip = (DWORD)SkipFloat + 1;
    else ByteSkip = (DWORD)SkipFloat;
    ByteSkip = ByteSkip * 512; // Must Be In a 512 Blocks...

    // Find Difference Between The Two Values
    ByteSkip = (DWORD)(BytesStatistics.cbSize.QuadPart - ByteSkip); // Allocate Only The "Pure" Picture Data
    RealData.LowPart = 0;
    RealData.HighPart = 0;
    RealData.QuadPart = ByteSkip;
    BufferBytes = (BYTE*)malloc(OutStream);
    if(BufferBytes == NULL)
    {
    Buffer->Release();
    HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
    MessageBoxEx(hWnd, "Can not allocate enough memory\t", ERROR_TITLE, MB_OK | MB_ICONSTOP, LANG_ENGLISH);
    } Buffer->ReadAt(RealData, BufferBytes, OutStream, &OutData); char file[100];
    GetTempPath(MAX_PATH,file); //取得临时文件目录
    strcat(file,"temp.bmp"); if(BitmapFile.Open(file, CFile::typeBinary | CFile::modeCreate | CFile::modeWrite, &e))
    {
    BitmapFile.Write(BufferBytes, OutData);
    BitmapFile.Close();
    bResult = TRUE;
    }
    else // Write File Failed...
    {
    TCHAR szCause[255];
    e.GetErrorMessage(szCause, 255, NULL);
    HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
    MessageBoxEx(hWnd, szCause, ERROR_TITLE, MB_OK | MB_ICONSTOP, LANG_ENGLISH);
    bResult = FALSE;
    }

    Buffer->Release();
    free(BufferBytes);
    gpPicture->Release();
    GlobalFree(hGlobal);
      

  5.   

    我也是做图像转换的毕业设计,以前没弄过VC编程,现在弄得焦头烂额.我的要能显示TIFF图像,随便一种压缩方法都行,另外能实现TIFF和BMP图像间的格式转换.谁能够帮帮忙??
      

  6.   

    我使用的是CxImage
    http://www.codeproject.com/bitmap/cximage.asp
    非常方便的举例:
    ... convert from a format to another
    CxImage  image;
    // bmp -> jpg
    image.Load("image.bmp", CXIMAGE_FORMAT_BMP);
    if (image.IsValid()){
        if(!image.IsGrayScale()) image.IncreaseBpp(24);
        image.SetJpegQuality(99);
        image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
    }
    // png -> tif
    image.Load("image.png", CXIMAGE_FORMAT_PNG);
    if (image.IsValid()){
        image.Save("image.tif",CXIMAGE_FORMAT_TIF);
    }
      

  7.   

    ... convert from a format to another
    CxImage  image;
    // bmp -> jpg
    image.Load("image.bmp", CXIMAGE_FORMAT_BMP);
    if (image.IsValid()){
        if(!image.IsGrayScale()) image.IncreaseBpp(24);
        image.SetJpegQuality(99);
        image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
    }
    // png -> tif
    image.Load("image.png", CXIMAGE_FORMAT_PNG);
    if (image.IsValid()){
        image.Save("image.tif",CXIMAGE_FORMAT_TIF);
    }
      

  8.   

    是不是打开你们给的那个网站后下载那三个download啊???不过我还不知道应该怎么使用这三个文件哦?它们分别都有什么用?请你们指点我一下  谢谢!!!