[ https://issues.apache.org/jira/browse/PDFBOX-1915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13926180#comment-13926180 ]
Sergey Smal commented on PDFBOX-1915: ------------------------------------- Sorry, i visited that site before registration opens, that's why i asked a question. I find everything I need, thanks again :) > 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: 2.0.0 > Reporter: Tilman Hausherr > Labels: graphical, gsoc2014, java, math, shading > Attachments: CONICAL.pdf, HSBWHEEL.pdf, McAfee-ShadingType7.pdf, > TENSOR.pdf, XYZsweep.pdf, asy-coons-but-really-tensor.pdf, asy-tensor.pdf, > lamp_cairo.pdf > > > 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, 300); > 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 file: > 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 (v6.2#6252)