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

📄 definebitslossless.java

📁 java解析flash。对于flash在java上应用非常有帮助。比如解析flash到服务器端
💻 JAVA
字号:
/*
 * JSwiff is an open source Java API for Macromedia Flash file generation
 * and manipulation
 *
 * Copyright (C) 2004-2008 Ralf Terdic (contact@jswiff.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
package com.jswiff.swfrecords.tags;

import com.jswiff.io.InputBitStream;
import com.jswiff.io.OutputBitStream;
import com.jswiff.swfrecords.BitmapData;
import com.jswiff.swfrecords.ColorMapData;
import com.jswiff.swfrecords.ZlibBitmapData;

import java.io.IOException;


/**
 * <p>
 * Defines a lossless bitmap character that contains RGB data compressed with
 * ZLIB. The following bitmap formats are supported:
 * 
 * <ul>
 * <li>
 * <i>colormapped images</i>, which use a colormap of up to 256 RGB values
 * accessed through an 8-bit index (<code>FORMAT_8_BIT_COLORMAPPED</code>)
 * </li>
 * <li>
 * <i>direct images</i> with 15 bit RGB color representation
 * (<code>FORMAT_15_BIT_RGB</code>)
 * </li>
 * <li>
 * direct images with 24 bit RGB color representation
 * (<code>FORMAT_24_BIT_RGB</code>)
 * </li>
 * </ul>
 * </p>
 *
 * @since SWF 2
 */
public final class DefineBitsLossless extends DefinitionTag {
	/** 8 bit colormapped image format */
	public static final short FORMAT_8_BIT_COLORMAPPED = 3;
	/** 15 bit direct image format */
	public static final short FORMAT_15_BIT_RGB		   = 4;
	/** 24 bit direct image format */
	public static final short FORMAT_24_BIT_RGB		   = 5;
	private short format;
	private int width;
	private int height;
	private ZlibBitmapData zlibBitmapData;

	/**
	 * Creates a new DefineBitsLossless instance.
	 *
	 * @param characterId the image's character ID
	 * @param format image format (use provided constants)
	 * @param width image width
	 * @param height image height
	 * @param zlibBitmapData image data (ZLIB compressed)
	 */
	public DefineBitsLossless(
		int characterId, short format, int width, int height,
		ZlibBitmapData zlibBitmapData) {
		code				    = TagConstants.DEFINE_BITS_LOSSLESS;
		this.characterId	    = characterId;
		this.format			    = format;
		this.width			    = width;
		this.height			    = height;
		this.zlibBitmapData     = zlibBitmapData;
	}

	DefineBitsLossless() {
		// empty
	}

	/**
	 * Sets the image format (<code>FORMAT_8_BIT_COLORMAPPED</code>,
	 * <code>FORMAT_15_BIT_RGB</code> or <code>FORMAT_24_BIT_RGB</code>)
	 *
	 * @param format image format
	 */
	public void setFormat(short format) {
		this.format = format;
	}

	/**
	 * Returns the image format (<code>FORMAT_8_BIT_COLORMAPPED</code>,
	 * <code>FORMAT_15_BIT_RGB</code> or <code>FORMAT_24_BIT_RGB</code>)
	 *
	 * @return Returns the format.
	 */
	public short getFormat() {
		return format;
	}

	/**
	 * Sets the height of the image.
	 *
	 * @param height image height
	 */
	public void setHeight(int height) {
		this.height = height;
	}

	/**
	 * Returns the image height.
	 *
	 * @return image height
	 */
	public int getHeight() {
		return height;
	}

	/**
	 * Sets the width of the image.
	 *
	 * @param width image width
	 */
	public void setWidth(int width) {
		this.width = width;
	}

	/**
	 * Returns the image width.
	 *
	 * @return image width
	 */
	public int getWidth() {
		return width;
	}

	/**
	 * Sets the ZLIB-compressed image data.
	 *
	 * @param zlibBitmapData image data
	 */
	public void setZlibBitmapData(ZlibBitmapData zlibBitmapData) {
		this.zlibBitmapData = zlibBitmapData;
	}

	/**
	 * Returns the image data (ZLIB compressed)
	 *
	 * @return image data
	 */
	public ZlibBitmapData getZlibBitmapData() {
		return zlibBitmapData;
	}

	protected void writeData(OutputBitStream outStream)
		throws IOException {
		forceLongHeader = true;
		outStream.writeUI16(characterId);
		outStream.writeUI8(format);
		outStream.writeUI16(width);
		outStream.writeUI16(height);
		if (format == FORMAT_8_BIT_COLORMAPPED) {
			int colorTableSize = ((ColorMapData) zlibBitmapData).getColorTableRGB().length;
			outStream.writeUI8((short) (colorTableSize - 1));
		}
		OutputBitStream zStream = new OutputBitStream();
		zStream.enableCompression();
		zlibBitmapData.write(zStream);
		byte[] zData = zStream.getData();
		outStream.writeBytes(zData);
	}

	void setData(byte[] data) throws IOException {
		InputBitStream inStream = new InputBitStream(data);
		characterId     = inStream.readUI16();
		format		    = inStream.readUI8();
		width		    = inStream.readUI16();
		height		    = inStream.readUI16();
		short colorTableSize = 0;
		if (format == FORMAT_8_BIT_COLORMAPPED) {
			colorTableSize = (short) (inStream.readUI8() + 1);
		}
		int zLength  = (int) (data.length - inStream.getOffset());
		byte[] zData = new byte[zLength];
		System.arraycopy(data, (int) inStream.getOffset(), zData, 0, zLength);
		InputBitStream zStream = new InputBitStream(zData);
		zStream.enableCompression();
		switch (format) {
			case FORMAT_8_BIT_COLORMAPPED:
				zlibBitmapData = new ColorMapData(
						zStream, colorTableSize, width, height);
				break;
			case FORMAT_15_BIT_RGB:
			case FORMAT_24_BIT_RGB:
				zlibBitmapData = new BitmapData(zStream, format, width, height);
				break;
			default:
				throw new IOException("Unknown bitmap format!");
		}
	}
}

⌨️ 快捷键说明

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