public static Frame ReadColumns(ByteStream stream, Header header, int[] columnOffsets, CreateArgs createArgs)
{
try {
Texture2D texture = new Texture2D(header.W, header.H, createArgs.TextureFormat, createArgs.bMipmap, false);
texture.anisoLevel = createArgs.AnisoLevel;
texture.filterMode = createArgs.FilterMode;
texture.wrapMode = createArgs.WrapMode;
Color32[] pixels = new Color32[header.W*header.H];
byte[] column = new byte[header.H];
bool bIsTransparent = (header.Transparent & 0x8) != 0;
for (int x = 0; x < header.W; ++x) {
if (columnOffsets != null) {
stream.SeekSet(columnOffsets[x]);
}
DecodeColumn(stream, column, header.Compressed);
if (createArgs.TextureFormat == TextureFormat.Alpha8) {
int pixelOfs = x;
for (int y = 0; y < header.H; ++y, pixelOfs += header.W) {
byte color = column[y];
pixels[pixelOfs] = new Color32(color, color, color, color);
}
} else {
int pixelOfs = x;
for (int y = 0; y < header.H; ++y, pixelOfs += header.W) {
byte color = column[y];
if (bIsTransparent && (color == 0)) {
pixels[pixelOfs] = PAL.Transparent;
} else {
pixels[pixelOfs] = createArgs.Pal.Colors[color];
}
}
}
}
texture.SetPixels32(pixels);
texture.Apply();
return new Frame(texture, bIsTransparent);
} catch (UnityException e) {
throw e;
}
}