细品仁生 2017-07-18 05:43 采纳率: 0%
浏览 4929
已结题

将png图像数据格式转换成jpg数据格式,如何转换?

将png图像数据格式转换成jpg数据格式,如何转换? 希望能有注释的源代码,还希望解释一下原理,并有个demo。 使用linpng库和zlib库以及libjpeg库。用C++/C写,平台是VS2010

  • 写回答

2条回答 默认 最新

  • yanhui8610 2017-07-18 07:49
    关注
     #pragma comment(lib,"user32")
    #pragma comment(lib,"gdi32")
    #include <stdlib.h>
    #include <stdio.h>
    #include <io.h>
    #include <conio.h>
    #include <windows.h>
    #include <atlimage.h>
    #include <objidl.h>
    void DrawPic(HDC hdc,char *buf,int len) {
        HGLOBAL hMem=GlobalAlloc(GMEM_FIXED,len);
        BYTE* pMem=(BYTE*)GlobalLock(hMem);
        memcpy(pMem,buf,len);
        IStream* pStream;
        HRESULT hr=CreateStreamOnHGlobal(pMem,FALSE,&pStream);
    
        CImage img;
        img.Load(pStream);
        img.Draw(hdc,CPoint(0,0));
    
        img.Destroy();
        pStream->Release();
        GlobalUnlock(hMem);
        GlobalFree(hMem);
    }
    //HWND WINAPI GetConsoleWindow();
    void HideTheCursor() {
        CONSOLE_CURSOR_INFO cciCursor;
        HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
        if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
            cciCursor.bVisible = FALSE;
            SetConsoleCursorInfo(hStdOut, &cciCursor);
        }
    }
    void ShowTheCursor() {
        CONSOLE_CURSOR_INFO cciCursor;
        HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
        if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
            cciCursor.bVisible = TRUE;
            SetConsoleCursorInfo(hStdOut, &cciCursor);
        }
    }
    int main() {
        HWND  hwnd;
        HDC   hdc;
        HFONT hfont;
        HBITMAP hbm;
        HDC hdcBits;
        BITMAP bm;
    
        system("color F0");
        system("cls");
        HideTheCursor();
        hwnd  = GetConsoleWindow();
        hdc   = GetDC(hwnd);
        hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
        SelectObject(hdc,hfont);
        TextOut(hdc,10,10,"这是泡泡",8);
        DeleteObject(hfont);
        hbm=(HBITMAP)LoadImage(0,"C:\\Windows\\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
        if (hbm) {
            hdcBits = CreateCompatibleDC(hdc);
            GetObject (hbm, sizeof(BITMAP), &bm);
            SelectObject(hdcBits,hbm);
            BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);
            DeleteDC(hdcBits);
            DeleteObject(hbm);
        }
        getch();
        FILE *f;
        f=fopen("c:\\new\\tmp.jpg","rb");
        if (f) {
            int fl=filelength(fileno(f));
            char *buf=(char *)malloc(fl);
            if (buf) {
                fread(buf,fl,1,f);
            }
            fclose(f);
            if (buf) {
                DrawPic(hdc,buf,fl);
                free(buf);
            }
        }
        ReleaseDC(hwnd,hdc);
        getch();
        system("color 07");
        system("cls");
        ShowTheCursor();
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包