Posted on 2010-06-30 17:49
S.l.e!ep.¢% 阅读(3528)
评论(0) 编辑 收藏 引用 所属分类:
Flash
bitmapdata.getpixel
方法是ActionScript
3.0中的一个新方法,可以把矩形内的像素读取成bytearray,但是这种bytearray又不能直接用loader.loadbytes来读,一
读就会出现IOERROR。
为了达到可以直接用loader.loadbytes读取的目的,找了一下
百度和GOOGLE,找到了以下方法,有需要的可以用用。
PS 以下代码转自互联网,
牛C网只负责整理
/*
Copyright (c)
2007 Trevor McCauley - www.senocular.com
Permission is hereby
granted, free of charge, to any person
obtaining a copy of this
software and associated documentation
files (the "Software"), to deal
in the Software without
restriction, including without limitation
the rights to use,
copy, modify, merge, publish, distribute,
sublicense, and/or sell
copies of the Software, and to permit persons
to whom the
Software is furnished to do so, subject to the following
conditions:
The
above copyright notice and this permission notice shall be
included
in all copies or substantial portions of the Software.
THE SOFTWARE
IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS or
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS or COPYRIGHT
HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES or OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT,
TORT or OTHERWISE, ARISING
FROM, OUT OF or IN CONNECTION WITH THE
SOFTWARE or THE USE or
OTHER DEALINGS IN THE SOFTWARE.
*/
package
com.senocular.images {
import flash.display.BitmapData;
import
flash.geom.Matrix;
import flash.utils.ByteArray;
import
flash.utils.Endian;
public class BMPEncoder {
/**
* Converts a
BitmapData instance into a 32-bit
* BMP image.
* @param bitmapData
A BitmapData instance of the image
* desired to have converted into a
Bitmap (BMP).
* @return A ByteArray containing the binary Bitmap
(BMP)
* representation of the BitmapData instance passed.
*/
public
static function encode(bitmapData:BitmapData):ByteArray {
//
image/file properties
var bmpWidth:int = bitmapData.width;
var
bmpHeight:int = bitmapData.height;
var imageBytes:ByteArray =
bitmapData.getPixels(bitmapData.rect);
var imageSize:int =
imageBytes.length;
var imageDataOffset:int = 0x36;
var
fileSize:int = imageSize + imageDataOffset;
// binary BMP data
var
bmpBytes:ByteArray = new ByteArray();
bmpBytes.endian =
Endian.LITTLE_ENDIAN; // byte order
// header information
bmpBytes.length
= fileSize;
bmpBytes.writeByte(0x42); // B
bmpBytes.writeByte(0x4D);
// M (BMP identifier)
bmpBytes.writeInt(fileSize); // file size
bmpBytes.position
= 0x0A; // offset to image data
bmpBytes.writeInt(imageDataOffset);
bmpBytes.writeInt(0x28);
// header size
bmpBytes.position = 0x12; // width, height
bmpBytes.writeInt(bmpWidth);
bmpBytes.writeInt(bmpHeight);
bmpBytes.writeShort(1);
// planes (1)
bmpBytes.writeShort(32); // color depth (32 bit)
bmpBytes.writeInt(0);
// compression type
bmpBytes.writeInt(imageSize); // image data size
bmpBytes.position
= imageDataOffset; // start of image data...
// write pixel bytes in
upside-down order
// (as per BMP format)
var col:int = bmpWidth;
var
row:int = bmpHeight;
var rowLength:int = col * 4; // 4 bytes per
pixel (32 bit)
try {
// make sure we're starting at the
//
beginning of the image data
imageBytes.position = 0;
// bottom row
up
while (row--) {
// from end of file up to imageDataOffset
bmpBytes.position
= imageDataOffset + row*rowLength;
// read through each column
writing
// those bits to the image in normal
// left to rightorder
col
= bmpWidth;
while (col--) {
bmpBytes.writeInt(imageBytes.readInt());
}
}
}catch(error:Error){
//
end of file
}
// return BMP file
return bmpBytes;
}
}
}