mirror of
https://github.com/BlackMATov/unity-flash-tools.git
synced 2025-12-16 22:19:31 +07:00
palette bitmaps support
This commit is contained in:
@@ -193,5 +193,9 @@ namespace FTSwfTools {
|
||||
target.Position = 0;
|
||||
return target;
|
||||
}
|
||||
|
||||
static public SwfStreamReader DecompressZBytesToReader(byte[] compressd_bytes) {
|
||||
return new SwfStreamReader(DecompressZBytes(compressd_bytes));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace FTSwfTools.SwfTags {
|
||||
using FTSwfTools.SwfTypes;
|
||||
|
||||
namespace FTSwfTools.SwfTags {
|
||||
public class DefineBitsLossless2Tag : SwfTagBase {
|
||||
public ushort CharacterId;
|
||||
public byte BitmapFormat;
|
||||
@@ -36,10 +38,29 @@
|
||||
}
|
||||
|
||||
public byte[] ToARGB32() {
|
||||
var result = new byte[BitmapWidth * BitmapHeight * 4];
|
||||
var swf_reader = new SwfStreamReader(
|
||||
SwfStreamReader.DecompressZBytes(ZlibBitmapData));
|
||||
if ( BitmapFormat == 5 ) {
|
||||
var result = new byte[BitmapWidth * BitmapHeight * 4];
|
||||
var swf_reader = SwfStreamReader.DecompressZBytesToReader(ZlibBitmapData);
|
||||
if ( BitmapFormat == 3 ) {
|
||||
var palette = new SwfColor[BitmapColorTableSize];
|
||||
for ( var i = 0; i < palette.Length; ++i ) {
|
||||
palette[i] = SwfColor.Read(swf_reader, true);
|
||||
}
|
||||
var palette_pitch = BitmapWidth % 4 == 0
|
||||
? BitmapWidth
|
||||
: BitmapWidth + (4 - BitmapWidth % 4);
|
||||
var palette_indices = swf_reader.ReadRest();
|
||||
for ( var i = 0; i < BitmapHeight; ++i ) {
|
||||
for ( var j = 0; j < BitmapWidth; ++j ) {
|
||||
var result_index = j + i * BitmapWidth;
|
||||
var palette_index = palette_indices[j + i * palette_pitch];
|
||||
var palette_color = palette[palette_index];
|
||||
result[result_index * 4 + 0] = palette_color.A;
|
||||
result[result_index * 4 + 1] = palette_color.R;
|
||||
result[result_index * 4 + 2] = palette_color.G;
|
||||
result[result_index * 4 + 3] = palette_color.B;
|
||||
}
|
||||
}
|
||||
} else if ( BitmapFormat == 5 ) {
|
||||
for ( var i = 0; i < BitmapWidth * BitmapHeight; ++i ) {
|
||||
var pix32 = swf_reader.ReadUInt32();
|
||||
result[i * 4 + 0] = (byte)((pix32 ) & 0xFF);
|
||||
@@ -48,9 +69,9 @@
|
||||
result[i * 4 + 3] = (byte)((pix32 >> 24) & 0xFF);
|
||||
}
|
||||
} else {
|
||||
//TODO: IMPLME
|
||||
throw new System.Exception(string.Format(
|
||||
"Unsupported DefineBitsLossless2 Format: {0}", BitmapFormat));
|
||||
"Incorrect DefineBitsLossless2 format: {0}",
|
||||
BitmapFormat));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace FTSwfTools.SwfTags {
|
||||
using FTSwfTools.SwfTypes;
|
||||
|
||||
namespace FTSwfTools.SwfTags {
|
||||
public class DefineBitsLosslessTag : SwfTagBase {
|
||||
public ushort CharacterId;
|
||||
public byte BitmapFormat;
|
||||
@@ -36,10 +38,29 @@
|
||||
}
|
||||
|
||||
public byte[] ToARGB32() {
|
||||
var result = new byte[BitmapWidth * BitmapHeight * 4];
|
||||
var swf_reader = new SwfStreamReader(
|
||||
SwfStreamReader.DecompressZBytes(ZlibBitmapData));
|
||||
if ( BitmapFormat == 5 ) {
|
||||
var result = new byte[BitmapWidth * BitmapHeight * 4];
|
||||
var swf_reader = SwfStreamReader.DecompressZBytesToReader(ZlibBitmapData);
|
||||
if ( BitmapFormat == 3 ) {
|
||||
var palette = new SwfColor[BitmapColorTableSize];
|
||||
for ( var i = 0; i < palette.Length; ++i ) {
|
||||
palette[i] = SwfColor.Read(swf_reader, false);
|
||||
}
|
||||
var palette_pitch = BitmapWidth % 4 == 0
|
||||
? BitmapWidth
|
||||
: BitmapWidth + (4 - BitmapWidth % 4);
|
||||
var palette_indices = swf_reader.ReadRest();
|
||||
for ( var i = 0; i < BitmapHeight; ++i ) {
|
||||
for ( var j = 0; j < BitmapWidth; ++j ) {
|
||||
var result_index = j + i * BitmapWidth;
|
||||
var palette_index = palette_indices[j + i * palette_pitch];
|
||||
var palette_color = palette[palette_index];
|
||||
result[result_index * 4 + 0] = palette_color.A;
|
||||
result[result_index * 4 + 1] = palette_color.R;
|
||||
result[result_index * 4 + 2] = palette_color.G;
|
||||
result[result_index * 4 + 3] = palette_color.B;
|
||||
}
|
||||
}
|
||||
} else if ( BitmapFormat == 5 ) {
|
||||
for ( var i = 0; i < BitmapWidth * BitmapHeight; ++i ) {
|
||||
var pix24 = swf_reader.ReadUInt32();
|
||||
result[i * 4 + 0] = 255;
|
||||
@@ -48,9 +69,9 @@
|
||||
result[i * 4 + 3] = (byte)((pix24 >> 24) & 0xFF);
|
||||
}
|
||||
} else {
|
||||
//TODO: IMPLME
|
||||
throw new System.Exception(string.Format(
|
||||
"Unsupported DefineBitsLossless Format: {0}", BitmapFormat));
|
||||
"Incorrect DefineBitsLossless format: {0}",
|
||||
BitmapFormat));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user