簡體   English   中英

ByteArrayOutputStream 長度 < 寬度 * 高度

[英]ByteArrayOutputStream length < width * height

我對 ByteArrayOutputStream 有一個奇怪的問題。 我正在嘗試輸入圖像並將其轉換為字節數組。 圖像為 270 x 480 像素。 但是,如果我將數據設置為字節數組並輸出 data.length 我得到 21195 但是 270 x 480 = 129600。它們不應該是一樣的嗎? 我在這里做錯了什么?

BufferedImage originalImage =
                                  ImageIO.read(new File("C:\\Users\\use\\Pictures\\mypic.jpg"));

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write( originalImage, "jpg", baos );
        baos.flush();
        data = baos.toByteArray();
        baos.close();

謝謝,

如果每個像素僅消耗一個字節用於以圖像格式存儲,那么您是對的。 實際情況並非如此。

不同的文件格式對一個像素有不同的存儲成本。

對於純黑白(非灰度)圖像,每個像素只需要一點。

在具有透明度的 PNG 圖像中,除了紅色、綠色和藍色分量之外,每個像素還包含 alpha 分量(透明度/不透明度)。 因此,圖像表示中的字節數取決於圖像格式和壓縮。

BufferedImage類可讓您按位置操作任何像素。

try {
  BufferedImage img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
}

您可以使用getRGB(int x, int y)setRGB(int x, int y)方法來獲取或設置指定的像素。

length < width * height只有在您的圖像是二進制的情況下才會發生,所以如果類型是 TYPE_BYTE_BINARY。 在這種情況下,編碼/存儲是逐行完成的,圖像中字節元素的數量為[width/8 + min(width%8, 1) ] * height

在具有多個通道/波段的圖像的情況下,它可能更勝一籌,因此彩色圖像。

在將圖像轉換為ByteArrayOutputStream ,請確保使用 Byte 對圖像進行編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM