Изображение размывается при добавлении в Excel через JXL

Я использую JXL API для добавления изображения в файл Excel. Используемые библиотеки:
jcommon (1.0.14)
jfreechart (1.0.13)
jxl (2.6.10)

// chartImage is of type BufferedImage
com.KeyPoint.PngEncoder encoder = new com.KeyPoint.PngEncoder(chartImage, true, 0, 0); 
jxl.write.WritableImage image = new jxl.write.WritableImage(0, 2, (chartImage.getWidth()/100),16, 
encoder.pngEncode());
sheet.addImage(image);

Проблема в том, что конструкторы WritableImage берут ширину и высоту с точки зрения строк и столбцов (ширина: от столбца 0 до столбца chartImage.getWidth()/100, высота: от строки 2 до строки 16). Это приводит к размытию изображения диаграммы.
Как передать исходное изображение в Excel с помощью JXL? Пожалуйста, помогите. Спасибо! :-)


person Pravin Sonawane    schedule 16.08.2011    source источник


Ответы (2)


Проблема заключается либо в сжатии, используемом в Excel, либо в кодировщике, который вы использовали.

Решение, которое работает, — нарисовать диаграмму больше, чем предполагалось, а затем позволить Excel выполнить ее уменьшение. Это обеспечивает ясность, хотя рабочая книга, заполненная диаграммами, будет намного больше, чем раньше.

AFAIK это единственное решение проблемы. У меня были похожие проблемы с Word и PowerPoint, и решение, похоже, масштабируется.

Когда вы масштабируете диаграмму, обратите внимание, что размеры шрифта также должны быть изменены.

person Jes    schedule 17.08.2011
comment
блестящее и простое решение, Джес... у меня тоже сработало... спасибо! :) - person Pravin Sonawane; 18.08.2011

Не используйте PngEncoder напрямую. Вместо этого используйте соответствующий метод ChartUtilities, который найдет PNG-кодировщик Sun/Oracle, если он доступен.

person trashgod    schedule 16.08.2011
comment
Можете ли вы сузить круг JFreeChart по сравнению с JXL? - person trashgod; 17.08.2011
comment
Извините, но я этого не понял (извините за мои знания). Моя проблема в том, что класс WritableImage заставляет меня указывать ширину и высоту изображения с точки зрения числовых столбцов и строк соответственно, что, как я думаю, приводит к размытию изображения. Изображение теряет свою четкость (будучи диаграммой, оно должно быть очень четким). - person Pravin Sonawane; 17.08.2011
comment
Извините, мой вопрос был плохо сформулирован. Похоже, изображение, созданное JFreeChart, в порядке. Я предполагаю, что WritableImage использует неоптимальный тип интерполяции. Есть ли способ предварительно масштабировать до нужного размера, например используя TYPE_BILINEAR или TYPE_BICUBIC? - person trashgod; 17.08.2011
comment
Я попробовал простое решение Джеса.. оно тоже связано с масштабированием. Спасибо за помощь. Я попробую использовать интерполяцию в свободное время, так как в этот раз я тороплюсь.. :P - person Pravin Sonawane; 18.08.2011
comment
Поскольку исходное изображение сохраняется, вы можете попробовать увеличить количество целевых ячеек в качестве временного обходного пути. - person trashgod; 18.08.2011