单元格将不会获得POI的颜色
我试图制作一个读取图像的程序。 而且在绘制完成之后,MS中的图像很好,但是每个单元格都是像这样的单色像素。我觉得我很安静,但是我看不到它会使单元格着色的问题有人能帮我解决吗?
这是您可以自由使用的代码。
public class Engine { ArrayList<Color> arr = new ArrayList<Color>(); private int xx; private int yy; FileOutputStream out; HSSFSheet sheet; HSSFWorkbook wb; public void process() throws AWTException, IOException{ wb = new HSSFWorkbook(); sheet = wb.createSheet(); wb.setActiveSheet(0); BufferedImage img = null; try { img = ImageIO.read(new File("res/images.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("img file not found"); } for(int x=0;x<img.getWidth();x++){ xx++; for(int y=0;y<img.getHeight();y++){ yy++; int rgb = img.getRGB(x, y); Color c = new Color(rgb); printPixelARGB(rgb); arr.add(c); System.out.println("x: "+ x + " y:" + y +" color: " + c); }} out = new FileOutputStream("pic.xls"); wb.write(out); out.close(); } public void printPixelARGB(int pixel) { int alpha = (pixel >> 24) & 0xff; int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel) & 0xff; HSSFPalette palette = wb.getCustomPalette(); HSSFCellStyle style = wb.createCellStyle(); HSSFRow row = sheet.createRow((short) yy); HSSFCell cell = row.createCell((short) xx); cell.setCellValue(yy); style.setFillForegroundColor(HSSFColor.LIME.index); style.setFillBackgroundColor(HSSFColor.LIME.index); palette.setColorAtIndex(HSSFColor.LIME.index, (byte) red, (byte) green, (byte) blue); cell.setCellStyle(style); } }
我可以自己搞清楚
解决scheme是:
public class Engine { ArrayList<Color> arr = new ArrayList<Color>(); private int xx; private int yy; FileOutputStream out; HSSFSheet sheet; HSSFWorkbook wb; Row r; public void process() throws AWTException, IOException{ wb = new HSSFWorkbook(); sheet = wb.createSheet(); wb.setActiveSheet(0); BufferedImage img = null; try { img = ImageIO.read(new File("res/images.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("img file not found"); } for(int x=0;x<img.getWidth();x++){ xx++; yy=0; r = sheet.createRow(xx); for(int y=0;y<img.getHeight();y++){ yy++; int rgb = img.getRGB(x, y); Color c = new Color(rgb); printPixelARGB(rgb); arr.add(c); System.out.println("x: "+ x + " y:" + y +" color: " + c); }} out = new FileOutputStream("pic.xls"); wb.write(out); out.close(); } public void printPixelARGB(int pixel) { int alpha = (pixel >> 24) & 0xff; int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel) & 0xff; Cell c = r.createCell(yy); HSSFCellStyle style = wb.createCellStyle(); HSSFColor col = setColor(wb, (byte)red, (byte)green,(byte)blue); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(col.getIndex()); c.setCellStyle(style); } public HSSFColor setColor(HSSFWorkbook workbook, byte r,byte g, byte b){ HSSFPalette palette = workbook.getCustomPalette(); HSSFColor hssfColor = null; try { hssfColor= palette.findSimilarColor(r, g, b); if (hssfColor == null ){ palette.setColorAtIndex(HSSFColor.LAVENDER.index, r, g,b); hssfColor = palette.getColor(HSSFColor.LAVENDER.index); } } catch (Exception e) { System.out.println("error"); } return hssfColor; } }