بسم الله الرحمن الرحيم صورة سلسلة أو بلاط / فسيفساء
-
07-07-2019 - |
سؤال
ولدي تطبيق RCP الكسوف الذي يعرض الكثير (10K +) من الصور الصغيرة بجانب بعضها البعض، مثل شريط الفيلم. لكل صورة، وأنا باستخدام كائن سبحانه وتعالى Image
. هذا يستخدم كمية زائدة من الذاكرة والموارد. أنا أبحث عن وسيلة أكثر كفاءة. فكرت في أخذ كل هذه الصور ووصل إليهم عن طريق إنشاء كائن ImageData
من إجمالي السليم، عرض متسلسلة (مع ارتفاع ثابت) واستخدام setPixel()
لبقية بكسل. ومع ذلك، فإن Palette
المستخدمة في البناء ImageData
أنا لا يمكن معرفة.
وأنا أيضا بحثت عن تبليط سبحانه وتعالى أو وظيفة الفسيفساء لخلق صورة واحدة من مجموعة من الصور، ولكن وجدت شيئا.
وأي أفكار كيف يمكنني عرض الآلاف من الصور الصغيرة بجانب بعضها البعض بكفاءة؟ يرجى ملاحظة أنه بمجرد أن يتم عرض الصور، لا يتم التلاعب بها، لذلك هذا هو تكلفة لمرة واحدة.
المحلول
ويمكنك رسم مباشرة على GC (الرسومات السياق) صورة جديدة (كبيرة). يجب وجود صورة واحدة كبيرة ينتج عنها أقل بكثير من استخدام الموارد الآلاف من الصور الصغيرة (كل صورة في سبحانه وتعالى وتبقي بعض الرسومات OS الكائن مقبض)
وماذا يمكنك أن تجرب شيء من هذا القبيل:
final List<Image> images;
final Image bigImage = new Image(Display.getCurrent(), combinedWidth, height);
final GC gc = new GC(bigImage);
//loop thru all the images while increasing x as necessary:
int x = 0;
int y = 0;
for (Image curImage : images) {
gc.drawImage(curImage, x, y);
x += curImage.getBounds().width;
}
//very important to dispose GC!!!
gc.dispose();
//now you can use bigImage
نصائح أخرى
ويفترض أن ليس كل صورة مرئية على الشاشة في وقت واحد؟ ولعل أفضل حل سيكون لتحميل فقط الصور عندما تصبح (أو على وشك أن تصبح) مرئية، التخلص منها عندما تم تمريره خارج الشاشة. ومن الواضح أن كنت تريد أن تبقي عدد قليل في الذاكرة على جانبي العرض الحالي من أجل جعل الانتقال السلس للمستخدم.
وعملت سابقا مع تطبيق جافا لخلق photomosaics، وجدت أنه من الصعب جدا تحقيق الأداء الملائم واستخدام الذاكرة باستخدام التصوير جافا (JAI) المكتبات وتعالى. على الرغم من أننا لا تستخدم ما يقرب من العديد من الصور كما ذكرتم، وطريق واحد إلى الاعتماد على المرافق خارج جافا. على وجه الخصوص، يمكن استخدام يماغيماغيك المساعدة لسطر الأوامر لغرزة معا فسيفساء الخاص بك، وتحميل الذاكرة الانتهاء من القرص. إذا كنت ترغب في الحصول على الهوى، وهناك أيضا API C ++ ليماغيماغيك، وهي فعالة جدا في الذاكرة.