Я основываюсь на официальной документации формата файлов PSD
Я могу отлично читать необработанные данные, и ни один из моих файлов не имеет сжатия 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;
}
У меня было четыре других профессиональных программиста, которые изучали этот код вместе софициальная документация, и никто из них не может найти ничего плохого в этом.
Спасибо за любую помощь.