📄 bitmapinfotest.java
字号:
package net.sf.fmj.test.compat.sun;import java.awt.Dimension;import javax.media.format.H261Format;import javax.media.format.H263Format;import javax.media.format.JPEGFormat;import javax.media.format.RGBFormat;import javax.media.format.VideoFormat;import javax.media.format.YUVFormat;import junit.framework.TestCase;import com.sun.media.vfw.BitMapInfo;/** * * @author Ken Larson * */public class BitMapInfoTest extends TestCase{ // TODO: test all video formats:// H261Format// H263Format// IndexedColorFormat// JPEGFormat// YUVFOrmat public void testBitMapInfo8() { { BitMapInfo b = new BitMapInfo(new VideoFormat("xyz")); assertEquals(b.biBitCount, 24); assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -1); assertEquals(b.fourcc, "xyz"); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); test(b); } } public void testBitMapInfo7() { { BitMapInfo b = new BitMapInfo(new YUVFormat()); assertEquals(b.biBitCount, 24); assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -1); assertEquals(b.fourcc, "yuv"); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); test(b); } int[] yuvTypes = new int[]{ YUVFormat.YUV_411, YUVFormat.YUV_420, YUVFormat.YUV_422, YUVFormat.YUV_111, YUVFormat.YUV_YVU9, YUVFormat.YUV_YUYV, YUVFormat.YUV_SIGNED }; for (int i = 0; i < yuvTypes.length; ++i) { final int yuvType = yuvTypes[i]; //System.out.println(yuvType); // TODO: test other constructors // TODO: how to get I420? YUVFormat f = new YUVFormat(yuvType); //System.out.println(f.getEncoding()); BitMapInfo b = new BitMapInfo(f); if (yuvType == YUVFormat.YUV_411) { assertEquals(b.biBitCount, 24); assertEquals(b.fourcc, "yuv"); } else if (yuvType == YUVFormat.YUV_420) { assertEquals(b.biBitCount, 12); assertEquals(b.fourcc, "YV12"); } else if (yuvType == YUVFormat.YUV_422) { assertEquals(b.biBitCount, 24); assertEquals(b.fourcc, "yuv"); } else if (yuvType == YUVFormat.YUV_111) { assertEquals(b.biBitCount, 24); assertEquals(b.fourcc, "yuv"); } else if (yuvType == YUVFormat.YUV_YVU9) { assertEquals(b.biBitCount, 24); assertEquals(b.fourcc, "yuv"); } else if (yuvType == YUVFormat.YUV_YUYV) { assertEquals(b.biBitCount, 24); assertEquals(b.fourcc, "yuv"); } else if (yuvType == YUVFormat.YUV_SIGNED) { assertEquals(b.biBitCount, 24); assertEquals(b.fourcc, "yuv"); } assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -1); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); test(b); } } public void testBitMapInfo6() { { BitMapInfo b = new BitMapInfo(new JPEGFormat()); assertEquals(b.biBitCount, 24); assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -1); assertEquals(b.fourcc, "jpeg"); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); test(b); } } // public void testBitMapInfo5()// {// {// BitMapInfo b = new BitMapInfo(new IndexedColorFormat());// assertEquals(b.biBitCount, 24);// assertEquals(b.biWidth, 320);// assertEquals(b.biHeight, 240);// assertEquals(b.biPlanes, 1);// assertEquals(b.biSizeImage, -1);// assertEquals(b.fourcc, "h263");// assertEquals(b.biXPelsPerMeter, 0);// assertEquals(b.biYPelsPerMeter, 0);// assertEquals(b.biClrUsed, 0);// assertEquals(b.biClrImportant, 0);// assertEquals(b.extraSize, 0);// assertEquals(b.extraBytes, null);// test(b);//// }// //// } public void testBitMapInfo4() { { BitMapInfo b = new BitMapInfo(new H263Format()); assertEquals(b.biBitCount, 24); assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -1); assertEquals(b.fourcc, "h263"); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); test(b); } } public void testBitMapInfo3() { { BitMapInfo b = new BitMapInfo(new H261Format()); assertEquals(b.biBitCount, 24); assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -1); assertEquals(b.fourcc, "h261"); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); test(b); } } public void testBitMapInfo2() { { BitMapInfo b = new BitMapInfo(new RGBFormat()); assertEquals(b.biBitCount, -1); assertEquals(b.biWidth, 320); assertEquals(b.biHeight, 240); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, -2); assertEquals(b.fourcc, "RGB"); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); assertEquals(b.toString(), "Size = 320 x 240 Planes = 1 BitCount = -1 FourCC = RGB SizeImage = -2\nClrUsed = 0\nClrImportant = 0\nExtraSize = 0\n"); test(b); } } private static void dump(BitMapInfo b) { //System.out.println(b); System.out.println("[biBitCount=" + b.biBitCount); System.out.println("biWidth=" + b.biWidth); System.out.println("biHeight=" + b.biHeight); System.out.println("biPlanes=" + b.biPlanes); System.out.println("biSizeImage=" + b.biSizeImage); System.out.println("fourcc=" + b.fourcc); System.out.println("biXPelsPerMeter=" + b.biXPelsPerMeter); System.out.println("biYPelsPerMeter=" + b.biYPelsPerMeter); System.out.println("biClrUsed=" + b.biClrUsed); System.out.println("biClrImportant=" + b.biClrImportant); System.out.println("extraSize=" + b.extraSize); System.out.println("extraBytes=" + b.extraBytes + "]"); } public void testBitMapInfo1() { { BitMapInfo b = new BitMapInfo(); assertEquals(b.biBitCount, 24); assertEquals(b.biWidth, 0); assertEquals(b.biHeight, 0); assertEquals(b.biPlanes, 1); assertEquals(b.biSizeImage, 0); assertEquals(b.fourcc, ""); assertEquals(b.biXPelsPerMeter, 0); assertEquals(b.biYPelsPerMeter, 0); assertEquals(b.biClrUsed, 0); assertEquals(b.biClrImportant, 0); assertEquals(b.extraSize, 0); assertEquals(b.extraBytes, null); assertEquals(b.toString(), "Size = 0 x 0 Planes = 1 BitCount = 24 FourCC = SizeImage = 0\nClrUsed = 0\nClrImportant = 0\nExtraSize = 0\n"); test(b); final String[] fourccs = new String[]{"", "xyzq", "RGB", "YV12"}; final byte[][] extras = new byte[][]{null, new byte[]{11, 12}}; final int[] bitcounts = new int[] {8, 12, 16, 24, 32};//, 16, 24, 32}; final int[] sizes = new int[] {0, 1, 2, 3, 6, 12}; for (int k = 0; k < bitcounts.length; ++k) for (b.biWidth = 0; b.biWidth < 3; ++b.biWidth) for (b.biHeight = 0; b.biHeight < 3; ++b.biHeight) for (b.biPlanes = 0; b.biPlanes <= 2; ++b.biPlanes) //for (b.biSizeImage = 0; b.biSizeImage < 3; ++b.biSizeImage) for (int m = 0; m < sizes.length; ++m) for (int j = 0; j < extras.length; ++j) for (b.biXPelsPerMeter = 0; b.biXPelsPerMeter < 2; ++b.biXPelsPerMeter) for (b.biYPelsPerMeter = 0; b.biYPelsPerMeter < 2; ++b.biYPelsPerMeter) for (b.biClrUsed = 0; b.biClrUsed < 2; ++b.biClrUsed) for (b.biClrImportant = 0; b.biClrImportant < 3; ++b.biClrImportant) for (b.extraSize = 0; b.extraSize < 2; ++b.extraSize) for (int i = 0; i < fourccs.length; ++i) { b.biBitCount = bitcounts[k]; b.fourcc = fourccs[i]; b.extraBytes = extras[j]; b.biSizeImage = sizes[m]; test(b); { BitMapInfo b2 = new BitMapInfo(b.fourcc, b.biWidth, b.biHeight); assertEquals(b2.biBitCount, 24); assertEquals(b2.biWidth, b.biWidth); assertEquals(b2.biHeight, b.biHeight); assertEquals(b2.biPlanes, 1); if (b2.fourcc.equals("RGB")) assertEquals(b2.biSizeImage, b2.biWidth * b2.biHeight * (b2.biBitCount / 8)); // TODO else assertEquals(b2.biSizeImage, 0); assertEquals(b2.fourcc, b.fourcc); assertEquals(b2.biXPelsPerMeter, 0); assertEquals(b2.biYPelsPerMeter, 0); assertEquals(b2.biClrUsed, 0); assertEquals(b2.biClrImportant, 0); assertEquals(b2.extraSize, 0); assertEquals(b2.extraBytes, null); test(b2); } { BitMapInfo b2 = new BitMapInfo(b.fourcc, b.biWidth, b.biHeight, b.biPlanes, b.biBitCount, b.biSizeImage, b.biClrUsed, b.biClrImportant); assertEquals(b2.biBitCount, b.biBitCount); assertEquals(b2.biWidth, b.biWidth); assertEquals(b2.biHeight, b.biHeight); assertEquals(b2.biPlanes, b.biPlanes); assertEquals(b2.biSizeImage, b.biSizeImage); assertEquals(b2.fourcc, b.fourcc); assertEquals(b2.biXPelsPerMeter, 0); assertEquals(b2.biYPelsPerMeter, 0); assertEquals(b2.biClrUsed, b.biClrUsed); assertEquals(b2.biClrImportant, b.biClrImportant); assertEquals(b2.extraSize, 0); assertEquals(b2.extraBytes, null); test(b2); } } } } void test(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 VideoFormat f;// // if (j == 0)// f = b.createVideoFormat(classes[i]);// else// f = b.createVideoFormat(classes[i], frameRates[j]);// // BitMapInfo b2 = new BitMapInfo(f);// // assertEquals(b2.biBitCount, b.biBitCount);// assertEquals(b2.biWidth, b.biWidth);// assertEquals(b2.biHeight, b.biHeight);// assertEquals(b2.biPlanes, b.biPlanes);// //assertEquals(b2.biSizeImage, b.biSizeImage);// assertEquals(b2.fourcc, b.fourcc);// assertEquals(b2.biXPelsPerMeter, 0);// assertEquals(b2.biYPelsPerMeter, 0);// assertEquals(b2.biClrUsed, b.biClrUsed);// assertEquals(b2.biClrImportant, b.biClrImportant);// assertEquals(b2.extraSize, 0);// assertEquals(b2.extraBytes, null);// // } if (b.fourcc.equals("RGB")) { final RGBFormat f; if (b.biWidth == 0) continue; if (b.biHeight == 0) continue; try { if (j == 0) f = (RGBFormat) b.createVideoFormat(classes[i]); else f = (RGBFormat) b.createVideoFormat(classes[i], frameRates[j]); } catch (ArithmeticException e) { e.printStackTrace(); continue; } 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)); if (f.getBitsPerPixel() == 24) { assertEquals(f.getBlueMask(), 1); assertEquals(f.getGreenMask(), 2); assertEquals(f.getRedMask(), 3); if (classes[i] == byte[].class) { assertEquals(f.getPixelStride(), 3); assertEquals(f.getLineStride(), f.getPixelStride() * b.biWidth);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -