Как превратить изображение актива в растровое изображение в Flutter / Dart? - PullRequest
1 голос
/ 09 января 2020

Мне нужно сравнить два изображения, поэтому мне нужно декодировать эти два изображения (ресурсы) в растровые изображения. Я попробовал это:

import 'package:flutter/services.dart';
import 'package:image/image.dart';

var imageData = await rootBundle.load("assets/images/test.png");
Image firstImage = Image.fromBytes(100, 100, imageData.buffer.asUint8List());
int pixel = firstImage.getPixel(5, 0);
print('$pixel');

, но это не работает, потому что после того, как я установил второй аргумент getPixel(x, y) в любое значение, кроме 0, он выдает исключение:

E/flutter (11752): [ERROR:flutter/shell/common/shell.cc(199)] Dart Error: Unhandled exception:
E/flutter (11752): RangeError (index): Index out of range: index should be less than 86: 101
E/flutter (11752): #0      _Uint32ArrayView.[] (dart:typed_data-patch/typed_data_patch.dart:3999:7)
E/flutter (11752): #1      Image.getPixel (package:image/src/image.dart:409:37)

Также я попробовал так:

Image firstImage = decodeImage(new File('assets/images/test.png').readAsBytesSync());
int pixel = firstImage.getPixel(1, 1);
print('$pixel');

, но у меня есть следующее исключение:

E/flutter (11752): FileSystemException: Cannot open file, path = 'assets/images/test.png' (OS Error: No such file or directory, errno = 2)

Поэтому я ищу ум, который поможет мне превратить мои активы в растровые изображения, чтобы я мог получить цвет каждого пикселя каждого изображения.

1 Ответ

1 голос
/ 29 марта 2020

Попробуйте это:

import 'package:image/image.dart' as img;

...

ByteData imageBytes = await rootBundle.load('assets/images/test.png');
List<int> values = imageBytes.buffer.asUint8List();
img.Image photo;
photo = img.decodeImage(values);
int pixel = photo.getPixel(5, 0);
...