Чтение RLE-сжатого слоя файла Photoshop (PSD) - PullRequest
0 голосов
/ 02 июля 2011

Я основываюсь на официальной документации формата файлов 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;
}

У меня было четыре других профессиональных программиста, которые изучали этот код вместе софициальная документация, и никто из них не может найти ничего плохого в этом.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 17 ноября 2011

Вы просто хотите узнать размер данных пикселя канала (относительно сжатия RLE или RAW)?Вы можете получить размер из информации о каналах в записи слоя.

...