📄 bitmapinfotest.java
字号:
assertEquals(f.getMaxDataLength(), b.biSizeImage); } else if (classes[i] == short[].class) { assertEquals(f.getPixelStride(), 1);// if (f.getLineStride() != b.biWidth)// System.out.println(b.biWidth);// assertEquals(f.getLineStride(), b.biWidth); // 1, 2, or 3...// assertEquals(f.getLineStride(), f.getPixelStride() * b.biWidth); // TODO assertEquals(f.getMaxDataLength(), b.biSizeImage / 2); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 6); else System.out.println(b.biSizeImage); } else if (classes[i] == int[].class) { assertEquals(f.getPixelStride(), 0); //assertEquals(f.getLineStride(), f.getPixelStride() * b.biWidth); // TODO //assertEquals(f.getMaxDataLength(), 0); assertEquals(f.getMaxDataLength(), b.biSizeImage / 4); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 3); else System.out.println(b.biSizeImage); } } else if (f.getBitsPerPixel() == 32) { if (classes[i] == byte[].class) { assertEquals(f.getBlueMask(), 1); assertEquals(f.getGreenMask(), 2); assertEquals(f.getRedMask(), 3); assertEquals(f.getPixelStride(), 4); assertEquals(f.getLineStride(), f.getPixelStride() * b.biWidth); assertEquals(f.getMaxDataLength(), b.biSizeImage); } else if (classes[i] == int[].class) { assertEquals(f.getBlueMask(), 0xFF); assertEquals(f.getGreenMask(), 0xFF00); assertEquals(f.getRedMask(), 0xFF0000); assertEquals(f.getPixelStride(), 1); assertEquals(f.getLineStride(), f.getPixelStride() * b.biWidth); assertEquals(f.getMaxDataLength(), b.biSizeImage / 4); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 3); else System.out.println(b.biSizeImage); } else if (classes[i] == short[].class) { assertEquals(f.getBlueMask(), 1); assertEquals(f.getGreenMask(), 2); assertEquals(f.getRedMask(), 3); assertEquals(f.getPixelStride(), 2); assertEquals(f.getLineStride(), f.getPixelStride() * b.biWidth); assertEquals(f.getMaxDataLength(), b.biSizeImage / 2); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 6); else System.out.println(b.biSizeImage); } } else if (f.getBitsPerPixel() == 16) { assertEquals(f.getBlueMask(), 31); assertEquals(f.getGreenMask(), 992); assertEquals(f.getRedMask(), 31744); if (classes[i] == byte[].class) { assertEquals(f.getPixelStride(), 2); assertEquals(f.getMaxDataLength(), b.biSizeImage); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 2); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 6); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 12); else System.out.println(b.biSizeImage); } else if (classes[i] == short[].class) { assertEquals(f.getPixelStride(), 1); assertEquals(f.getMaxDataLength(), b.biSizeImage / 2); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 6); else System.out.println(b.biSizeImage); } else if (classes[i] == int[].class) { assertEquals(f.getPixelStride(), 0); assertEquals(f.getMaxDataLength(), b.biSizeImage / 4); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 3); else System.out.println(b.biSizeImage); } } else if (f.getBitsPerPixel() == 8 || f.getBitsPerPixel() == 12) { assertEquals(f.getBlueMask(), -1); assertEquals(f.getGreenMask(), -1); assertEquals(f.getRedMask(), -1); if (classes[i] == byte[].class) { assertEquals(f.getPixelStride(), 1); assertEquals(f.getMaxDataLength(), b.biSizeImage); // same as 16-bit if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 2) { //dump(b); assertEquals(f.getMaxDataLength(), 2); } else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 6); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 12); else System.out.println(b.biSizeImage); } else if (classes[i] == short[].class) { assertEquals(f.getPixelStride(), 0); // same as 16-bit: ?? assertEquals(f.getMaxDataLength(), b.biSizeImage / 2); if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 6); else System.out.println(b.biSizeImage); } else if (classes[i] == int[].class) { assertEquals(f.getPixelStride(), 0); assertEquals(f.getMaxDataLength(), b.biSizeImage / 4); // same as 16-bit: if (b.biSizeImage == 0) { //dump(b); assertEquals(f.getMaxDataLength(), 0); } else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) { //dump(b); assertEquals(f.getMaxDataLength(), 0); } else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 3); else System.out.println(b.biSizeImage); } } else { assertEquals(f.getBlueMask(), -1); assertEquals(f.getGreenMask(), -1); assertEquals(f.getRedMask(), -1); assertEquals(f.getPixelStride(), 0); // TODO: 0 or 1 //assertEquals(f.getMaxDataLength(), -2); // TODO: -1 or -2 if (classes[i] == byte[].class) { assertEquals(f.getMaxDataLength(), b.biSizeImage); // same as 16-bit, except -2 case is new if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 2); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 6); else if (b.biSizeImage == -2) assertEquals(f.getMaxDataLength(), -2); else System.out.println(b.biSizeImage); } else if (classes[i] == short[].class) { assertEquals(f.getMaxDataLength(), b.biSizeImage / 2);// same as 16-bit: assertEquals(f.getMaxDataLength(), -1); } else if (classes[i] == int[].class) { assertEquals(f.getMaxDataLength(), b.biSizeImage / 4); // same as 16-bit:, except -2 case is new if (b.biSizeImage == 0) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 1) assertEquals(f.getMaxDataLength(), 0); else if (b.biSizeImage == 2) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 3) assertEquals(f.getMaxDataLength(), 1); else if (b.biSizeImage == 6) assertEquals(f.getMaxDataLength(), 3); else if (b.biSizeImage == 12) assertEquals(f.getMaxDataLength(), 6); else if (b.biSizeImage == -2) assertEquals(f.getMaxDataLength(), 0); else System.out.println("X" + b.biSizeImage); } } assertEquals(f.getEndian(), 1); assertEquals(f.getFlipped(), 1); //assertEquals(f.getLineStride(), -40); // TODO: varies, sometimes -40, sometimes -20 } else if (b.fourcc.equals("YV12")) { final YUVFormat f; if (j == 0) f = (YUVFormat) b.createVideoFormat(classes[i]); else f = (YUVFormat) b.createVideoFormat(classes[i], frameRates[j]); assertEquals(f.getEncoding(), "yuv"); assertEquals(f.getYuvType(), YUVFormat.YUV_420); assertEquals(f.getDataType(), byte[].class); assertEquals(f.getFrameRate(), j == 0 ? -1.f : frameRates[j]); assertEquals(f.getSize(), new Dimension(b.biWidth, b.biHeight)); assertEquals(f.getMaxDataLength(), b.biSizeImage); // sometimes 0 assertEquals(f.getOffsetY(), 0); assertEquals(f.getOffsetU(), b.biWidth * b.biHeight + (b.biWidth * b.biHeight) / 4); // empirically determined //320x240: 96000 // 96000 - 76800 = 19200. 96000 / 76800 = 1.25 // assertEquals(f.getOffsetV(), b.biWidth * b.biHeight); assertEquals(f.getStrideUV(), b.biWidth / 2); assertEquals(f.getStrideY(), b.biWidth); } else { final com.sun.media.format.AviVideoFormat f; if (j == 0) f = (com.sun.media.format.AviVideoFormat) b.createVideoFormat(classes[i]); else f = (com.sun.media.format.AviVideoFormat) b.createVideoFormat(classes[i], frameRates[j]); assertEquals(f.getEncoding(), b.fourcc); assertEquals(f.getBitsPerPixel(), b.biBitCount); assertEquals(f.getClrImportant(), b.biClrImportant); assertEquals(f.getClrUsed(), b.biClrUsed); assertEquals(f.getCodecSpecificHeader(), b.extraBytes); assertEquals(f.getDataType(), classes[i]); assertEquals(f.getFrameRate(), j == 0 ? -1.f : frameRates[j]); assertEquals(f.getImageSize(), b.biSizeImage); assertEquals(f.getMaxDataLength(), b.biSizeImage); assertEquals(f.getPlanes(), b.biPlanes); assertEquals(f.getSize(), new Dimension(b.biWidth, b.biHeight)); assertEquals(f.getXPelsPerMeter(), b.biXPelsPerMeter); assertEquals(f.getYPelsPerMeter(), b.biYPelsPerMeter); } } } void testRGBFormat(BitMapInfo b) { Class[] classes = new Class[] {byte[].class, short[].class, int[].class}; float[] frameRates = new float[] {-2.f, -1.f, 0.f}; for (int i = 0; i < classes.length; ++i) for (int j = 0; j < frameRates.length; ++j) { final RGBFormat f; if (j == 0) f = (RGBFormat) b.createVideoFormat(classes[i]); else f = (RGBFormat) b.createVideoFormat(classes[i], frameRates[j]); assertEquals(f.getEncoding(), b.fourcc.toLowerCase()); assertEquals(f.getBitsPerPixel(), b.biBitCount); assertEquals(f.getDataType(), classes[i]); assertEquals(f.getFrameRate(), j == 0 ? -1.f : frameRates[j]); //assertEquals(f.getMaxDataLength(), -2); // TODO: sometimes -1, sometimes -2 assertEquals(f.getSize(), new Dimension(b.biWidth, b.biHeight)); } } private void assertEquals(float f1, float f2) { assertTrue(f1 == f2); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -