gpt4 book ai didi

canvas - Webkit canvas drawImage() 和 canvas 非整数比例因子错误?

转载 作者:行者123 更新时间:2023-12-02 11:31:53 27 4
gpt4 key购买 nike

如果在已经具有非整数比例因子的 Canvas 上绘制图像,我会遇到 Canvas 上下文drawImage()方法的问题。似乎这样的图像以一种奇怪的方式被剪切(有时图像的最右边的部分被剪切,有时是最底部的部分,有时两者都被剪切)。这个问题至少出现在 Google Chrome 6(至少稳定)、Chromium 6,甚至最新的(开发)版本中,甚至 Safari 5 中。Firefox 没有这个错误。显然,如果我没记错的话,这是一个Webkit问题。让我们看一下下面的代码(提供了演示的完整代码):

<html>
<head>
<style type="text/css">
canvas {
border: solid 1px black;
}
</style>
<script type="text/javascript">
window.onload = function() {
var canvas = document.getElementById("canvas");
var increase = document.getElementById("increase");
var decrease = document.getElementById("decrease");
var scale = document.getElementById("scale");
var context = canvas.getContext("2d");
var image = new Image();
image.src = "image-3x5.png";
var scaleX = 1;
var scaleY = 1;
var repaint = function() {
scale.innerHTML = scaleX + "; " + scaleY;
context.fillStyle = "#FFF";
context.fillRect(0, 0, 1000, 750);
context.drawImage(image, 0, 0, 3, 5);
};
var scaleXF = 1.2; // change both to 2 and it will be fixed
var scaleYF = 1.2;
decrease.onclick = function() {
scaleX /= scaleXF;
scaleY /= scaleYF;
context.scale(1 / scaleXF, 1 / scaleYF);
repaint();
};
increase.onclick = function() {
scaleX *= scaleXF;
scaleY *= scaleYF;
context.scale(scaleXF, scaleYF);
repaint();
};
repaint();
};
</script>
</head>
<body>
<div>
<span id="scale"></span>
</div>
<div>
<canvas id="canvas" width="1000" height="750"></canvas>
</div>
<div>
<input id="decrease" type="button" value="decrease" />
<input id="increase" type="button" value="increase" />
</div>
</body>
</html>

那么这是一个真正的错误吗?或者有什么解决办法吗?

提前致谢。

更新:

假设我们有以下 BASE64 编码的 3x5 图像:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAEklEQVR42mP4z8DwH4YZyOAAAMufHeNmMS0JAAAAAElFTkSuQmCC

最佳答案

你是对的,这是一个错误。

两者的区别

context.setTransform(1*55.206143891243606, 0, 0, 1*55.206143891243606, 0, 0);

context.setTransform(1*55, 0, 0, 1*55, 0, 0);

规模巨大。但仅限于绘制图像时。填充矩形时它可以正常工作。

我做了一些测试并制作了此页面来说明。前两个是drawImage,比例因子为55和55.206143891243606。它们显然看起来非常不同。

下面是另外两个具有相同比例因子和 fillRect 命令的 Canvas 。它们看起来不错。

http://simonsarris.com/misc/badscale.html

这应该报告给 chromium 问题跟踪器。如果你想做的话请告诉我,否则我会做。

顺便说一句,不错:D

关于canvas - Webkit canvas drawImage() 和 canvas 非整数比例因子错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041876/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com