mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-09 09:45:42 +02:00
Sharpen the patterns.
Draw the patterns with the intended resolution instead of scaling afterwards. Scaling leads to unclear patterns. Also: Make TilingPattern function for paintType switch case. Make TilingPattern function for bbox clipping. Make TilingPattern functions for scaling code. Increase MAX_PATTERN_SIZE to 4096. Add Singular Value Decomposition function.
This commit is contained in:
parent
d97c5a2b14
commit
6f65fef64b
4 changed files with 230 additions and 43 deletions
24
src/util.js
24
src/util.js
|
@ -257,6 +257,30 @@ var Util = PDFJS.Util = (function UtilClosure() {
|
|||
];
|
||||
};
|
||||
|
||||
// This calculation uses Singular Value Decomposition.
|
||||
// The SVD can be represented with formula A = USV. We are interested in the
|
||||
// matrix S here because it represents the scale values.
|
||||
Util.singularValueDecompose2dScale =
|
||||
function Util_singularValueDecompose2dScale(m) {
|
||||
|
||||
var transpose = [m[0], m[2], m[1], m[3]];
|
||||
|
||||
// Multiply matrix m with its transpose.
|
||||
var a = m[0] * transpose[0] + m[1] * transpose[2];
|
||||
var b = m[0] * transpose[1] + m[1] * transpose[3];
|
||||
var c = m[2] * transpose[0] + m[3] * transpose[2];
|
||||
var d = m[2] * transpose[1] + m[3] * transpose[3];
|
||||
|
||||
// Solve the second degree polynomial to get roots.
|
||||
var first = (a + d) / 2;
|
||||
var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
|
||||
var sx = first + second || 1;
|
||||
var sy = first - second || 1;
|
||||
|
||||
// Scale values are the square roots of the eigenvalues.
|
||||
return [Math.sqrt(sx), Math.sqrt(sy)];
|
||||
};
|
||||
|
||||
// Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
|
||||
// For coordinate systems whose origin lies in the bottom-left, this
|
||||
// means normalization to (BL,TR) ordering. For systems with origin in the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue