package com.img.reflection;import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;public class ImageUtil extends JPanel
{
private Image img;
private Image reflectImg;
private int h;
private static int convertPixel(int x, int y, int w, int h, int pixel,
int fadeSpeed)
{
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff; double percent = (double) (y * 100) / h / 100d;
for (int i = 0; i < fadeSpeed; i++)
{
percent = percent * percent;
}
alpha = (int) (alpha * percent);
alpha = Math.min(alpha, 150);
int gray = (red + green + blue) / 3;
return ((alpha << 24) + (gray << 16) + (gray << 8) + gray);
} public static Image createShadowImage(Image image, int fadeSpeed)
{
int w = image.getWidth(null);
int h = image.getHeight(null);
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(image, 0, 0, w, h, pixels, 0, w);
try
{
pg.grabPixels();
} catch (Exception e)
{
return null;
}
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
pixels[j * w + i] = convertPixel(i, j, w, h, pixels[j * w + i],
fadeSpeed);
}
}
int[] newPixels = new int[w * h];
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
newPixels[j * w + i] = pixels[(h - j - 1) * w + i];
}
} MemoryImageSource source = new MemoryImageSource(w, h, newPixels, 0, w);
return Toolkit.getDefaultToolkit().createImage(source);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, 0, 0, this);
g2d.drawImage(reflectImg, 0, h, this);
}
public ImageUtil() throws IOException{
img = ImageIO.read(new File("d:/pic.jpg"));
h = img.getHeight(null);
reflectImg = createShadowImage(img,3);
draw();
}
public static void main(String[] args) throws IOException
{
JFrame frame = new JFrame();
frame.getContentPane().add(new ImageUtil());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 800);
frame.setVisible(true); }
public void draw()
{
BufferedImage buffImage = new BufferedImage(img.getWidth(null), reflectImg.getHeight(null)+h,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = buffImage.createGraphics();
g2.drawImage(img, 0, 0, null);
g2.drawImage(reflectImg, 0, h, null);
g2.dispose();
File f = new File("d:/test.jpg ");
try
{
ImageIO.write(buffImage, "jpg ", f);
} catch (IOException e)
{
e.printStackTrace();
}
}
}成网上拷了段代码,自己写了一个draw()方法用来保存处理好的图片,不知道draw()存在什么问题,保存的图片怎是0K。
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;public class ImageUtil extends JPanel
{
private Image img;
private Image reflectImg;
private int h;
private static int convertPixel(int x, int y, int w, int h, int pixel,
int fadeSpeed)
{
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff; double percent = (double) (y * 100) / h / 100d;
for (int i = 0; i < fadeSpeed; i++)
{
percent = percent * percent;
}
alpha = (int) (alpha * percent);
alpha = Math.min(alpha, 150);
int gray = (red + green + blue) / 3;
return ((alpha << 24) + (gray << 16) + (gray << 8) + gray);
} public static Image createShadowImage(Image image, int fadeSpeed)
{
int w = image.getWidth(null);
int h = image.getHeight(null);
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(image, 0, 0, w, h, pixels, 0, w);
try
{
pg.grabPixels();
} catch (Exception e)
{
return null;
}
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
pixels[j * w + i] = convertPixel(i, j, w, h, pixels[j * w + i],
fadeSpeed);
}
}
int[] newPixels = new int[w * h];
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
newPixels[j * w + i] = pixels[(h - j - 1) * w + i];
}
} MemoryImageSource source = new MemoryImageSource(w, h, newPixels, 0, w);
return Toolkit.getDefaultToolkit().createImage(source);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, 0, 0, this);
g2d.drawImage(reflectImg, 0, h, this);
}
public ImageUtil() throws IOException{
img = ImageIO.read(new File("d:/pic.jpg"));
h = img.getHeight(null);
reflectImg = createShadowImage(img,3);
draw();
}
public static void main(String[] args) throws IOException
{
JFrame frame = new JFrame();
frame.getContentPane().add(new ImageUtil());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 800);
frame.setVisible(true); }
public void draw()
{
BufferedImage buffImage = new BufferedImage(img.getWidth(null), reflectImg.getHeight(null)+h,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = buffImage.createGraphics();
g2.drawImage(img, 0, 0, null);
g2.drawImage(reflectImg, 0, h, null);
g2.dispose();
File f = new File("d:/test.jpg ");
try
{
ImageIO.write(buffImage, "jpg ", f);
} catch (IOException e)
{
e.printStackTrace();
}
}
}成网上拷了段代码,自己写了一个draw()方法用来保存处理好的图片,不知道draw()存在什么问题,保存的图片怎是0K。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货