【问题标题】:How to fade out a Bitmap with gtkmm?如何使用 gtkmm 淡出位图?
【发布时间】:2015-09-08 15:31:42
【问题描述】:

我用

Glib::RefPtr<Gdk::Pixbuf> image = Gdk::Pixbuf::create_from_file(sBitmapName);
Gdk::Cairo::set_source_pixbuf(cr, image, x, y);

在 cairo 上下文中加载和显示位图。

pixbuf 加载后是否可以操作像素? 我想通过降低每个像素的 alpha 值来淡出这张图片。

或者是否有另一种可能淡出像素图?

【问题讨论】:

    标签: cairo gtkmm


    【解决方案1】:

    这是我找到的解决方案:

    使用guchar *Gdk::Pixbuf::get_pixels(),您可以访问图像的像素。下次绘制图像时,您在此数组中所做的任何更改都是可见的:

    int iW = m_image->get_width();
    int iH = m_image->get_height();
    guchar * pPixels = m_image->get_pixels();
    int iNChannels = m_image->get_n_channels();
    if (iNChannels == 4) {
        for (int iY = 0; iY < iH; iY++) {
            for (int iX = 0; iX < iW; iX++) {
                int iOffset = iY*m_image->get_rowstride() + iX*iNChannels;
                pPixels[iOffset+3] *= dRatio;
            }
        }
    }
    

    此片段将每个像素的 alpha 值乘以实数,从而改变透明度。重复应用会导致淡出效果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多