Clutter.Image 属性——从磁盘加载图像

Posted

技术标签:

【中文标题】Clutter.Image 属性——从磁盘加载图像【英文标题】:Clutter.Image Properties -- Loading an image from disk 【发布时间】:2013-06-05 17:49:29 【问题描述】:

使用 javascript,因此非常糟糕的内省文档,我正在尝试创建一个 ClutterImage,它应该替换已弃用的 ClutterTexture。我无法确定用于指定要为此类图像加载的文件名/uri 的属性名称:

const Clutter = imports.gi.Clutter;

Clutter.init(null);

let stage = new Clutter.Stage();

stage.connect("destroy", Clutter.main_quit);
stage.title = "Test";

stage.set_background_color(new Clutter.Color(
    red  : 0,
    blue : 128,
    green : 64,
    alpha : 255
));

let img = new Clutter.Image(
    uri : 'some-image.jpg'
);

stage.add_actor(img);
Clutter.main();

我当前的错误是:Error: No property uri on this GObject ClutterImage,这当然意味着我尝试用于 uri 的属性的名称无效。有谁知道我在哪里可以查到这个,或者知道ClutterImages 中的文件名/uri 属性是什么?

【问题讨论】:

【参考方案1】:

没有用于将纹理数据从文件加载到Clutter.Image 实例的属性或函数。

您应该使用GdkPixbuf 从文件、缓冲区或流中加载图像数据,然后将其放入Clutter.Image 中,例如:

const Clutter = imports.gi.Clutter;     
const Cogl = imports.gi.Cogl;           
const GdkPixbuf = imports.gi.GdkPixbuf; 

const pixbuf = GdkPixbuf.Pixbuf.new_from_file('...');
const image = new Clutter.Image();

image.set_data(pixbuf.get_pixels(),
               pixbuf.get_has_alpha() ? Cogl.PixelFormat.RGBA_8888
                                      : Cogl.PixelFormat.RGB_888,
               pixbuf.get_width(),
               pixbuf.get_height(),
               pixbuf.get_rowstride());

这应该有效;如果不是,那么这是一个自省问题,可能需要在GdkPixbuf 中进行一些调整。

【讨论】:

我收到imports.gi.Gdk.Pixbuf is undefined。我错过了什么吗? (Ubuntu 20.04) GdkPixbuf 是一个单独的模块;你想要:imports.gi.GdkPixbuf.

以上是关于Clutter.Image 属性——从磁盘加载图像的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 应用程序中从磁盘加载图像很慢

asp.net core 2 从本地磁盘驱动器加载和显示图像

将图像视图加载到 UIScrollView 和性能

在 ios 应用程序中从磁盘加载大图像

无法将图像从 PARSE 加载到 PFTableViewCell 的 imageView 属性中

有没有办法将图像从本地存储加载到 Flutter 中 CircleAvatar 小部件的 backgroundImage 属性?