我正在嘗試使用 讀取 256x256 影像ImageIO.read,將其轉換為 a ByteArray,然后轉換為 ,然后BufferedImage使用ImageIO.write. 一切似乎都可以正常作業,但是最終影像已損壞(盡管顯然仍然基于原始影像。我在此程序中找不到問題所在,我對scansize引數持懷疑態度,但我并不完全理解。
這個想法是在讀取和寫入之間操縱像素,但目前我什至無法將原始影像重新創建回自身。
我在下面附上原始影像和處理后的影像:
import java.awt.image.BufferedImage
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.IOException
import javax.imageio.ImageIO
fun main(args: Array<String>) {
val bImage = ImageIO.read(File("original.tiff"))
val bos = ByteArrayOutputStream()
ImageIO.write(bImage, "tiff", bos)
val data = bos.toByteArray()
val width = 256
val height = 256
val bytesPerPixel = 3
val len = width * height * bytesPerPixel
val image = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)
val arr = IntArray(len)
for (i in 0 until len) arr[i] = data.get(i).toInt()
image.setRGB(0, 0, width, height, arr, 0, 256) // Seems like something is wrong here
try {
ImageIO.write(image, "jpg", File("converted-grayscale-002.jpg"))
} catch (e: IOException) {
System.err.println("IOException: $e")
}
}

uj5u.com熱心網友回復:
此行不回傳 RGB 影像資料:
val 資料 = bos.toByteArray()
它以 tiff 格式回傳影像的壓縮流,肯定不是正確的影像。
要獲取像素,請使用 Image.getPixel(),或者您可以直接獲取影像的緩沖區,但為此您需要知道底層緩沖區型別是什么 - 這是一個廣泛的主題。
看看這個答案,它應該讓你知道如何去做:convert a RGB image to grayscale Image減少java中的記憶體
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505705.html
上一篇:使用imwrite將.nii轉換為.tif,它會保存影像的黑色影像
下一篇:色彩空間縮減計算
