2015-09-08 7 views
0

Я используюКак угасить битмап с gtkmm?

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

для загрузки и отображения растрового изображения в контексте каира.

Можно ли манипулировать пикселями в pixbuf после его загрузки? Я хотел бы ослабить это изображение, уменьшив значение альфа каждого пикселя.

Или есть еще одна возможность исчезнуть с помощью pixmap?

ответ

0

Вот решение я нашел:

с 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; 
     } 
    } 
} 

Этот фрагмент умножает альфа-значение каждого пикселя, таким образом, реальное число изменения прозрачности. Повторное применение этого приводит к эффекту затухания