كيف ترى بالفعل صورة نقطية مأخوذة من تفريغ كومة الذاكرة المؤقتة لنظام Android

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

  •  09-12-2019
  •  | 
  •  

سؤال

أثناء عملية تتبع مشكلات الذاكرة الخطيرة في تطبيقي، نظرت إلى العديد من عمليات تفريغ الكومة من تطبيقي، وفي معظم الأوقات لدي صورة نقطية ضخمة لا أعرف عنها.

يستغرق الأمر 9.4 ميجابايت، أو 9,830,400 بايت، أو في الواقع صورة بحجم 1280 × 1920 بمعدل 4 بايت لكل بكسل.

لقد تحققت من Eclipse MAT، فهو بالفعل بايت [9830400]، يحتوي على مرجع وارد واحد وهو android.graphics.Bitmap.

أرغب في تفريغ هذا في ملف ومحاولة رؤيته.لا أستطيع أن أفهم من أين يأتي.أكبر صورة لدي في جميع رسوماتي هي 640 × 960 png، والتي تستغرق أقل من 3 ميجابايت.

حاولت استخدام Eclipse "لنسخ القيمة إلى ملف"، لكنني أعتقد أنه ببساطة يطبع المخزن المؤقت إلى الملف، ولا أعرف أي برنامج صور يمكنه قراءة تدفق من البايتات وعرضه على هيئة 4 بايت لكل بكسل صورة.

اي فكرة؟

إليك ما حاولت:قم بتفريغ مصفوفة البايت إلى ملف، وادفعها إلى /sdcard/img، وقم بتحميل نشاط مثل هذا:

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        final File inputFile = new File("/sdcard/img");
        final FileInputStream isr = new FileInputStream(inputFile);
        final Bitmap bmp = BitmapFactory.decodeStream(isr);
        ImageView iv = new ImageView(this);
        iv.setImageBitmap(bmp);
        setContentView(iv);
        Log.d("ImageTest", "Image was inflated");
    } catch (final FileNotFoundException e) {
        Log.d("ImageTest", "Image was not inflated");
    }
}

لم أرى أي شيء.

هل تعرف كيف تم تشفير الصورة؟لنفترض أنه تم تخزينه في byte[] buffer. buffer[0] أحمر، buffer[1] أخضر، الخ؟

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

المحلول 2

حسنا - بعد بعض المحاولات غير الناجحة، أحصلت أخيرا على شيء من هذه الصفيف البايت.كتب هذا البرنامج C بسيط لتحويل صفيف البايت إلى ملف نقطي Windows.أنا أسقط الرمز في حالة شخص ما مهتم.
قمت بتجميع هذا على VisualC 6.0 و GCC 3.4.4، يجب أن تعمل على أي نظام تشغيل (تم اختباره على Windows و Linux و MacOS X). giveacodicetagpre.

لذلك باستخدام هذه الأداة، كنت قادرا على التعرف على الصورة المستخدمة لتوليد هذه الصورة النقطية 1280x1920.

نصائح أخرى

انظر هنا للحصول على إجابة أسهل: حصيرة (Eclipse Memory Analyzer) - كيفية عرض الصور النقطية من تفريغ الذاكرة

tl؛ Dr - تثبيت Gimp وتحميل الصورة باسم RGB Alpha

لقد وجدت أنه بدءًا من الإصدار الأحدث من Android Studio (2.2.2 حتى وقت كتابة هذا التقرير)، يمكنك عرض ملف الصورة النقطية مباشرةً:

  1. افتح علامة التبويب "Android Monitor" (في أسفل اليسار) ثم علامة التبويب "الذاكرة".
  2. اضغط على زر "تفريغ Java Heap".

  3. اختر اسم فئة "الصورة النقطية" لللقطة الحالية، وحدد كل مثيل للصورة النقطية واعرض الصورة التي تستهلك ذاكرة أكثر من المتوقع بالضبط.(الشاشات 4 و 5)

  4. اختر ال Bitmap اسم الصف…

enter image description here

  1. حدد كل مثيل للصورة النقطية

enter image description here

وانقر بزر الماوس الأيمن عليه، حدد View Bitmap

enter image description here

فقط تأخذ الإدخال إلى الصورة وتحويله إلى كائن نقطي باستخدام دفق FileINPUT / DataStream.أضف أيضا سجلات لرؤية البيانات لكل صورة يتم استخدامها.

يمكنك تمكين اتصال USB ونسخ الملف إلى جهاز كمبيوتر آخر به المزيد من الأدوات للتحقيق.

يمكن تكوين بعض الأجهزة لتفريغ الشاشة الحالية لنظام الملفات عند الضغط على زر البدء.ربما يحدث هذا لك.

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