下面列出了java.awt.image.DataBuffer#getElem() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static ByteProcessor createBuffer (BufferedImage img)
{
DataBuffer dataBuffer = img.getData().getDataBuffer();
ByteProcessor buf = new ByteProcessor(img.getWidth(), img.getHeight());
for (int y = 0, h = img.getHeight(); y < h; y++) {
for (int x = 0, w = img.getWidth(); x < w; x++) {
int index = x + (y * w);
int elem = dataBuffer.getElem(index);
// ShapeSymbol instances use alpha channel as the pixel level
// With 0 as totally transparent so background (255)
// And with 255 as totally opaque so foreground (0)
int val = 255 - (elem >>> 24);
buf.set(x, y, val);
}
}
// binarize
buf.threshold(216);
return buf;
}
private static Image makeTestImage(DataBuffer dataBuffer, ColorModel colorModel, int w, int h, int transIdx) {
// DataBufferByte dataBufferByte = null;
// if (dataBuffer instanceof DataBufferByte) {
// dataBufferByte = (DataBufferByte) dataBuffer;
// } else {
// System.out.println("No DataBufferByte");
// }
// byte data[] = dataBufferByte.getData();
BufferedImage buf = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
int arrayIndex = x + y * w;
// int colorIndex = Byte.toUnsignedInt(data[arrayIndex]);
int colorIndex = dataBuffer.getElem(arrayIndex);
if (transIdx == colorIndex) {
buf.setRGB(x, y, Color.RED.getRGB()); // 0xFF_FF_00_00);
} else {
buf.setRGB(x, y, colorModel.getRGB(colorIndex));
}
}
}
return buf;
}
private float[] getData41(RandomAccessFile raf, Grib2Drs.Type0 gdrs) throws IOException {
int nb = gdrs.numberOfBits;
int D = gdrs.decimalScaleFactor;
float DD = (float) java.lang.Math.pow((double) 10, (double) D);
float R = gdrs.referenceValue;
int E = gdrs.binaryScaleFactor;
float EE = (float) java.lang.Math.pow(2.0, (double) E);
// LOOK: can # datapoints differ from bitmap and data ?
// dataPoints are number of points encoded, it could be less than the
// totalNPoints in the grid record if bitMap is used, otherwise equal
float[] data = new float[totalNPoints];
// no data to decode, set to reference value
if (nb == 0) {
Arrays.fill(data, R);
return data;
}
// Y * 10**D = R + (X1 + X2) * 2**E
// E = binary scale factor
// D = decimal scale factor
// R = reference value
// X1 = 0
// X2 = scaled encoded value
// data[ i ] = (R + ( X1 + X2) * EE)/DD ;
byte[] buf = new byte[dataLength - 5];
raf.readFully(buf);
InputStream in = new ByteArrayInputStream(buf);
BufferedImage image = ImageIO.read(in);
if (nb != image.getColorModel().getPixelSize()) {
logger.debug("PNG pixel size {} disagrees with grib number of bits {}", image.getColorModel().getPixelSize(), nb);
}
DataBuffer db = image.getRaster().getDataBuffer();
if (bitmap == null) {
for (int i = 0; i < dataNPoints; i++) {
data[i] = (R + db.getElem(i) * EE) / DD;
}
} else {
for (int bitPt = 0, dataPt = 0; bitPt < totalNPoints; bitPt++) {
if (GribNumbers.testBitIsSet(bitmap[bitPt / 8], bitPt % 8)) {
data[bitPt] = (R + db.getElem(dataPt++) * EE) / DD;
} else {
data[bitPt] = staticMissingValue;
}
}
}
return data;
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public static boolean equals(BufferedImage image1, BufferedImage image2) {
final int image1Width = image1.getWidth();
final int image1Height = image1.getHeight();
final int image2Width = image2.getWidth();
final int image2Height = image2.getHeight();
if (image1Width != image2Width || image1Height != image2Height)
return false;
final DataBuffer image1Buffer = image1.getData().getDataBuffer();
final DataBuffer image2Buffer = image2.getData().getDataBuffer();
final int image1BufferSize = image1Buffer.getSize();
final int image2BufferSize = image2Buffer.getSize();
if (image1BufferSize != image2BufferSize)
return false;
if (image1Buffer instanceof DataBufferInt && image2Buffer instanceof DataBufferInt) {
// compare according to https://stackoverflow.com/a/11006984
final DataBufferInt image1BufferInt = (DataBufferInt) image1Buffer;
final DataBufferInt image2BufferInt = (DataBufferInt) image2Buffer;
if (image1BufferInt.getNumBanks() != image2BufferInt.getNumBanks())
return false;
for (int bank = 0; bank < image1BufferInt.getNumBanks(); bank++) {
int[] actual = image1BufferInt.getData(bank);
int[] expected = image2BufferInt.getData(bank);
if (!Arrays.equals(actual, expected))
return false;
}
} else {
// compare according to https://stackoverflow.com/a/51497360
for (int i = 0; i < image1BufferSize; i++) {
if (image1Buffer.getElem(i) != image2Buffer.getElem(i)) {
return false;
}
}
}
//for (int x = 0; x < image1Width; x++) {
// for (int y = 0; y < image1Height; y++) {
// if (image1.getRGB(x, y) != image2.getRGB(x, y)) {
// return false;
// }
// }
//}
return true;
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}
public void runTest(Object context, int numReps) {
DataBuffer db = ((Context) context).db;
do {
db.getElem(numReps&7);
} while (--numReps > 0);
}