最近做项目,然后要给按钮做icon图片。去网上一搜,发现下过来的图片,都在放在一张上图片面了。以前做项目是,也看到有些大的网站,也是这样弄得。那是因为css中可以分割图片。。但是不知道java中这个怎么实现

解决方案 »

  1.   

    以前我问过这样的问题BufferedImage bi = ImageIO.read(...);
    ImageIcon icon1 = new ImageIcon(bi.getSubimage(x,y,w,h));
      

  2.   

    给你推荐个icon网站
    http://www.easyicon.cn/iconsearch/icon/2/
      

  3.   


    package CutImage;import java.io.*;
    import java.awt.*;
    import java.awt.image.*;
    import java.awt.Graphics;
    import java.awt.color.ColorSpace;
    import javax.imageio.ImageIO;public class ImageCut {
    /**
     * 缩放图像
     * 
     * @param srcImageFile源图像文件地址
     * @param result缩放后的图像地址
     * @param scale缩放比例
     * @param flag缩放选择:true
     *            放大; false 缩小;
     */
    public static void scale(String srcImageFile, String result, int scale,
    boolean flag) {
    try {
    BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
    int width = src.getWidth(); // 得到源图宽
    int height = src.getHeight(); // 得到源图长
    if (flag) {// 放大
    width = width * scale;
    height = height * scale;
    } else {// 缩小
    width = width / scale;
    height = height / scale;
    }
    Image image = src.getScaledInstance(width, height,
    Image.SCALE_DEFAULT);
    BufferedImage tag = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);
    Graphics g = tag.getGraphics();
    g.drawImage(image, 0, 0, null); // 绘制缩小后的图
    g.dispose();
    ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
    } catch (IOException e) {
    e.printStackTrace();
    }
    } /**
     * 图像切割
     * 
     * @param srcImageFile源图像地址
     * @param descDir切片目标文件夹
     * @param destWidth目标切片宽度
     * @param destHeight目标切片高度
     */
    public static void cut(String srcImageFile, String descDir, int destWidth,
    int destHeight) {
    try {
    Image img;
    ImageFilter cropFilter; // 读取源图像
    BufferedImage bi = ImageIO.read(new File(srcImageFile));
    int srcWidth = bi.getHeight(); // 源图宽度
    int srcHeight = bi.getWidth(); // 源图高度
    if (srcWidth > destWidth && srcHeight > destHeight) {
    Image image = bi.getScaledInstance(srcWidth, srcHeight,
    Image.SCALE_DEFAULT);
    destWidth = 200; // 切片宽度
    destHeight = 150; // 切片高度
    int cols = 0; // 切片横向数量
    int rows = 0; // 切片纵向数量
    // 计算切片的横向和纵向数量
    if (srcWidth % destWidth == 0) {
    cols = srcWidth / destWidth;
    } else {
    cols = (int) Math.floor(srcWidth / destWidth) + 1;
    }
    if (srcHeight % destHeight == 0) {
    rows = srcHeight / destHeight;
    } else {
    rows = (int) Math.floor(srcHeight / destHeight) + 1;
    }
    // 循环建立切片
    // 改进的想法:是否可用多线程加快切割速度
    for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
    // 四个参数分别为图像起点坐标和宽高
    // 即: CropImageFilter(int x,int y,int width,int height)
    cropFilter = new CropImageFilter(j * 200, i * 150,
    destWidth, destHeight);
    img = Toolkit.getDefaultToolkit().createImage(
    new FilteredImageSource(image.getSource(),
    cropFilter));
    BufferedImage tag = new BufferedImage(destWidth,
    destHeight, BufferedImage.TYPE_INT_RGB);
    Graphics g = tag.getGraphics();
    g.drawImage(img, 0, 0, null); // 绘制缩小后的图
    g.dispose();
    // 输出为文件
    ImageIO.write(tag, "JPEG", new File(descDir
    + "pre_map_" + i + "_" + j + ".jpg"));
    }
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    } // 图像类型转换GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
    public static void convert(String source, String result) {
    try {
    File f = new File(source);
    f.canRead();
    f.canWrite();
    BufferedImage src = ImageIO.read(f);
    ImageIO.write(src, "JPG", new File(result));
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } // 彩色转为黑白
    public static void gray(String source, String result) {
    try {
    BufferedImage src = ImageIO.read(new File(source));
    ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
    ColorConvertOp op = new ColorConvertOp(cs, null);
    src = op.filter(src, null);
    ImageIO.write(src, "JPEG", new File(result));
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    cut("d:/maillist.jpg", "d:/t/", 18, 14);
    }
    }