Changeset 793


Ignore:
Timestamp:
01/30/14 16:09:19 (10 years ago)
Author:
jts21
Message:

Undo last commit since it caused jagged edges in rotated images in exported PDFs. Now image rotation in PDFs causes incorrect positioning again. Also added proper image scaling. TODO: Fix rotation and add image tiling

Location:
trunk/src/org/expeditee
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/io/PDF2Writer.java

    r792 r793  
    100100        @Override
    101101        protected void writePicture(Picture pic) throws IOException {
    102                 Image image = pic.getImageToDraw();
     102                Image image = pic.getCroppedImage();
    103103                try {
    104104                        PdfContentByte cb = _pdfWriter.getDirectContent();
    105105                        com.lowagie.text.Image iTextImage = com.lowagie.text.Image.getInstance(image, null);
    106                         // System.out.println(pic.getScale());
    107                         // iTextImage.scalePercent(pic.getScale() * 100);
    108                         iTextImage.setAbsolutePosition(pic.getPolygon().getBounds().x, _pdfWriter.getPageSize().getHeight() - pic.getPolygon().getBounds().y - image.getHeight(null));
    109                         // iTextImage.setRotationDegrees((float) - pic.getRotate());
     106                        iTextImage.setAbsolutePosition(pic.getX(), _pdfWriter.getPageSize().getHeight() - pic.getY() - pic.getHeight());
     107                        iTextImage.scalePercent(pic.getScale() * 100);
     108                        iTextImage.setRotationDegrees((float) - pic.getRotate());
    110109                        cb.addImage(iTextImage);
    111110                } catch (DocumentException e) {
  • trunk/src/org/expeditee/items/Picture.java

    r792 r793  
    99import java.awt.Polygon;
    1010import java.awt.Rectangle;
    11 import java.awt.RenderingHints;
    1211import java.awt.Shape;
    1312import java.awt.Stroke;
     
    1716import java.awt.image.BufferedImage;
    1817import java.awt.image.CropImageFilter;
    19 import java.awt.image.DataBufferInt;
    2018import java.awt.image.FilteredImageSource;
    2119import java.awt.image.ImageObserver;
     
    2321import java.io.IOException;
    2422import java.text.DecimalFormat;
    25 import java.util.Arrays;
    2623
    2724import javax.imageio.ImageIO;
     
    5855
    5956        protected Image _image = null;
    60         protected Image _imageToDraw = null;
    6157
    6258        private int _scaleType = RATIO;
     
    206202                        _scale = 1F;
    207203                }
    208                
    209                 updateImageToDraw();
    210204        }
    211205
     
    338332        public void setWidth(Integer width) {
    339333                _scale = width * 1F / (_end.x - _start.x);
    340                 _imageToDraw = null;
    341334        }
    342335
     
    375368        }
    376369       
    377         protected void updateImageToDraw() {
    378                 _imageToDraw = null;
     370        public void paintImageTiling(Graphics2D g) {
    379371                if (_image == null) {
    380372                        return;
     
    445437                }
    446438               
    447                 double angle = Math.PI * _rotate / 180;
    448                 double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
    449         int w = tmp.getWidth(), h = tmp.getHeight();
    450         int neww = (int)Math.floor(w * cos + h * sin), newh = (int)Math.floor(h * cos + w * sin);
    451                
    452                 BufferedImage rotated = new BufferedImage(neww, newh, BufferedImage.TYPE_INT_ARGB);
    453                 Arrays.fill(((DataBufferInt)rotated.getRaster().getDataBuffer()).getData(), 0);
    454                
    455                 Graphics2D g = rotated.createGraphics();
    456                 g.translate((neww - w) / 2, (newh - h) / 2);
    457                 g.rotate(angle, tmp.getWidth() / 2, tmp.getHeight() / 2);
    458                 g.drawRenderedImage(tmp, null);
    459                
    460                 _imageToDraw = rotated;//.getScaledInstance(rotated.getWidth(), rotated.getHeight(), Image.SCALE_REPLICATE);
    461         }
    462        
    463         public Image getImageToDraw() {
    464                 return _imageToDraw;
    465         }
    466        
    467         // TODO:
    468         //  - Fix positioning (need to use something like polygon position)
    469         //  - Use anti-aliasing for rotation
    470        
    471         public void paintImageTiling(Graphics2D g) {
    472 
    473 //              BufferedImage tmp = getImageToDraw();
    474 //              if(tmp == null) {
    475 //                      return;
    476 //              }
    477 //              tmp.
    478 //              g.drawImage(tmp, at, _imageObserver);
    479                 if(_imageToDraw == null) {
    480                         updateImageToDraw();
    481                 }
    482                 Rectangle b = getPolygon().getBounds();
    483                 g.drawImage(_imageToDraw, b.x + 1, b.y + 1, _imageObserver);
     439                AffineTransform at = new AffineTransform();
     440                at.translate(dX1, dY1);
     441                at.rotate(Math.PI * _rotate / 180, tmp.getWidth() / 2, tmp.getHeight() / 2);
     442                g.drawImage(tmp, at, _imageObserver);
     443                // g.drawImage(tmp, dX1, dY1, dX2, dY2, 0, 0, tmp.getWidth(), tmp.getHeight(), _imageObserver);
    484444        }
    485445
     
    559519                Picture p = createPicture();
    560520                p._image = _image;
    561                 p._imageToDraw = null;
    562521                p._mode = _mode;
    563522                // Doing Duplicate item duplicates link mark which we dont want to do
     
    616575        public void setScale(float scale) {
    617576                _scale = scale;
    618                 _imageToDraw = null;
    619577        }
    620578       
     
    671629                updateSource();
    672630                updatePolygon();
    673                 updateImageToDraw();
    674631                // Make sure items that are resized display the border
    675632                invalidateAll();
     
    834791                updateSource();
    835792                super.translate(origin, ratio);
    836                 _imageToDraw = null;
    837793        }
    838794
     
    861817                setScale(getScale() * scale);
    862818                super.scale(scale, originX, originY);
    863                 _imageToDraw = null;
    864819        }
    865820       
    866821        public void setFlipX(boolean flip) {
    867822                _flipX = flip;
    868                 _imageToDraw = null;
    869823        }
    870824       
    871825        public void setFlipY(boolean flip) {
    872826                _flipY = flip;
    873                 _imageToDraw = null;
    874827        }
    875828       
     
    886839                updateSource();
    887840                updatePolygon();
    888                 _imageToDraw = null;
    889841        }
    890842       
Note: See TracChangeset for help on using the changeset viewer.