首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++新人

2012-09-25 
C++新人求助求助把PNG图片读入到BYTE*然后根据BYTE* 利用GDIPlus把图片画出来最好有例子..谢谢[解决办法]C

C++新人求助
求助
把PNG图片读入到BYTE*
然后根据BYTE* 利用GDIPlus把图片画出来

最好有例子..
谢谢

[解决办法]

C/C++ code
BOOL CGDIPClockDlg::ImageFromIDResource(UINT nID, LPCTSTR sTR,Image * &pImg){    HINSTANCE hInst = AfxGetResourceHandle();    HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type    if (!hRsrc)        return FALSE;    // load resource into memory    DWORD len = SizeofResource(hInst, hRsrc);    BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);    if (!lpRsrc)        return FALSE;    // Allocate global memory on which to create     HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);    BYTE* pmem = (BYTE*)GlobalLock(m_hMem);    memcpy(pmem,lpRsrc,len);    IStream* pstm;    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);        // load from stream    pImg=Gdiplus::Image::FromStream(pstm);    // free/release stuff    GlobalUnlock(m_hMem);    pstm->Release();    FreeResource(lpRsrc);}
[解决办法]
C/C++ code
BOOL CGDIPClockDlg::UpdateClockDisplay(int Transparent){    HDC hdcTemp=GetDC()->m_hDC;    m_hdcMemory=CreateCompatibleDC(hdcTemp);    HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,m_BakWidth,m_BakHeight);    SelectObject(m_hdcMemory,hBitMap);    if(Transparent<0||Transparent>100)    Transparent=100;    m_Blend.SourceConstantAlpha=int(Transparent*2.55);//1~255    HDC hdcScreen=::GetDC (m_hWnd);    RECT rct;    GetWindowRect(&rct);    POINT ptWinPos={rct.left,rct.top};    Graphics graph(m_hdcMemory);    Point points[] = { Point(0, 0),                        Point(m_BakWidth, 0),                        Point(0, m_BakHeight)                    };    static bool bFly=false;    bFly?graph.DrawImage(m_pImageClock, points, 3): graph.DrawImage(m_pImageClock1, points, 3);     bFly=!bFly;        int OxyX=140;//m_BakWidth/2+8;    int OxyY=90;//m_BakHeight/2+10;    SYSTEMTIME SystemTime;   // address of system time structure    GetLocalTime(&SystemTime);    Matrix matrixH(1,0,0,1,OxyX,OxyY); // 定义一个单位矩阵,坐标原点在表盘中央    matrixH.Rotate(SystemTime.wHour*30+SystemTime.wMinute/2.0-180); // 时针旋转的角度度    Point pointsH[] = { Point(0, 0),Point(m_HourWidth, 0),Point(0, m_HourHeight)};    matrixH.Translate(-m_HourWidth/2,-m_HourHeight/6);    matrixH.TransformPoints( pointsH, 3); // 用该矩阵转换points    graph.DrawImage (m_pImageHHour,pointsH, 3);    Matrix matrixM(1,0,0,1,OxyX,OxyY); // 定义一个单位矩阵,坐标原点在表盘中央    matrixM.Rotate(SystemTime.wMinute*6-180); // 分针旋转的角度度    Point pointsM[] = { Point(0, 0),Point(m_MinuWidth, 0),Point(0, m_MinuHeight)};    matrixM.Translate(-m_MinuWidth/2,-m_MinuHeight/6);    matrixM.TransformPoints( pointsM, 3); // 用该矩阵转换pointsM    graph.DrawImage (m_pImageHMinu,pointsM, 3);        Matrix matrix(1,0,0,1,OxyX,OxyY); // 定义一个单位矩阵,坐标原点在表盘中央    matrix.Rotate(SystemTime.wSecond*6-180); // 秒针旋转的角度度    Point pointsS[] = { Point(0, 0),Point( m_SecWidth,0),Point(0,m_SecHeight )};    matrix.Translate(-m_SecWidth/2,-m_SecHeight/7);    matrix.TransformPoints( pointsS, 3); // 用该矩阵转换pointsS    graph.DrawImage (m_pImageHSec,pointsS, 3);//H    graph.DrawImage(m_pImageNum,0, 0, 14*(SystemTime.wHour/10), 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置    graph.DrawImage(m_pImageNum,20,0, 14*(SystemTime.wHour%10), 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置//:    graph.DrawImage(m_pImageNum,20*2,0, 140, 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置//M    graph.DrawImage(m_pImageNum,20*3, 0, 14*(SystemTime.wMinute/10), 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置    graph.DrawImage(m_pImageNum,20*4,0, 14*(SystemTime.wMinute%10), 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置//:    graph.DrawImage(m_pImageNum,20*5,0, 140, 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置//S    graph.DrawImage(m_pImageNum,20*6, 0, 14*(SystemTime.wSecond/10), 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置    graph.DrawImage(m_pImageNum,20*7,0, 14*(SystemTime.wSecond%10), 0,14,23,UnitPixel); //该函数从m_pImageClock中剪切指定rect中的像素draw到指定位置    SIZE sizeWindow={m_BakWidth,m_BakHeight};    POINT ptSrc={0,0};    DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);    if((dwExStyle&0x80000)!=0x80000)        SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);    BOOL bRet=FALSE;    bRet= UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,                &sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);    graph.ReleaseHDC(m_hdcMemory);    ::ReleaseDC(m_hWnd,hdcScreen);    hdcScreen=NULL;    ::ReleaseDC(m_hWnd,hdcTemp);    hdcTemp=NULL;    DeleteObject(hBitMap);    DeleteDC(m_hdcMemory);    m_hdcMemory=NULL;    return bRet;} 


[解决办法]
要整个项目的文件,发邮件到winshing@qq.com
[解决办法]

探讨

C/C++ code

BOOL CGDIPClockDlg::UpdateClockDisplay(int Transparent)
{
HDC hdcTemp=GetDC()->m_hDC;
m_hdcMemory=CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,……

[解决办法]
探讨

引用:

C/C++ code

BOOL CGDIPClockDlg::UpdateClockDisplay(int Transparent)
{
HDC hdcTemp=GetDC()->m_hDC;
m_hdcMemory=CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap=CreateCompatibleBitmap……

热点排行