سؤال

أحاول إنشاء تطبيق أنه عندما يتغير لون بكسل على الشاشة إلى واحد آخر (الذي أعرف ما هو) فإنه يفعل شيئا ما، لا يهم حقا السؤال ما يفعله.

على أي حال، أنا أستخدم هذا:

 CGImageRef window283x420 = CGWindowListCreateImage(NSMakeRect(284, 420, 1, 1), kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);
 NSBitmapImageRep *cannonOne = [[NSBitmapImageRep alloc] initWithCGImage:window283x420];

ثم، اللون الذي أتوقعه أن يتغير إلى هنا:

NSColor *color = [NSColor colorWithCalibratedRed:0.521569 green:0.380392 blue:0.231373 alpha:1];

وأنا مقارنة الألوان هنا:

while (![color isEqualToColor:[cannonOne colorAtX:0 y:0]]) {
 CGImageRef window283x420 = CGWindowListCreateImage(NSMakeRect(284, 420, 1, 1), kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);
 NSBitmapImageRep *cannonOne = [[NSBitmapImageRep alloc] initWithCGImage:window283x420];
 if ([color isEqualToColor:[cannonOne colorAtX:0 y:0]]) {

أعرف أن الوقت / إذا كان من الممكن القيام به بشكل أفضل، ولكن يجب أن تعمل على ما يرام ولا تقلق بشأن تحسين التطبيق حتى يعمل فعلا لول.

الآن، إذا لم يتغير لون بكسل في الواقع بسرعة (مثل اللون، فهذا يبقى مثل هذا الأمر قليلا) يعمل بشكل مثالي. إذا كان الأمر مثل بكسل مع اللون الذي يتحرك وتحصل على 283 * 420 ولكن لا يبقى هناك لفترة طويلة (مثل 0.1s) (كما هو موضح في المثال أعلاه) لا يعمل.

الوقت الذي يبقى فيه لا ينبغي أن يكون هناك مشكلة، حيث أن التطبيق الخاص بي هو التحقق من بكسل سريع حقا، كما هو موضح في التصحيح هنا:

2010-01-04 22:12:58.230 appname[2372:a0f] Checked
2010-01-04 22:12:58.231 appname[2372:a0f] Checked

أيه أفكار؟ :)

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

المحلول

كما يشير GS، هذا ليس تافهة. قد ترغب في إلقاء نظرة على مثال Apple CicolorTracking الذي يستخدم مرشح صور أساسي مخصص للكشف عن وحدات البكسل في صورة متحركة:

http://developer.apple.com/mac/library/sampleecode/cicolortracking/

هناك المزيد من المعلومات حول كيفية انتهاء الأمر هنا:

http://parmanoir.com/how_core_image_color_tracking_works.

نصائح أخرى

من الممكن أن يكون كائن متحرك أبدا حتى تصل إلى تلك النقطة. وبعد شاشتك تحتوي على تردد تحديث حوالي 50 هيرتز، إذا كان بكسل واحد يسافر بشكل أسرع من 50 بكسل / ثانية لن يظهر على كل بكسل!

هذا صحيح أيضا بالنسبة لمعالج الفيديو لأن جميع الرسومات مزدوجة مؤقتا في Mac OS X، وتحديث 50 مرة في الثانية.

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