⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmapinfo.java

📁 FMJ(freedom media for java)是java视频开发的新选择
💻 JAVA
字号:
package com.sun.media.vfw;import java.awt.Dimension;import javax.media.format.RGBFormat;import javax.media.format.VideoFormat;import javax.media.format.YUVFormat;import com.sun.media.format.AviVideoFormat;/** *  * @author Ken Larson * */public class BitMapInfo{	public int biWidth;	public int biHeight;	public int biPlanes;	public int biBitCount;	public String fourcc;	public int biSizeImage;	public int biXPelsPerMeter;	public int biYPelsPerMeter;	public int biClrUsed;	public int biClrImportant;	public int extraSize;	public byte[] extraBytes;		public BitMapInfo()	{		this.fourcc = "";		this.biPlanes = 1;		this.biBitCount = 24;			}		public BitMapInfo(String fourcc, int width, int height)	{		this.fourcc = fourcc;		this.biPlanes = 1;		this.biBitCount = 24;		this.biWidth = width;		this.biHeight = height;				if (fourcc.equals("RGB"))		{			this.biSizeImage = biWidth * biHeight * (biBitCount / 8);		}			}	public BitMapInfo(String fourcc, int width, int height, int planes, int bitcount, int sizeImage, int clrused, int clrimportant)	{		this.fourcc = fourcc;		this.biPlanes = planes;		this.biBitCount = bitcount;		this.biWidth = width;		this.biHeight = height;		this.biSizeImage = sizeImage;		this.biClrUsed = clrused;		this.biClrImportant = clrimportant;	}		public BitMapInfo(VideoFormat format)	{		if (format instanceof RGBFormat)		{			final RGBFormat fCast = (RGBFormat) format;			this.fourcc = fCast.getEncoding().toUpperCase();			this.biPlanes = 1;			this.biBitCount = fCast.getBitsPerPixel();			if (fCast.getSize() == null)			{				this.biWidth = 320;				this.biHeight = 240;			}			else			{				this.biWidth = fCast.getSize().width;				this.biHeight = fCast.getSize().height;			}			if (biBitCount == -1)				this.biSizeImage = -2;			else				this.biSizeImage = biWidth * biHeight * (biBitCount / 8);			this.biClrUsed = 0;			this.biClrImportant = 0;		}		else if (format instanceof AviVideoFormat)		{			final AviVideoFormat fCast = (AviVideoFormat) format;			this.fourcc = fCast.getEncoding();			this.biPlanes = fCast.getPlanes();			this.biBitCount = fCast.getBitsPerPixel();			this.biWidth = fCast.getSize().width;			this.biHeight = fCast.getSize().height;			this.biSizeImage = fCast.getImageSize();			this.biClrUsed = fCast.getClrUsed();			this.biClrImportant = fCast.getClrImportant();		}		else if (format instanceof YUVFormat)		{			final YUVFormat fCast = (YUVFormat) format;			if (fCast.getYuvType() == YUVFormat.YUV_420)			{	this.fourcc = "YV12";				this.biBitCount = 12;			}			else			{				this.fourcc = format.getEncoding();				this.biBitCount = 24;			}						// TODO: what if size is set?			this.biWidth = 320;			this.biHeight = 240;			this.biPlanes = 1;			this.biSizeImage = -1;		}		else		{			this.fourcc = format.getEncoding();			this.biBitCount = 24;//			 TODO: what if size is set?			this.biWidth = 320;			this.biHeight = 240;			this.biPlanes = 1;			this.biSizeImage = -1;		}	}		public VideoFormat createVideoFormat(Class arrayType)	{	return createVideoFormat(arrayType, -1.f);	}		public VideoFormat createVideoFormat(Class arrayType, float frameRate)	{			if (fourcc.equals("RGB"))		{				final int red, green, blue;			final int pixelStride;			final int lineStride;			final int maxDataLength;						// TODO: this was determined by black-box testing, so we may have missed some cases.						if (biBitCount == 32)			{				if (arrayType == int[].class)				{					red = 0xFF0000;					green = 0xFF00;					blue = 0xFF;				}				else				{					red = 3;					green = 2;					blue = 1;				}			}			else if (biBitCount == 24)			{	red = 3;				green = 2;				blue = 1;			}			else if (biBitCount == 16)			{					red = 31744;				green = 992;				blue = 31;			}			else			{	red = green = blue = -1;			}						if (arrayType == int[].class)			{				pixelStride = biBitCount / 32;				maxDataLength = biSizeImage / 4;			}			else if (arrayType == byte[].class)			{					pixelStride = biBitCount / 8;				maxDataLength = biSizeImage;			}			else if (arrayType == short[].class)			{					pixelStride = biBitCount / 16;				maxDataLength = biSizeImage / 2;							}			else			{	pixelStride = 0;				maxDataLength = 0;				throw new IllegalArgumentException();			}						lineStride = pixelStride * biWidth;						// TODO: other biBitCount values?																return new RGBFormat(new Dimension(biWidth, biHeight),					maxDataLength,					arrayType,					frameRate,					biBitCount, 					red, 					green, 					blue, 					pixelStride,  					lineStride,  					1,  // flipped, 					1  //  endian					);				}		else if (fourcc.equals("YV12"))		{			return new YUVFormat(new Dimension(biWidth, biHeight), 					biSizeImage, 					byte[].class,					frameRate,					YUVFormat.YUV_420,					biWidth,	// stride y					biWidth / 2, // stride uv					0, // offset y					biWidth *  biHeight + (biWidth *  biHeight) / 4, // offset u					biWidth *  biHeight // offset v					);							}		else if (fourcc.equals("I420"))		{			return new YUVFormat(new Dimension(biWidth, biHeight), 					biSizeImage, 					byte[].class,					frameRate,					YUVFormat.YUV_420,					biWidth,	// stride y					biWidth / 2, // stride uv					0, // offset y					// u/v offsts swapped from YV12: (empirically determined)					biWidth *  biHeight, // offset u					biWidth *  biHeight + (biWidth *  biHeight) / 4 // offset v					);							}		else		{	return new AviVideoFormat(fourcc, new Dimension(biWidth, biHeight), biSizeImage, arrayType, frameRate, biPlanes, biBitCount, biSizeImage, biXPelsPerMeter, biYPelsPerMeter, biClrUsed, biClrImportant, extraBytes);		}			}		public String toString()	{	return "Size = " + biWidth + " x " + biHeight + "	Planes = " + biPlanes + "	BitCount = " + biBitCount + "	FourCC = " + fourcc + "	SizeImage = " + biSizeImage + "\nClrUsed = " + biClrUsed + "\nClrImportant = " + biClrImportant + "\nExtraSize = " + extraSize + "\n";	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -