خطأ EOF الذي تمت مواجهته أثناء تحويل BYTEARRAY إلى BITMAPDATA

StackOverflow https://stackoverflow.com/questions/2469511

سؤال

انا استخدم

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

في السطر الرابع في الكود أعلاه ، أحصل على "خطأ: خطأ #2030: تمت مواجهة نهاية الملف." راجعت الطول التابع بكسل الكائن الذي هو 4 مرات عرض ارتفاع التابع المستقيم هدف. بشرط setPixels () تقرأ الوظائف int غير موقعة من BytearRay وتحدد هذه القيمة إلى وحدات البكسل ، وأعتقد أنها يجب أن تنجح.

لكن ليس لدي أدنى فكرة عن سبب عدم عمل هذا. ال بكسل يتم ملء الكائن بعد فك تشفير البيانات التي أحصل عليها من الخادم.

هل هناك أي عمل أو أي طريقة أخرى يمكنني محاولة استخدامها. لن تعمل فئة Loader لأن البيانات التي أحصل عليها من الخادم ليست في أي من التنسيق المعترف به.

أي مساعدة يحظى بتقدير كبير.

شرير

شكرًا.

هل كانت مفيدة؟

المحلول

يمكنك الحصول على خطأ 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);

نصائح أخرى

كما اكتشفت أن الكود التالي يعمل:

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 ثم حاول ضبط البكسلات ، يلقي الخطأ المذكور أعلاه. حتى أكثر حيرة الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top