صور جافا مع قناة ألفا دون استخدام صورة مخزنة

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

  •  20-09-2019
  •  | 
  •  

سؤال

أنا أرسم مجموعة من البلاط على أ Canvas, ، يتم تمثيل هذه البلاط بأي منهما ImageS أو BufferedImageس.

لقد لاحظت أن أنا أحصل على تعادل مللي ثانية ImageS لكن ما أبدأ باستخدامه BufferedImageS للبلاط RISTSTS Time Sky Rockts إلى أعلى من 20ms.

BufferedImage buffered = ImageIO.read(new File(fileName));
Image image = Toolkit.getDefaultToolkit().createImage(fileName);

كل من هذه الصور تدعم قنوات ألفا. أود أن أبدأ في استخدام ألفا قادر Image's للمؤسسات الوسيطة. ومع ذلك ، لم أجد مكانًا في JDK يمكنه إنشاءها إلى جانب استدعاء مجموعة الأدوات هذه لإنشاء واحد من ملف.

في الأساس ، هل يعرف أي شخص كيفية إنشاء صورة فارغة (وليس BufferedImage) من نقطة الصفر التي يمكن أن تدعم ألفا؟

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

المحلول

للإجابة على سؤالك مباشرة:

// Create a empty BufferedImage which supports alpha
// It will be just as fast a Toolkit image
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

بعض الخلفية:

كل ذلك يعود إلى نوع bufferedimage الذي تستخدمه. يوفر BufferedImage مُنشئًا يمكنك فيه تحديد النوع (int_argb ، 4byte_argb ، إلخ). عند استخدام Imageio ، ليس لديك تحكم في النوع الذي يعتاد في بناء bufferedimage. يستخدم Imageio النوع "0" وهو مخصص. يحكم النوع كيف يتم تخزين/الوصول إلى بيانات الصورة في الذاكرة والتي تلعب بشكل كبير كيفية رسم الصورة/نسخها/مزرعة على الشاشة (أو صورة أخرى).

لقد قمت بإنشاء اختبار بسيط استنادًا إلى الكود الخاص بك ، ويجعل العزف على العزف دائمًا ببطء شديد. أقوم بإنشاء bufferedimage ثانية مع type_int_argb ونسخ أول عازلة (من صورة) فيها. هذا type_int_argb bufferedImage يعرض بنفس سرعة صورة مجموعة الأدوات.

نصائح أخرى

يمكنك استخدام واجهة برمجة تطبيقات ImageConsumer/ImageProducer القديمة لإنشاء كائنات صورة مع أي محتوى تريده.

سيؤدي ذلك إلى إنشاء كائن صورة من بكسل ARGB في pix صفيف مع العرض المعطى والارتفاع:

public static Image createImage( int width, int height, int[] pix )
{
    return createImage( width, height, pix, 0, width );
}

public static Image createImage( int width, int height, int[] pix, int offs, int scan )
{
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    ImageProducer source = new MemoryImageSource( width, height, pix, offs, scan );
    return toolkit.createImage( source );
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top