iOS - Objective C - لا يمكن عرض البيكسل باستخدام UInt8

أحاول التقاط لون متوسط ​​من صورة معينة باستخدام CIAreaAverage . عملية الصيد تسير على ما يرام ، أعطاني outputImage من عامل التصفية لي بكسل واحد CIImage .

The problem occurs when attempt to catch RGB information with uint8_t

"بكسل" (uint8_t) دائمًا فارغ ("").

أنا متأكد من أن سياق التقديم الخاص بي ليس nil ، ولكن "render" لا تسري إلا على خطأ.

ليس لدي أي فكرة عن كيفية التقاط بيانات RGB من CIImage بشكل صحيح.

enter image description here

0
يا رائع ، إنه يعمل. شكرا جزيلا. أتمنى لك نهارا سعيد !
وأضاف المؤلف ddwdwwf drewret, مصدر
قد أكون مخطئا ولكن أعتقد أنك لا تحتاج إلى تمرير مؤشر إلى pixel إلى التقديم إلى وظيفة الصورة النقطية لأنه بالفعل مؤشر. بدلاً من ذلك: [con render: average.outputImage toBitmap: pixel rowBytes: 4 bounds: onePixel format: kCIFormatRGBA8]
وأضاف المؤلف Palle, مصدر
حسنا ، أنا نشر هذا كإجابة بحيث يمكن وضع علامة على السؤال كما أجاب.
وأضاف المؤلف Palle, مصدر

1 إجابة

pixel should be passed directly as a parameter to the render:toBitmap:rowBytes:bounds:format: function instead of as a pointer.

يجب أن تكون دعوة الدالة الصحيحة:

[con render: average.outputImage toBitmap: pixel rowBytes: 4 bounds: onePixel format: kCIFormatRGBA8] 

pixel is already a pointer so by passing a pointer to pixel, the memory address that pixel points to is changed. Accessing pixel[0] afterwards accesses the now potentially invalid memory address, which is why your program crashes with EXC_BAD_ACCESS.

0
وأضاف