Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-5229

Optimize reading of masked images




      From Gunnar Brand:

      There was a severe performance issue with really big masks if the image needs to be scaled to it (i.e. 10000*10000 pixels). Scaling bicubic can take 6-10 seconds. This patch tries to switch to bilinear resizing for these cases, although the threshold might have to be fine tuned, still.

      There was also a double allocation for the final masked image when we can simply use the image since applyMask() is always fed with a newly created one. Reference hogging and needless allocation have been removed.

      Additionally the alpha blending routines were very slow, working on pixels. There is now a staggered approach by:

      • direct byte masking which is very fast even for big images (right now does not work with padded buffers),
      • exploiting data buffer's sample system to merge the alpha component into the ARGB image, letting the sample model do the bit masking,
      • slow pixel expansion to reverse premultiply matte values (but using fixed point integer arithmetics).

      Additionally also using the interpolation flag of the mask to decide if the mask should be interpolated.

      Attached: page 1 of https://archive.org/details/AlfaWaffenkatalog1911


        1. Alfa-p1.pdf
          61 kB
          Tilman Hausherr



            • Assignee:
              tilman Tilman Hausherr
              tilman Tilman Hausherr
            • Votes:
              0 Vote for this issue
              2 Start watching this issue


              • Created: