Как конвертировать изображение PDL в GdkPixbuf

Я пытаюсь отобразить график, сгенерированный PDL (используя PLplot) внутри приложения Gtk3. Когда я пробую следующий код, я вижу две проблемы:

  1. $ pdlImg не является GdkPixbuf, поэтому new_from_pixbuf() не работает.
  2. $ pdlImg кажется пустым, потому что сообщение об ошибке выводит массив 10x10x3 в виде строки, и все они равны нулю.

Код:

#!/usr/bin/perl -w

use strict;
use PDL;
use PDL::Graphics::PLplot;
use Gtk3 -init;

my $pdlImg = zeroes(byte, 10, 10, 3);
my $pl = PDL::Graphics::PLplot->new(DEV => 'mem', MEM => $pdlImg);
my $x = sequence(10);
my $y = $x**2;
$pl->xyplot($x, $y);
$pl->close;

my $win = Gtk3::Window->new;
my $img = Gtk3::Image->new_from_pixbuf($pdlImg);
$win->add($img);
$win->show_all;
Gtk3::main();

1 ответ

Чтобы ответить на ваш первый вопрос, вам нужно, чтобы PLplot поместил график в пиддл шириной 10 пикселей и высотой 10 пикселей. Я не уверен, получите ли вы только один угол нормального графика в этом случае, или если вы получите весь график, сэмплированный в эти 10x10 пикселей. Но в любом случае неудивительно, что $pdlImg полностью нули. Попробуйте передать в пиддле с большим размером (возможно, 1000, 1000, 3) или, возможно, даже используя MEM => $pdlImg=null когда вы создаете объект графика PLplot.

Я не могу помочь с вашим вторым вопросом, у меня нет опыта работы с Gtk3, извините.

Другие вопросы по тегам