واجهة برمجة تطبيقات رسم ثنائية الأبعاد سريعة ودقة بكسل لتطبيق الرسومات؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أرغب في إنشاء برنامج رسم متعدد المنصات.الشرط الوحيد لكتابة تطبيقي هو أن أتمتع بدقة مستوى البكسل على اللوحة القماشية.على سبيل المثال، أريد أن أكتب خوارزمية رسم الخطوط الخاصة بي بدلاً من الاعتماد على شخص آخر.لا أريد أي شكل من أشكال منع التعرج (مرة أخرى، التحكم في مستوى البكسل مطلوب.) أود أن تكون تفاعلات المستخدمين على الشاشة سريعة وسريعة الاستجابة (في انتظار قدرتي على كتابة خوارزميات سريعة.)

من الناحية المثالية، أود أن أكتب هذا بلغة بايثون، أو ربما جافا كخيار ثان.تعد القدرة على إنشاء التطبيق النهائي عبر الأنظمة الأساسية أمرًا ضروريًا.سأقدم إلى واجهات برمجة تطبيقات مختلفة على أنظمة تشغيل مختلفة إذا لزم الأمر طالما أستطيع كتابة طبقة تجريد حولها.أيه أفكار؟

إضافة:أحتاج إلى القدرة على الرسم على الشاشة.الرسم إلى ملف لقد حصلت على برزت.

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

المحلول

لقد قمت هذا الأسبوع بتجميع بعض الشرائح والأكواد التوضيحية لعمل رسومات ثنائية الأبعاد باستخدام OpenGL من python باستخدام مكتبة pyglet.يمكنك رؤية أغراضي هنا: http://tartley.com/?p=378

إنه سريع جدًا (نسبيًا بالنسبة لبايثون) وقد تمكنت من الحصول على حوالي 1000 كائن موضوع وموجه بشكل مستقل يتحرك حول الشاشة، ولكل منها حوالي 50 رأسًا.

إنه محمول للغاية، وجميع التعليمات البرمجية التي كتبتها في هذه البيئة تعمل على أنظمة التشغيل Windows وLinux وMac (وحتى البيئات الغامضة مثل Pypy) دون الحاجة إلى التفكير في الأمر على الإطلاق.

تحديث: هناك مجموعة من المشاركات الجديدة حول نفس الموضوع أيضًا: http://tartley.com/?cat=27

نصائح أخرى

ال بيجليت مكتبة بايثون قد تناسب احتياجاتك.يتيح لك استخدام OpenGL، وهو واجهة برمجة تطبيقات للرسومات عبر الأنظمة الأساسية.يمكنك تعطيل الصقل والتقاط مناطق الشاشة إلى مخزن مؤقت أو ملف.بالإضافة إلى ذلك، يمكنك استخدام أنظمة معالجة الأحداث وتحميل الموارد ومعالجة الصور.ربما يمكنك أيضًا ربطها بـ PIL (مكتبة صور بايثون)، وبالتأكيد في القاهرة، وهي مكتبة رسومات متجهة شائعة عبر الأنظمة الأساسية.

أذكر Pyglet بدلاً من PyOpenGL الخالص لأن Pyglet يتعامل مع الكثير من أشياء OpenGL القبيحة بشفافية دون أي جهد من جانبك.

أنا وصديق نعمل حاليًا على برنامج رسم باستخدام Pyglet.هناك بعض المراوغات - على سبيل المثال، يتم دائمًا تخزين OpenGL بشكل مزدوج على OS X، لذلك يتعين علينا رسم كل شيء مرتين، مرة للإطار الحالي ومرة ​​أخرى للإطار الآخر، حيث يتم قلبهما كلما تم تحديث الشاشة.يمكنك إلقاء نظرة على التقدم الحالي الذي أحرزناه في هذا المستودع التخريب.(Splatterboard.py الموجود في صندوق السيارة هو الملف الذي تريد تشغيله.) إذا لم تكن مستعدًا لاستخدام svn، فسيسعدني أن أرسل إليك بريدًا إلكترونيًا بتنسيق .zip لأحدث مصدر.لا تتردد في سرقة الكود إذا نظرت إليه.

إذا كان خيار اللغة مفتوحًا، فقد يكون هناك مكان لملف Flash الذي تم إنشاؤه باستخدام Haxe.Haxe هي لغة برمجة ديناميكية كاملة ومجانية.ثم هناك جهاز Neko ذي الصلة، وهو جهاز افتراضي (مثل Java وRuby's وParrot...) يعمل على أنظمة Mac وWindows وLinux.كونه في بعض النواحي شكلاً جديدًا محسنًا من Flash، فمن الطبيعي أن يتمكن من رسم الأشياء. http://haxe.org/

يعد QT's Canvas و QPainter جيدًا جدًا لهذه المهمة إذا كنت ترغب في استخدام C++.وهو عبارة عن منصة مشتركة.

يوجد رابط بيثون لـ QT لكنني لم أستخدمه مطلقًا.

أما بالنسبة لـ Java، فإن استخدام SWT يجعل معالجة مستوى البكسل في اللوحة القماشية أمرًا صعبًا وبطيئًا إلى حد ما، لذا لا أوصي به.من ناحية أخرى، فإن Swing's Canvas جيد جدًا وسريع الاستجابة.لم أستخدم خيار AWT مطلقًا ولكن ربما لا ترغب في الذهاب إلى هناك.

أوصي wxPython

إنها منصة مشتركة بشكل جميل ويمكنك التحكم في كل بكسل، وإذا غيرت رأيك بشأن ذلك، يمكنك استخدامه مع مكتبات مثل pyglet أو agg.

يمكنك العثور على بعض الأمثلة المفيدة لما تحاول القيام به في تنزيل المستندات والعروض التوضيحية.

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