栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何找到图像的主色?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何找到图像的主色?

在Java中迭代每个像素并确定颜色

import java.awt.image.BufferedImage;import java.io.File;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import java.util.linkedList;import java.util.List;import java.util.Map;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.stream.ImageInputStream;public class ImageTester {    public static void main(String args[]) throws Exception {        File file = new File("C:\Users\Andrew\Desktop\myImage.gif");        ImageInputStream is = ImageIO.createImageInputStream(file);        Iterator iter = ImageIO.getImageReaders(is);        if (!iter.hasNext())        { System.out.println("Cannot load the specified file "+ file); System.exit(1);        }        ImageReader imageReader = (ImageReader)iter.next();        imageReader.setInput(is);        BufferedImage image = imageReader.read(0);        int height = image.getHeight();        int width = image.getWidth();        Map m = new HashMap();        for(int i=0; i < width ; i++)        { for(int j=0; j < height ; j++) {     int rgb = image.getRGB(i, j);     int[] rgbArr = getRGBArr(rgb);          // Filter out grays....          if (!isGray(rgbArr)) {       Integer counter = (Integer) m.get(rgb);     if (counter == null)      counter = 0;  counter++; m.put(rgb, counter);          }      }        }     String colourHex = getMostCommonColour(m);        System.out.println(colourHex);    }    public static String getMostCommonColour(Map map) {        List list = new linkedList(map.entrySet());        Collections.sort(list, new Comparator() {   public int compare(Object o1, Object o2) {     return ((Comparable) ((Map.Entry) (o1)).getValue())       .compareTo(((Map.Entry) (o2)).getValue());   }        }); Map.Entry me = (Map.Entry )list.get(list.size()-1);        int[] rgb= getRGBArr((Integer)me.getKey());        return Integer.toHexString(rgb[0])+" "+Integer.toHexString(rgb[1])+" "+Integer.toHexString(rgb[2]); }    public static int[] getRGBArr(int pixel) {        int alpha = (pixel >> 24) & 0xff;        int red = (pixel >> 16) & 0xff;        int green = (pixel >> 8) & 0xff;        int blue = (pixel) & 0xff;        return new int[]{red,green,blue};  }    public static boolean isGray(int[] rgbArr) {        int rgDiff = rgbArr[0] - rgbArr[1];        int rbDiff = rgbArr[0] - rgbArr[2];        // Filter out black, white and grays...... (tolerance within 10 pixels)        int tolerance = 10;        if (rgDiff > tolerance || rgDiff < -tolerance)  if (rbDiff > tolerance || rbDiff < -tolerance) {      return false; }   return true;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号