javascript - getImageData() 数组在角度 5 中返回全 0
问题描述
在画布内渲染图像后,我试图获取图像的 rgb 值。但是,我得到了所有 0 作为回报。我在渲染图像后尝试使用 getImageData() 不确定为什么我得到 0 作为回报。
我的代码:
fileSelected: File;
preview: any;
context: CanvasRenderingContext2D;
hue: any;
myImageData:any
onFileSelect(e: any) {
let canvas = this.mycanvas.nativeElement;
let context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height)
let imgData;
this.fileSelected = e.target.files[0];
let reader = new FileReader()
reader.onload = (e: any) => {
var image = new Image();
image.onload = function () {
image.width = canvas.width;
image.height = canvas.height;
context.drawImage(image, 0, 0, canvas.width, canvas.height)
};
image.src = e.target.result
}
reader.readAsDataURL(this.fileSelected);
this.myImageData = context.getImageData(0, 0, 100, 100);
this.hue = this.calculateHue(this.fileSelected, this.myImageData);
}
calculateHue(file, myImageData) {
console.log("rgb====", myImageData.data)
return null
}
我已经浏览了这些链接getImageData() 返回全零,getImageData() 返回全 0, getImageData 总是返回 0
但是没有一个答案能解决它。我究竟做错了什么?
解决方案
加载图像后,您正在写入画布,但是一旦选择了文件,您就会尝试从画布中读取,请移动:
this.myImageData = context.getImageData(0, 0, 100, 100);
this.hue = this.calculateHue(this.fileSelected, this.myImageData);
在通话中image.onload
和context.drawImage(image, 0, 0, canvas.width, canvas.height)
通话后,您可以确定有可以读取的图像数据。
它应该看起来像这样:
onFileSelect(e: any) {
let canvas = this.mycanvas.nativeElement;
let context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height)
let imgData;
this.fileSelected = e.target.files[0];
let reader = new FileReader();
let self = this;
reader.onload = (e: any) => {
var image = new Image();
image.onload = () => {
image.width = canvas.width;
image.height = canvas.height;
context.drawImage(image, 0, 0, canvas.width, canvas.height)
// Move it here
self.myImageData = context.getImageData(0, 0, 100, 100);
self.hue = this.calculateHue(self.fileSelected, self.myImageData);
};
image.src = e.target.result
}
reader.readAsDataURL(this.fileSelected);
}
推荐阅读
- windows - 在 Windows 机器上获取 Azure VM 大小
- node.js - AWS Lambda 层和本地结构
- cmd - Windows“开始”命令不会从“执行 shell 脚本”步骤中返回
- c# - 模块化应用(规模、性能、可能的问题)
- machine-learning - 为什么执行交叉验证后输出会发生变化?
- swift - webkit webview中的Google iframe问题它工作正常
- mysql - Mysql Docker容器 - 在创建时插入用户输入
- java - 如何检查 Spark 是否正在使用 OpenBlas?
- javascript - 无需将鼠标悬停在 WordPress 中的 Image Accordion Gallery 上即可显示标题
- php - 显示类中 SQL 的总 id 计数