mirror of
https://github.com/openjdk/jdk7u.git
synced 2025-12-10 10:13:47 -06:00
8273756: Enhance BMP image support
Reviewed-by: yan
This commit is contained in:
parent
6f75016b92
commit
036528d890
@ -66,6 +66,7 @@ import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import com.sun.imageio.plugins.common.ImageUtil;
|
||||
@ -205,6 +206,33 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||
}
|
||||
}
|
||||
|
||||
private void readColorPalette(int sizeOfPalette) throws IOException {
|
||||
final int UNIT_SIZE = 1024000;
|
||||
if (sizeOfPalette < UNIT_SIZE) {
|
||||
palette = new byte[sizeOfPalette];
|
||||
iis.readFully(palette, 0, sizeOfPalette);
|
||||
} else {
|
||||
int bytesToRead = sizeOfPalette;
|
||||
int bytesRead = 0;
|
||||
List<byte[]> bufs = new ArrayList<>();
|
||||
while (bytesToRead != 0) {
|
||||
int sz = Math.min(bytesToRead, UNIT_SIZE);
|
||||
byte[] unit = new byte[sz];
|
||||
iis.readFully(unit, 0, sz);
|
||||
bufs.add(unit);
|
||||
bytesRead += sz;
|
||||
bytesToRead -= sz;
|
||||
}
|
||||
byte[] paletteData = new byte[bytesRead];
|
||||
int copiedBytes = 0;
|
||||
for (byte[] ba : bufs) {
|
||||
System.arraycopy(ba, 0, paletteData, copiedBytes, ba.length);
|
||||
copiedBytes += ba.length;
|
||||
}
|
||||
palette = paletteData;
|
||||
}
|
||||
}
|
||||
|
||||
public void readHeader() throws IOException {
|
||||
if (gotHeader)
|
||||
return;
|
||||
@ -274,8 +302,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||
// Read in the palette
|
||||
int numberOfEntries = (int)((bitmapOffset - 14 - size) / 3);
|
||||
int sizeOfPalette = numberOfEntries*3;
|
||||
palette = new byte[sizeOfPalette];
|
||||
iis.readFully(palette, 0, sizeOfPalette);
|
||||
readColorPalette(sizeOfPalette);
|
||||
metadata.palette = palette;
|
||||
metadata.paletteSize = numberOfEntries;
|
||||
} else {
|
||||
@ -309,8 +336,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||
// Read in the palette
|
||||
int numberOfEntries = (int)((bitmapOffset-14-size) / 4);
|
||||
int sizeOfPalette = numberOfEntries * 4;
|
||||
palette = new byte[sizeOfPalette];
|
||||
iis.readFully(palette, 0, sizeOfPalette);
|
||||
readColorPalette(sizeOfPalette);
|
||||
|
||||
metadata.palette = palette;
|
||||
metadata.paletteSize = numberOfEntries;
|
||||
@ -364,8 +390,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||
if (colorsUsed != 0) {
|
||||
// there is a palette
|
||||
sizeOfPalette = (int)colorsUsed*4;
|
||||
palette = new byte[sizeOfPalette];
|
||||
iis.readFully(palette, 0, sizeOfPalette);
|
||||
readColorPalette(sizeOfPalette);
|
||||
|
||||
metadata.palette = palette;
|
||||
metadata.paletteSize = (int)colorsUsed;
|
||||
@ -432,8 +457,7 @@ public class BMPImageReader extends ImageReader implements BMPConstants {
|
||||
// Read in the palette
|
||||
int numberOfEntries = (int)((bitmapOffset-14-size) / 4);
|
||||
int sizeOfPalette = numberOfEntries*4;
|
||||
palette = new byte[sizeOfPalette];
|
||||
iis.readFully(palette, 0, sizeOfPalette);
|
||||
readColorPalette(sizeOfPalette);
|
||||
metadata.palette = palette;
|
||||
metadata.paletteSize = numberOfEntries;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user