Avoid floating point inaccuracy in gradient color stops
This commit is contained in:
parent
d7c7f15551
commit
911df237f3
@ -143,12 +143,12 @@ Shadings.RadialAxial = (function RadialAxialClosure() {
|
||||
// 10 samples seems good enough for now, but probably won't work
|
||||
// if there are sharp color changes. Ideally, we would implement
|
||||
// the spec faithfully and add lossless optimizations.
|
||||
var diff = t1 - t0;
|
||||
var step = diff / 10;
|
||||
const NUMBER_OF_SAMPLES = 10;
|
||||
const step = (t1 - t0) / NUMBER_OF_SAMPLES;
|
||||
|
||||
var colorStops = this.colorStops = [];
|
||||
|
||||
// Protect against bad domains so we don't end up in an infinite loop below.
|
||||
// Protect against bad domains.
|
||||
if (t0 >= t1 || step <= 0) {
|
||||
// Acrobat doesn't seem to handle these cases so we'll ignore for
|
||||
// now.
|
||||
@ -158,12 +158,12 @@ Shadings.RadialAxial = (function RadialAxialClosure() {
|
||||
|
||||
var color = new Float32Array(cs.numComps), ratio = new Float32Array(1);
|
||||
var rgbColor;
|
||||
for (var i = t0; i <= t1; i += step) {
|
||||
ratio[0] = i;
|
||||
for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {
|
||||
ratio[0] = t0 + i * step;
|
||||
fn(ratio, 0, color, 0);
|
||||
rgbColor = cs.getRgb(color, 0);
|
||||
var cssColor = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
|
||||
colorStops.push([(i - t0) / diff, cssColor]);
|
||||
colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);
|
||||
}
|
||||
|
||||
var background = 'transparent';
|
||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -160,6 +160,7 @@
|
||||
!issue4402_reduced.pdf
|
||||
!issue845r.pdf
|
||||
!issue3405r.pdf
|
||||
!issue7339_reduced.pdf
|
||||
!issue3438.pdf
|
||||
!issue2074.pdf
|
||||
!scan-bad.pdf
|
||||
|
BIN
test/pdfs/issue7339_reduced.pdf
Normal file
BIN
test/pdfs/issue7339_reduced.pdf
Normal file
Binary file not shown.
@ -1865,6 +1865,12 @@
|
||||
"link": true,
|
||||
"type": "load"
|
||||
},
|
||||
{ "id": "issue7339",
|
||||
"file": "pdfs/issue7339_reduced.pdf",
|
||||
"md5": "7092ab6a1acc31db9d1caaa0447334a0",
|
||||
"rounds": 1,
|
||||
"type": "eq"
|
||||
},
|
||||
{ "id": "bug1142033",
|
||||
"file": "pdfs/bug1142033.pdf",
|
||||
"md5": "1d9afd397e89a0f52c056f449ec93daa",
|
||||
|
Loading…
Reference in New Issue
Block a user