2017-06-07 9 views
0

私は些細なことをやろうとしていますが、ClutterImageで何を試しても、Unable to load image dataというエラーメッセージが表示されます。私が使用している言語はValaなので、Clutter用のVapiファイルが間違っている可能性があります。 GdkPixbuf私にはうまく見えますが、GtkImageと設定できます。エラーなしでディスクに保存できますが、画像ファイルをGdkPixbuf - >ClutterImageに戻すと、クラッターと同じエラーが表示されます。私もCOGL_PIXEL_FORMAT_*のすべての値を試してみましたが、それは常に同じです、イメージデータはRGB24形式ですが、私は肯定的です。GdkPixbufを使ってClutterImageを設定する

私のコードは次のとおりです。私はhttps://valadoc.org/clutter-1.0/Clutter.Image.set_data.htmlで見ることができますマニュアルのCの例では何から採用しました

private Clutter.Content image; 

construct { 
    ... 
    image = new Clutter.Image(); 
    ... 
} 

public void set_image (Gdk.Pixbuf pixbuf) { 
    lock (image) { 
     unowned uint8[] pixels = pixbuf.get_pixels_with_length(); 
     assert (pixels.length == pixbuf.width * pixbuf.height * 3); 
     try { 
      image.set_data (pixels, 
          Cogl.PixelFormat.RGB_888; 
          pixbuf.width, 
          pixbuf.height, 
          pixbuf.rowstride); 
     } catch (Error e) { 
      critical (e.message); 
     } 
    } 
} 

私はValaが吐き出すCコードを含めることができますが、それは私には正しいと思われます。

私はClutterImageが機能しないと思っていたので、pixbuf.save (...)を使って保存したイメージファイルでhttps://github.com/GNOME/clutter/blob/master/examples/image-content.cの例を試してみました。だから私はGtkClutterEmbedウィジェットで画像オブジェクトをClutterActorとして使用しようとしている可能性があると考えています。そこに見ることが本当に多くありませんがあります、コードは私にステージがClutterActorで、ClutterImageは俳優の内容として設定されていることで、作品の例では何と同じように見える

var embed = new GtkClutter.Embed(); 
viewport.add (embed); 
var stage = embed.get_stage(); 
image = new Clutter.Image(); 
stage.content = image; 

です。だから私は今や少し損失があります。

valac --pkg cogl-1.0 --pkg clutter-gtk-1.0 --pkg gtk+-3.0 clutter-image-content.vala 
+1

画像にアルファチャンネルがありますか?その場合、RGBA8888でなくRGBA8888である必要があります。そうでない場合は、短い自己完結型の正しい例()を投稿してください。 – nemequ

+0

いいえ、アルファチャンネルはありません。画像データは、RGB24画像に変換されたBayer RG8ピクセル情報を与えるカメラからのものであった。私があなたの提案に従って掲示した例は、Pixbufに変換されてファイルに保存された画像を正しくロードします。 FWIWレポはgithub.com/geoffjay/sentech-viewerです。 – geoffjay

答えて

0

を使用してコンパイル

簡単な例

public static int main (string[] args) { 
    GtkClutter.init (ref args); 

    var window = new Gtk.Window(); 
    var scrolled = new Gtk.ScrolledWindow (null, null); 
    var embed = new GtkClutter.Embed(); 

    window.add (scrolled); 
    scrolled.add_with_viewport (embed); 

    var pixbuf = new Gdk.Pixbuf.from_file ("image.png"); 
    var image = new Clutter.Image(); 
    image.set_data (pixbuf.get_pixels(), 
        Cogl.PixelFormat.RGB_888, 
        pixbuf.width, 
        pixbuf.height, 
        pixbuf.rowstride); 
    var stage = embed.get_stage(); 
    stage.content = image; 

    window.destroy.connect (Gtk.main_quit); 
    window.show_all(); 
    Gtk.main(); 

    return 0; 
} 

私は、これは、それ以上を乱雑に関連しているとは思わない、私は正常にロードされていない問題は、私のビデオドライバに関連していたと思いますグラフィックアクセラレーションを持たない。私は最終的に再起動するために持って来て、Nvidiaモジュールを再構築しなければならなかった、今私はUnable to load dataエラーを得ていない。私はAravisライブラリから新しいものを手に入れていますが、これはこれとは全く関係ありません。私はこの質問を削除するべきかどうか分からない。

関連する問題