GTK+ 3.6 を使用して、ディスク上のファイルではなく、メモリ内のバッファから画像を表示したいと考えています。画像データがconst char *data
あり、そこから GTK 画像を作成しようとしています。これまでのところ、うまくいくと思われる2つのアプローチを試しました。どちらも GdkPixbuf を使用するため、画像データをguchar* (unsigned char*)
.
その要件により、データをキャストする必要があります。
guchar *gudata = reinterpret_cast<guchar*>(const_cast<char*>(data));
次に、次のことを試しました。
でデータを GdkPixbufLoader に書き込みます
gdk_pixbuf_loader_write
。ここでエラーが発生"Unrecognized image file format"
するか、特定のタイプ (jpg) でローダーを作成すると、JPG ファイル形式ではないというエラーが発生します (以下で説明します)。編集: コードのビット:
guchar *gudata = reinterpret_cast<guchar*>(const_cast<char*>(data)); int stride = ((1056 * 32 + 31) & ~31)/8; GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); GError *error = NULL; if(!gdk_pixbuf_loader_write(loader, gudata, data_size, &error) { printf("Error:\n%s\n", error->message); }
EDIT 03/01/2013: 書き込み関数からストライド パラメータを削除 - ミスプリント。
カイロ表面も同様に機能しません。黒い画面とノイズが表示されます。
でpixbufを初期化する
gdk_pixbuf_new_from_data
と、画像はテレビのノイズのように見えます。これは、データが間違っている(そしてキャストされている)か、他のパラメーターが間違っていることを示します(画像の行ストライドですが、そうではありません:))。
エラーの後、データをファイルに書き込もうとしましたがfoo.jpg
、ofstream
はい、適切に機能する画像ファイルを取得しました。ターミナルのfile
コマンドは、それが JPEG 画像であることを確認し、単純なコード ブロックを使用して、その foo.jpg から GdkPixbuf を作成し、その行ストライド値をチェックして、前述の関数に渡す値と一致させます。
画像データはキャストで破損しますか?もしそうなら、どうすればそれに対処できますか? で画像データを取得しconst char*
ます。私は QtPixmap を見てきましたが、それもロードされますunsigned char*
。
別のライブラリを使用する必要がありますか? (libjpeg?) libgtk3-dev をインストールしました。
ありがとうございました!