Обнаружен конец файла. в flash.display::BitmapData/setPixels()

Я пытаюсь загрузить файл png из библиотеки в растровые данные, но при попытке сделать это получаю ошибку EOF.

Обнаружен конец файла. в flash.display::BitmapData/setPixels()

Я добавил комментарии со значениями, используемыми в приведенном ниже коде.

var bitmapData_texture:BitmapData = new BitmapData(image.width, image.height, true, 0x0);
bitmapData_texture.draw(image);
var pixels:ByteArray = bitmapData_texture.getPixels(rect_bmp);
var bitmapData:BitmapData = new BitmapData(rect_bmp.width,rect_bmp.height,true,0x0);
trace("image width : "+image.width.toString());       //image width : 161
trace("image height: "+image.height.toString());      //image height: 171
trace("rect x      : "+rect_bmp.x.toString());        //rect x      : 0
trace("rect y      : "+rect_bmp.y.toString());        //rect y      : 0
trace("rect width  : "+rect_bmp.width.toString());    //rect width  : 161
trace("rect height : "+rect_bmp.height.toString());   //rect height : 2
trace("bmpd width  : "+bitmapData.width.toString());  //bmpd width  : 161
trace("bmpd height : "+bitmapData.height.toString()); //bmpd height : 2
bitmapData.setPixels(rect_bmp,pixels);

person David W. Allor    schedule 15.12.2012    source источник
comment
Самый простой способ использовать библиотечное изображение в качестве BitmapData — преобразовать его в растровое изображение и экспортировать для ActionScript. Это делает его преобразование ненужным, но я понимаю, что это создаст swf большего размера. Итак, теперь у меня есть bitmapData_texture = new tile(0,0); где tile — это класс BitmapData в библиотеке.   -  person David W. Allor    schedule 16.12.2012
comment
На самом деле, я все еще получаю ту же ошибку, даже когда я получаю доступ к BitmapData непосредственно из библиотеки и пытаюсь скопировать пиксели в другое растровое изображение, заменив первую строку моего кода выше на bitmapData_texture = new tile(0,0) и удалив строка .draw(изображение).   -  person David W. Allor    schedule 16.12.2012


Ответы (1)


Я не вижу ничего плохого в (опубликованном) коде. Вы можете попробовать отследить информацию byteArray сразу после вызова getPixels. может дать представление о проблеме?

//should be 4 bytes for every pixel in byteArray; so 4x161x2 = 1288
trace(pixels.length);
//should be at start of byteArray; so 0
trace(pixels.position);
//if position=0, this should be same as length
trace(pixels.bytesAvailable);

Кстати, я не согласен с комментариями Nallaths — вы действительно можете загружать PNG напрямую из библиотеки (или через URL-адрес), не беспокоясь о сжатии.

person Community    schedule 16.12.2012
comment
Pixel.position — 1288, конец массива. Я добавил Pixels.position=0 и ошибка исчезла. благодаря. - person David W. Allor; 16.12.2012