如何使用Dart lang中的图像

时间:2012-07-23 18:01:09

标签: dart

我在此之前发布了一个问题(How to load an image in Dart)并得到了答案,但同时又有了更多问题。 为什么我只能这样绘制图像:

image.on.load.add((e) {
    context.drawImage(image, 0, 0);
});

但如果我写的是:

ImageElement image = new ImageElement();
image.src = 'myImage.png';
context.drawImage(image, 0, 0);

^^^这不起作用,不画图像。为什么呢?

bool loaded = false;
ImageElement image = new ImageElement();
image.src = 'myImage.png';
image.on.load.add((e) {
    loaded = true;
});
print(loaded); // on console get - false

^^^为什么我会弄错?如果加载的图像加载变量变为真,我就会创建,但加载不会变为真。

抱歉我的英语不好。谢谢!

2 个答案:

答案 0 :(得分:6)

至于你的第一个问题,如果你遗漏了

image.onLoad.listen((e) {
    context.drawImage(image, 0, 0);
});

然后加载图像时不会执行任何代码。

on.load.add(...)构造基本上分配了一个在浏览器加载图像时执行的函数(通常称为处理程序)。如果没有分配这样的功能,那么在加载图像时没有任何反应,因此 context.drawImage(image,0,0)将不起作用。

您的第二个问题与此功能有关。加载图像是一个异步过程,这意味着当客户端成功加载图像时,首先会触发加载处理程序( on.load.add(...))。这意味着在协助您的加载处理程序后,继续执行下一次调用:打印(加载),由于图像尚未加载,因此将为false。

答案 1 :(得分:5)

较新的图像onload语法:

readFile() {
  ImageElement image = new ImageElement(src: "plant.png");
  document.body.nodes.add(image);
  image.onLoad.listen(
      onData, 
      onError: onError, 
      onDone: onDone, 
      cancelOnError: true
   );
}

onData(Event e) {
  print("success");
}

onError(Event e) {
  print("error: $e");
}

onDone() {
  print("done");
}