pdfbox-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shaola Ren (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (PDFBOX-1915) Implement shading with Coons and tensor-product patch meshes
Date Sun, 08 Jun 2014 14:11:01 GMT

     [ https://issues.apache.org/jira/browse/PDFBOX-1915?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Shaola Ren updated PDFBOX-1915:

    Attachment: lamp_cairo7_1.png

Thanks for your information and updated files. When one patch's real dimension is too large,
there is indeed the "too coarse" problem in my method as I just simply define one general
dividing level what I used now is 4, that means each cubic Bezier curve is divided into 1
<< 4 = 16 segments, for a better version this level may be determined by the dimension
of a patch but not in the current code yet and I didn't think about this issue carefully either

There is also another problem in my code, as I divide one patch into small quadrilaterals,
there are two cases that I didn't consider before, when a quadrilateral degenerates into a
point or a line, which cause some parts of a shading type 7 image to be lost, you will see
some parts of a graph have unexpected background color, I attached two such results lamp_cairo7_1.png
and lamp_cairo7_0.png, these two graph have different dividing level.

I thought another way to deal with the dividing issue, the finer the divided quadrilateral
is the longer the time will be taken to calculate, when a patch is too large, I can first
take it as a small patch, after calculation, I can use another method to zoom in the small
patch to its real size, this can avoid the heavy calculation from control points to graph,
but I still didn't think about the concrete method to accomplish this zoom in function.

I believe there should be many other imperfect aspects in this method. I haven't tested the
4 flags file and gwg file yet, now I started working on the degenerated quadrilateral cases.

All your information is useful. Thanks.

> Implement shading with Coons and tensor-product patch meshes
> ------------------------------------------------------------
>                 Key: PDFBOX-1915
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-1915
>             Project: PDFBox
>          Issue Type: Improvement
>          Components: Rendering
>    Affects Versions: 1.8.5, 1.8.6, 2.0.0
>            Reporter: Tilman Hausherr
>            Assignee: Shaola Ren
>              Labels: graphical, gsoc2014, java, math, shading
>             Fix For: 2.0.0
>         Attachments: CONICAL.pdf, GWG060_Shading_x1a.pdf, HSBWHEEL.pdf, McAfee-ShadingType7.pdf,
Shadingtype6week1.pdf, TENSOR.pdf, XYZsweep.pdf, _gwg060_shading_x1a.pdf-1.png, _mcafee-shadingtype7.pdf-1.png,
asy-coons-but-really-tensor.pdf, asy-tensor-rainbow.pdf, asy-tensor.pdf, coons-function.pdf,
coons-function.ps, coons-nofunction-CMYK.pdf, coons-nofunction-CMYK.ps, coons-nofunction-Duotone.pdf,
coons-nofunction-Duotone.ps, coons-nofunction-Gray.pdf, coons-nofunction-Gray.ps, coons-nofunction-RGB.pdf,
coons-nofunction-RGB.ps, coons2-function.pdf, coons2-function.ps, coons4-function.ps, eci_altona-test-suite-v2_technical_H.pdf,
lamp_cairo.pdf, lamp_cairo7_0.png, lamp_cairo7_1.png, pass4FlagTest.rar, patchCases.jpg, patchMap.jpg,
shading6ContourTest.rar, shading6Done.rar, shading7.rar, tensor-nofunction-RGB.pdf, tensor-nofunction-RGB.ps,
tensor-nofunction-RGB_1.png, tensor4-nofunction.pdf, tensor4-nofunction.ps, updateshading6ContourTest.rar
> Of the seven shading methods described in the PDF specification, type 6 (Coons patch
meshes) and type 7 (Tensor-product patch meshes) haven't been implemented. I have done type
1, 4 and 5, but I don't know the math for type 6 and 7. My math days are decades away.
> Knowledge prerequisites: 
> - java, although you don't have to be a java ace, just feel confortable
> - math: you should know what "cubic Bézier curves", "Degenerate Bézier curves", "bilinear
interpolation", "tensor-product", "affine transform matrix" and "Bernstein polynomials" are,
or be able to learn it
> - maven (basic)
> - svn (basic)
> - an IDE like Netbeans or Eclipse or IntelliJ (basic)
> - ideally, you are either a math student who likes to program, or a computer science
student who is specializing in graphics.
> A first look at PDFBOX: try the command utility here:
> https://pdfbox.apache.org/commandline/#pdfToImage
> and use your favorite PDF, or the PDFs mentioned in PDFBOX-615, these have the shading
types that are already implemented.
> Some simple source code to convert to images:
> String filename = "blah.pdf";
> PDDocument document = PDDocument.loadNonSeq(new File(filename), null);
> List<PDPage> pdPages = document.getDocumentCatalog().getAllPages();
> int page = 0;
> for (PDPage pdPage : pdPages)
> {
> ++page;
> BufferedImage bim = RenderUtil.convertToImage(pdPage, BufferedImage.TYPE_BYTE_BINARY,
> ImageIO.write(bim, "png", new File(filename+page+".png"));
> }
> document.close();
> You are not starting from scratch. The implementation of type 4 and 5 shows you how to
read parameters from the PDF and set the graphics. You don't have to learn the complete PDF
spec, only 15 pages related to the two shading types, and 6 pages about shading in general.
The PDF specification is here:
> http://www.adobe.com/devnet/pdf/pdf_reference.html
> The tricky parts are:
> - decide whether a point(x,y) is inside or outside a patch
> - decide the color of a point within the patch
> To get an idea about the code, look at the classes GouraudTriangle, GouraudShadingContext,
Type4ShadingContext and Vertex here
> https://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/
> or download the whole project from the repository.
> https://pdfbox.apache.org/downloads.html#scm
> If you want to see the existing code in the debugger with a Gouraud shading, try this
> http://asymptote.sourceforge.net/gallery/Gouraud.pdf
> Testing:
> I have attached several example PDFs. To see which one has which shading, open them with
an editor like NOTEPAD++, and search for "/ShadingType" (without the quotes). If your images
are rendering like the example PDFs, then you were successful.
> Optional:
> Review and optimize the complete shading package for speed; implement cubic spline interpolation
for type 0 (sampled) functions (that one is really low-low priority, see details by looking
up "cubic spline interpolation" in the PDF spec, which tells that it is disregarded in printing,
and I don't have a test PDF).
> Mentor: Tilman Hausherr (European timezone, languages: german, english, french)

This message was sent by Atlassian JIRA

View raw message