首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在颤振中确定图像的宽度和高度?

如何在颤振中确定图像的宽度和高度?
EN

Stack Overflow用户
提问于 2017-06-21 02:36:13
回答 11查看 80.9K关注 0票数 54

假设我在pubspec.yaml中声明了自己的图像,如下所示:

代码语言:javascript
复制
  assets:
    - assets/kitten.jpg

我的颤音代码是:

代码语言:javascript
复制
void main() {
  runApp(
    new Center(
      child: new Image.asset('assets/kitten.jpg'),
    ),
  );
}

现在我有了一个new Image.asset(),如何确定该图像的宽度和高度?例如,我只想打印出图像的宽度和高度。

(看起来dart:ui的图像类有宽度和高度,但不确定如何从小部件的图像转到dart:ui的图像。)

谢谢!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2017-06-21 18:32:39

更新的解决方案:

随着新版本的颤振,旧的解决方案是过时的。现在addListener需要一个ImageStreamListener

代码语言:javascript
复制
Widget build(BuildContext context) {
    Image image = new Image.network('https://i.stack.imgur.com/lkd0a.png');
    Completer<ui.Image> completer = new Completer<ui.Image>();
    image.image
      .resolve(new ImageConfiguration())
      .addListener(ImageStreamListener((ImageInfo info, bool _) { 
        completer.complete(info.image));
      })
    ...
    ...

原文:

如果您已经有了一个Image小部件,您可以通过在其ImageStreamImageProvider上调用resolve来读取它的resolve

代码语言:javascript
复制
import 'dart:ui' as ui;
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(new MaterialApp(
    home: new MyHomePage(),
  ));
}

class MyHomePage extends StatelessWidget {

  Widget build(BuildContext context) {
    Image image = new Image.network('https://i.stack.imgur.com/lkd0a.png');
    Completer<ui.Image> completer = new Completer<ui.Image>();
    image.image
      .resolve(new ImageConfiguration())
      .addListener((ImageInfo info, bool _) => completer.complete(info.image));
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Image Dimensions Example"),
      ),
      body: new ListView(
        children: [
          new FutureBuilder<ui.Image>(
            future: completer.future,
            builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) {
              if (snapshot.hasData) {
                return new Text(
                  '${snapshot.data.width}x${snapshot.data.height}',
                  style: Theme.of(context).textTheme.display3,
                );
              } else {
                return new Text('Loading...');
              }
            },
          ),
          image,
        ],
      ),
    );
  }
}
票数 55
EN

Stack Overflow用户

发布于 2019-03-30 06:23:08

如果您只想要异步函数中的图像的宽度和高度,则其他答案似乎过于复杂。您可以像这样直接使用颤振库获得图像分辨率:

代码语言:javascript
复制
import 'dart:io';

File image = new File('image.png'); // Or any other way to get a File instance.
var decodedImage = await decodeImageFromList(image.readAsBytesSync());
print(decodedImage.width);
print(decodedImage.height);
票数 102
EN

Stack Overflow用户

发布于 2019-08-24 17:31:21

创建一个方法,例如:

代码语言:javascript
复制
Future<Size> _calculateImageDimension() {
  Completer<Size> completer = Completer();
  Image image = Image.network("https://i.stack.imgur.com/lkd0a.png");
  image.image.resolve(ImageConfiguration()).addListener(
    ImageStreamListener(
      (ImageInfo image, bool synchronousCall) {
        var myImage = image.image;
        Size size = Size(myImage.width.toDouble(), myImage.height.toDouble());
        completer.complete(size);
      },
    ),
  );
  return completer.future;
}

并把它当作:

代码语言:javascript
复制
_calculateImageDimension().then((size) => print("size = ${size}")); // 487.0,696.0
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44665955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档