はじめに
Cameraライブラリで撮影した画像から高さ・横幅を取得する際に、Image型に変換を行わないと行けないのですが、変換方法によってはheight・widthの情報がnullになってしまい高さ・横幅を取得出来ません。
同じようなやり方で困っている方もいるかも知れませんのでそちらの変換方法について解説していきたいと思います。
開発環境
OS: MacOS
Flutter: 3.0.4
Flutter Channel: Stable
Dart: 2.17.5
Android Studio: Artic Fox | 2020.3.1 Patch4
cameraライブラリ: ^0.8.1+3
変換方法
前提:takePictureメソッドで撮影した画像が変換対象(XFile型)
①XFile型 → Uint8List型へ変換
②Uint8List型 → Image型へ変換
// 元の撮影画像
final imageForXFile = await controller.takePicture();
// ①XFile型 → Uint8List型へ変換
final imageForUint8 = await File(imageForXFile.path).readAsBytes();
// ②Uint8List型 → Image型へ変換
final imageForImage = decodeImage(imageForUint8)
使用例
Imageのheight・widthプロパティにアクセスできます。
ただしdecodeImageで返却される型はnull許容型のImage?であるため注意してください。
// 高さ
final height = imageForImage?.height
// 横幅
final width = imageForImage?.width
高さ・横幅が取得できない変換方法
変換後のImageのheight・widthの値がnullになってしまう変換方法もご紹介しておきます。
前提:takePictureメソッドで撮影した画像が変換対象(XFile型)
①XFile型 → File型へ変換
②File型 → Image型へ変換
// 元の撮影画像
final imageForXFile = await controller.takePicture();
// ①XFile型 → File型へ変換
final imageForFile = File(XFile.path)
// ②File型 → Image型へ変換
final imageForImage = Image.file(imageForFile)
まとめ
XFileをImageに変換する場合は、XFile → Uint8List → Imageの順に変換を行う。
ご覧いただきありがとうございました。
記事に不備や補足等がある場合はコメント頂けると助かります。