2007/06/15

[Java] iText遮罩圖設計

  • 用 java.awt.image.BufferedImage 繪製不規則圖形
    //產生一個200x200的BufferedImage
    BufferedImage img = new BufferedImage(200, 200, BufferedImage.TYPE_BYTE_GRAY);
    //產生一個正三角形與倒三角形,組合成一個六芒星的形狀
    int[] aX = {100, 0, 200, 100};
    int[] aY = {0, 150, 150, 0};
    int[] bX = {100, 0, 200, 100};
    int[] bY = {200, 50, 50, 200};
    img.getGraphics().fillPolygon(aX, aY, 4);
    img.getGraphics().fillPolygon(bX, bY, 4);
    //強制將圖形以黑白兩色呈現, 這樣就可以將不規則圖形成為遮罩圖
    Image mask = Image.getInstance(img, null, true);
    //將繪製的圖形做一次Invert, 不然會變成顯示六芒星以外的圖
    mask.setInverted(true);
    mask.makeMask();
    //讀取欲顯示的圖片
    Image image = Image.getInstance("c:\\image.jpg");
    //設定該圖片的遮罩圖
    image.setImageMask(mask);
    //設定該圖片在pdf版面中的位置
    image.setAbsolutePosition(100, 100);
    //最後透過PdfContentByte的assImage將圖片加入即可

  • 自行設定遮罩的圖形, 可製造漸層的效果(漸層效果會以背景顏色進行灰階式的遮罩)
    //產生一個0-255漸層的byte[]
    byte maskB[] = new byte[256];
    for(int i=0; i<256; i++) {
    maskB[i] = (byte)i;
    }
    //設定由上至下的漸層效果
    Image mask = Image.getInstance(1, 256, 1, 8, maskB);
    //設定由左至右的漸層效果可用Image mask = Image.getInstance(256, 1, 1, 8, maskB);
    mask.makeMask();
    //讀取欲顯示的圖片
    Image image = Image.getInstance("c:\\image.jpg");
    //設定該圖片的遮罩圖
    image.setImageMask(mask);
    //設定該圖片在pdf版面中的位置
    image.setAbsolutePosition(100, 100);
    //最後透過PdfContentByte的assImage將圖片加入即可

沒有留言:

張貼留言