/* * PCFDemo3.java * A simple demonstration of PCFFont, showing off some text effects. * Usage: .5) { sum += conv[x][y]; num++; } } } double level = .5; if (sum>0) { level = sum/num; } img = clip(conv, level, 1); g.drawImage(img, xpos, ypos-strMetrics.ascent, null); ypos += height; g1.drawImage(backImg, 0, 0, null); // Color the blurred image conv = convolve(strImg, mkmask(mask_color)); img = recolor(conv, 0); g.drawImage(img, xpos, ypos-strMetrics.ascent, null); ypos += height; g1.drawImage(backImg, 0, 0, null); // Color the blurred image again conv = convolve(strImg, mkmask(mask_color)); img = recolor(conv, 1); g.drawImage(img, xpos, ypos-strMetrics.ascent, null); ypos += height; } g1.drawImage(backImg, 0, 0, null); } // 1d convolution masks double mask_blur1[] = {.2,0,0,0,.2}; double mask_blur2[] = {.15,0,0,0,.15}; double mask_clip[] = {.1,0,0,0,.1}; double mask_color[] = {.1,0,.1,0,.1}; double mask_emboss[][] = {{-.1,-.1,0}, {-.1,0,.1}, {0,.1,.1}}; // Make 2d convolution mask from a 1d mask double[][] mkmask(double mask1[]) { int sz = mask1.length; int off = (sz-1)/2; double mask2[][] = new double[sz][]; for (int i=0; i1) { f = 1; } int r = (int)(255*(1-f)); i1b[x+y*w] = (0xff<<24)|(r<<16)|(r<<8)|(r<<0); } } } return waitImage(Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(w,h,i1b,0,w))); } // Use i1 as a mask to select pixels from i2 where i1 != 0 Image select(Image i1, Image i2) { int i1w = i1.getWidth(null); int i2w = i2.getWidth(null); int i1h = i1.getHeight(null); int i2h = i2.getHeight(null); int i1b[] = new int[i1w*i1h]; int i2b[] = new int[i2w*i2h]; PixelGrabber pg1 = new PixelGrabber(i1, 0, 0, i1w, i1h, i1b, 0, i1w); PixelGrabber pg2 = new PixelGrabber(i2, 0, 0, i2w, i2h, i2b, 0, i2w); try { pg1.grabPixels(); pg2.grabPixels(); } catch (Exception e) {} for (int x=0;x>>24)==0xff) { int xx = x%i2w; int yy = y%i2h; i1b[x+y*i1w] = i2b[(x%i2w)+(y%i2h)*i2w]; } else { i1b[x+y*i1w] = 0; } } } return waitImage(Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(i1w,i1h,i1b,0,i1w))); } // Clip image at val Image clip(double s[][], double min, double max) { int i1w = s.length; int i1h = s[0].length; int i1b[] = new int[i1w*i1h]; for (int x=0;xmax) { i1b[x+y*i1w] = 0; } else { i1b[x+y*i1w] = 0xff000000; } } } return waitImage(Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(i1w,i1h,i1b,0,i1w))); } // Reflect Image reflect(double s[][]) { int i1w = s.length; int i1h = s[0].length; int i1b[] = new int[i1w*i1h]; for (int x=2;x.01) { b = 200; } else { b = 100; } if (r>255) { r = 255; } if (r<0) { r = 0; } if (g>255) { g = 255; } if (g<0) { g = 0; } i1b[x+y*i1w] = (0xff<<24)|(r<<16)|(g<<8)|(b<<0); } } return waitImage(Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(i1w,i1h,i1b,0,i1w))); } // Recolor image Image recolor(double s[][], int mode) { int i1w = s.length; int i1h = s[0].length; int i1b[] = new int[i1w*i1h]; for (int x=0;x1) { f = 1; } r = (int)(255*f); g = 255-r; b = r/2; i1b[x+y*i1w] = 0xff000000|(r<<16)|(g<<8)|b; } else { double brk = .4; double w = .5; double d; f -= brk-w; if (f>w) { f = 2*w-f; } f = f/w; if (f>0 && f<1) { r = 255; g = 255-(int)(100*f); b = 100-(int)(100*f); i1b[x+y*i1w] = 0xff000000|(r<<16)|(g<<8)|b; } else { i1b[x+y*i1w] = 0; } } } } } return waitImage(Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(i1w,i1h,i1b,0,i1w))); } // Fill g with Image i void pattern(Graphics g, Image i, int gwidth, int gheight) { int iwidth = i.getWidth(null); int iheight = i.getHeight(null); for (int x=0; x