Hello,

In Feb 2007 Yegor wrote about scaling image in Excel :


There isn't an easier way do scale images.
>
> There was a discussion recently about scaling.
> Excel measures images in units of 1/256th of a character width of the
> default font. Conversion from these "weird" units to pixels is not
> trivial. It's the main problem.
>
> I have ideas how to add such support. Check POI in a month or two.
> There is a chance I will commit it.
>
> Yegor






 Hi all,
>
>  I'm using Jakarta POI 3.0-alpha3 to write an Excel spreadsheet with
>  images and I'm having some trouble computing the HSSFClientAnchor
>  size.
>
>  At the moment I try to manage it by adding column widths and row
>  heights until I reach approximately the size of the image in cells,
>  and then set up dx and dy, but I can almost never get it to work
>  perfectly and images are never exactly at 100%.
>
>  Is there an easier way to do this? I have searched around in google,
>  groups and google code search but couldn't find anything useful. How
>  do you people do this?
>
>  Thanks a lot!
>
>  Below is a snippet of my code. Basically, you give the starting row/
>  col position of the image you want to insert and it goes around adding
>  row/column sizes into imgHeight and imgWidth until their values are
>  equal to or greater than the size of the image. If they're greater, it
>  substracts one row or one column, depending on what was greater, and
>  puts the remaining pixels on dx or dy.
>
>          protected int addImage(HSSFWorkbook wb, HSSFSheet sheet,
> InputStream
>  img, int numRow, short numCol) {
>                  int x1 = 0;
>                  int y1 = 0;
>                  short x2 = 0;
>                  int y2 = 0;
>                  int row1 = numRow;
>                  short col1 = numCol;
>                  int row2 = numRow;
>                  short col2 = numCol;
>                  ImageData d = new ImageData();
>                  int idx = loadAndConvertPicture(img,wb,d);
>                  int imgHeight = 0;
>                  int imgWidth = 0;
>
>                  while(imgWidth <d.getWidth() || imgHeight <d.getHeight())
> {
>                          if(imgWidth <d.getWidth()) col2++;
>                          if(imgHeight <d.getHeight()) row2++;
>                          if(imgWidth != d.getWidth()) {
>                                  int colWidth = (int)
>  (sheet.getColumnWidth((short)col2)/48);
>                                  if(imgWidth+colWidth<=d.getAmplada()) {
>                                          imgWidth +=colWidth;
>                                  } else {
>                                          col2--;
>                                          x2=(short)(d.getWidth
> ()-imgWidth);
>                                          imgWidth=d.getWidth();
>                                  }
>                          }
>                          if(imgHeight != d.getHeight()) {
>                                  int rowHeight;
>                                  HSSFRow row = sheet.getRow(row2);
>                                  if(row != null) rowHeight = (int)
>  row.getHeight()/20;
>                                  else rowHeight = (int)
>  sheet.getDefaultRowHeight()/20;
>                                  if(row == null) row = sheet.createRow
> (row2);
>                                  if(imgHeight +rowHeight<=d.getHeight()) {
>                                          imgHeight +=rowHeight;
>                                  } else {
>                                          row2--;
>                                          y2=d.getHeight()-imgHeight ;
>                                          imgHeight =d.getHeight();
>                                  }
>                          }
>                  }



I want to now what about new commit in POI to scaling image ?

Thank a lot .

Chris

Reply via email to