أي طريقة سريعة وسهلة لالتقاط جزء من الشاشة ؟ getPixel بطيء GetDIBits يبدو قليلا complcated كبداية

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

سؤال

كنت أحاول بعض التعليمات البرمجية إلى التقاط جزء من الشاشة باستخدام getPixel على النوافذ مع الجهاز السياق يجري null (لالتقاط الشاشة بدلا من النافذة) ، ولكنها كانت بطيئة حقا.يبدو أن GetDIBits() يمكن أن تكون سريعة ، ولكن يبدو قليلا complcated...وأتساءل عما إذا كان هناك المكتبة التي يمكن أن تضع المنطقة برمتها إلى صفيف ، و بكسل[x][y] سيعود 24 بت لون رمز بكسل ؟

أو يفعل مثل هذه المكتبة موجودة على ماك ؟ أو إذا روبي أو الثعبان بالفعل على هذه المكتبة التي يمكن أن تفعل ذلك ؟

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

المحلول

أنا لم أفعل هذا ولكن كنت أحاول أن:

  1. إنشاء الذاكرة سياق الجهاز (DC) باستخدام CreateCompatibleDC يمر سياق الجهاز من سطح المكتب (GetDC(NULL)).

  2. إنشاء صورة نقطية (باستخدام CreateCompatibleBitmap) نفس حجم المنطقة الخاصة بك التقاط.

  3. حدد الصورة النقطية في العاصمة إنشاء (باستخدام SelectObject).

  4. لا BitBlt من سطح المكتب DC DC قمت بإنشائه (باستخدام SRCCOPY العلم).

العمل مع جهاز السياقات يمكن أن يسبب GDI التسريبات إذا كنت تفعل الأشياء في ترتيب خاطئ لذا تأكد من قراءة الوثائق على جميع GDI الوظائف التي تستخدمها (على سبيل المثالSelectObject, GetDC ، إلخ.).

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