Масштабирование ближайших соседей работает: вся картинка остается неизменной, когда я использую TYPE_NEAREST_NEIGHBOR
.
Несмотря на то, что это код Scala, все используемые библиотеки являются стандартными библиотеками Java.
Функции:
def getBufferedImage(imageFile: java.io.File): BufferedImage = {
ImageIO.read(imageFile)
}
def scaleImage(image: BufferedImage, minSize: Double): BufferedImage = {
val before: BufferedImage = image
val w = before.getWidth()
val h = before.getHeight()
val affit = new AffineTransform()
var scale = 1.0
if(h < w) {
if(h > 0) {
scale = minSize / h
}
} else {
if(w > 0) {
scale = minSize / w
}
}
affit.scale(scale, scale)
val affitop = new AffineTransformOp(affit, AffineTransformOp.TYPE_BICUBIC)
affitop.filter(before, null)
}
def getImageJpegByteArray(image: BufferedImage): Array[Byte] = {
val baos = new java.io.ByteArrayOutputStream()
val mcios = new MemoryCacheImageOutputStream(baos)
ImageIO.write(image, "jpeg", mcios)
mcios.close()
baos.toByteArray
}
Фрагмент кода вызова:
val img = getBufferedImage(imageFile)
val scaledImg = scaleImage(img, 512)
val result = getImageJpegByteArray(scaledImg)
// result is written to SQLite database
result
записывается в базу данных SQLite. Если я загружу его из базы данных и сохраню как файл JPEG, результирующий JPEG будет
- как и ожидалось, если я использую
AffineTransformOp.TYPE_NEAREST_NEIGHBOR
- полностью черный, если я использую
AffineTransformOp.TYPE_BILINEAR
- полностью черный, если я использую
AffineTransformOp.TYPE_BICUBIC
Следовательно, я обвиняю AffineTransformOp
в глючности... Как я могу решить эту проблему?
Магический номер файла result
всегда равен ff d8 ff
, как и ожидается для JPEG.
Подробности
Версия Java: Java HotSpot(TM) 64-разрядная виртуальная машина сервера, Java 1.7.0_71
Операционная система: Apple, OS X 10.9.5
Тестовое изображение: http://www.photos-public-domain.com/wp-content/uploads/2012/05/thundercloud-plum-blossoms.jpg
AffineTransformOp
, и все они что-то выводят (обычная Java). - person MadProgrammer   schedule 24.07.2015null
какdst
вAffineTransformOp.filter(BufferedImage, BufferedImage)
, так что я думаю, что это не дубликат. - person Brian   schedule 31.07.2015BufferedImage
, поэтому ОП должен хотя бы попробовать это. - person heenenee   schedule 31.07.2015