2

既存のプロジェクトの 1 つを GTK3+ (C# プロジェクトであるため、GTK-Sharp3 など) に移植しています。その大部分は、あまり変更する必要のない単純なトランジションでしたが、「リージョン スクリーンショット」タイプのシステム (ユーザーが保存したいフルスクリーン イメージの領域を決定する方法) を行っていた方法です。トリミングされたバージョン) は、新しいライブラリで非推奨になったようです (または、少なくとも私は十分に調べていませんでした)。

問題のコードは '[Pixmap].DrawPixBuf' メソッドで、取得元の 'rectangle' と配置する 'destination' の長方形を記述する多数のパラメーターを使用して、pixbuf を Pixmap に描画できます。内部のソース四角形の内容。

私が最初に使用していたコードは次のとおりです。

pmBackBuffer.DrawPixbuf(drawingAreaRegion.Style.BaseGC(StateType.Normal),
pbHazy, 0, 0, 0, 0, platformSpecific.getScreenWidth(), platformSpecific.getScreenHeight(), RgbDither.Normal, 0, 0);

ピックスマップ 'pmBackBuffer' を取り、BaseGC (現在は廃止されているように見える概念) を使用して描画し、ソースの座標 0, 0 から開始し、宛先の現在の画面のサイズに配置します。

カイロがこのタイプのシステムの代替品である可能性があり、オンラインの一部のドキュメントでは、Pixmap オブジェクトが Cairo サーフェスに置き換えられたことが示唆されていますが、それらを使用して Pixbuf を描画できる同様の動作を取得する方法がわかりません。パラメータをサーフェスに追加します。

また、Pixmap を Surface に変換する方法を尋ねる人も見つかりませんでした。逆の方法を見つけましたが、探していた方法ではありませんでした。

そこで質問なのですが、上記の新しいカイロ サーフェスと同様の方法で機能する方法はありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

これを行う方法は、最初にコンテキストを作成してから、

Gdk.CairoHelper

方法

Gdk.CairoHelper.SetSourcePixbuf(Context, Pixbuf, 0, 0)

Pixbuf を既存の ImageSurface に転送します。より詳細な例は次のとおりです。

private void Example(Pixbuf pb)
{
    ImageSurface imgSurface = new ImageSurface(Format.RGB24, pb.Width, pb.Height);

    using (Cairo.Context cr = new Cairo.Context(imgSurface)) {
        Gdk.CairoHelper.SetSourcePixbuf (cr, pb, 0, 0);
        cr.Paint ();
        cr.Dispose ();
    }
}
于 2014-08-10T13:37:36.290 に答える