我用GDI+实现这样一个功能 我有个矩形Rect 我要在这个矩形里面实现一副位图的左移或者右移功能。这个是通过改变DrawImage的第二个参数的X坐标来实现的  但是问题是X坐标变化时图片是动了 但是图片显示区域已经超过这个矩形了 我想让超过矩形的图片部分隐藏着不显示 这样看上去就感觉是一副图片从矩形外面慢慢移动进来的效果 请问这个怎么实现呢? 我调用了g.setclip(rect) 没作用

解决方案 »

  1.   

    Status DrawImage(          Image *image,
        const RectF &destRect,
        REAL srcx,
        REAL srcy,
        REAL srcwidth,
        REAL srcheight,

        Unit srcUnit,
        ImageAttributes *imageAttributes,
        DrawImageAbort callback,
        VOID *callbackData
    );
    修改这两个值
      

  2.   

    兄弟 没效果呀  下面是我的代码 
    graphics.DrawImage(bmp,testRect,0,0,bmp->GetWidth(),bmp->GetHeight(),UnitPixel);
      

  3.   

    graphics.DrawImage(bmp,test,0,0,test.Width,test.Height,UnitPixel);  这样调用也不行。。
      

  4.   

    有一块矩形区域rect,有个图片img
    要求是实现图片从左边进来右边出去的效果?
    DrawImage的y,width好说。
    你可以先定义一个rcImg,初始化为(rect.X - img.Width - 1,Y,img.Wdith,HEIGTH);
    OnTimer里
    rcImg.X = min(rect.left,rcImg.X);
    rcImg.Width = rcImg.GetRight() >= rect.right ? rect.right - rcImg.X : rcImg.Widht
      

  5.   

    有点问题。//显示区域
    m_rcDest = RectF(320,300,50,50);
    //计算Image的辅助rect
    m_rcImg = RectF(m_rcDest.X - 1 - m_pImg->GetWidth(),m_rcDest.Y,m_pImg->GetWidth(),m_pImg->GetHeight());
    //DrawImage的目的地X
    REAL xDest = max(m_rcImg.X,m_rcDest.X);
    //DrawImage的源图X
    REAL xSrc = xDest > m_rcImg.X ? (m_rcDest.X - m_rcImg.X) : 0;
    //最终显示宽度
    REAL width = min(m_rcImg.GetRight(),m_rcDest.GetRight()) - xDest;
    g.DrawImage(m_pImg, xDest,m_rcImg.Y, (REAL)xSrc,(REAL)0, width,m_rcImg.Height,Gdiplus::Unit::UnitPixel);
      

  6.   

    最后就是刷新以及计时器里的m_rcImg的偏移了
      

  7.   

    哥们 谢了  DrawImage函数的参数我理解错了  太感谢你了 握爪