Ошибка EOF при преобразовании байтового массива в битовые данные - PullRequest
0 голосов
/ 18 марта 2010

Я использую

var bitmapdata:BitmapData=new BitmapData();
var pixels:Bytearray=new Bytearray();
pixels = rleDecodePixles();
bitmapdata.setPixels(bitmapdata.rect, pixels);

В 4-й строке кода выше я получаю сообщение «Ошибка: Ошибка № 2030: обнаружен конец файла». Я проверил длина объекта пикселей , который в 4 раза больше ширина * высота объекта rect . Учитывая, что функции setPixels () считывают unsigned int из bytearray и устанавливают это значение в пикселях, я думаю, это должно работать.

Но я понятия не имею, почему это не сработает. Объект пикселей заполняется после RLE-декодирования данных, которые я получаю с сервера.

Есть ли какой-нибудь обходной путь или любой другой метод, который я мог бы попытаться использовать. Класс загрузчика не будет работать, так как данные, которые я получаю с сервера, не находятся ни в одном из распознанных форматов.

Любая помощь очень ценится.

Shrikant

Спасибо.

Ответы [ 2 ]

13 голосов
/ 25 марта 2010

Вы получаете ошибку EOF от ByteArray, когда вы пытаетесь переместить его указатель за пределы последней доступной позиции. Когда вы заполняете свой ByteArray, вы фактически перемещаете его указатель, поэтому прежде чем вы сможете что-либо с ним сделать, вам нужно сбросить его положение.

Попробуйте:

var bitmapdata:BitmapData=new BitmapData();
var pixels:Bytearray=new Bytearray();
pixels = rleDecodePixles();
pixels.position = 0; // Reset ByteArray pointer
bitmapdata.setPixels(bitmapdata.rect, pixels);
0 голосов
/ 19 марта 2010

Также я только что узнал, что работает следующий код:

bitmap.object.setPixels(bitmap.object.rect, bitmap.createPixels(width, height));

function creatPixels(width:int,height:int):Bytearray
{
   var result:Bytearray=new Bytearray();
    result.length=(width*height)<<2;
    return result;
}

Но после того, как я изменил bytearray, а затем попытался установить пиксели, он выдает вышеупомянутую ошибку. теперь еще больше запутался.

...