我的基础是the official PSD File Format documentation
我可以很好地阅读原始数据,而且我的文件都没有ZIP压缩。我只需要让RLE的东西工作。
现在,我对解压缩信息不感兴趣。我只是想读它并以压缩形式存储在内存中。我稍后会处理解压缩。
我所做的只是计算RLE数据的大小,并逐个通道地批量读取。这是我用来计算通道数据大小的函数:
使用ActionScript 3.0编写
////////////////////////////////////////////////////////////////////
// Compute RLE Data Size
////////////////////////////////////////////////////////////////////
protected function _computeRLESize( data_ : ByteArray, record_ : PSDLayerRecord ) : int
{
var numScanlines : int;
var ii : int;
var size : int;
var totalSize : int;
var pad : int;
// Compute our total time
totalSize = ( record_.bottom - record_.top ) * ( record_.right - record_.left );
// Find our number of scanlines
numScanlines = record_.bottom - record_.top;
// Initialize our size
size = 0;
// Loop through each line to see how many bytes we have
trace( "Num Scanlines: " + numScanlines );
for ( ii = 0; ii < numScanlines; ii++ )
{
pad = data_.readShort();
if ( pad % 2 != 0 ) pad++;
size += pad;
}
// Output our compression
trace( "Image is at " + size + " / " + totalSize + " compression" );
// When we're done, back up to the beginning so we can read it
data_.position -= numScanlines * 2;
// Return our size
return size + numScanlines * 2;
}
我有其他四位专业程序员和官方文档一起研究这些代码,但没有人能发现它有任何问题。
感谢您的帮助。
答案 0 :(得分:0)
您是否只想知道通道像素数据大小(关于RLE或RAW压缩)?您可以从图层记录中的频道信息中获取大小。