ماذا تعود cgcolorgetcomponents ()؟
-
16-09-2019 - |
سؤال
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
هل هذا يعود تعويم، أو صفيف من العوامات؟ يبدو أن العلامة النجمية هي اختصار لإنشاء صفيف. هل هذا صحيح؟
عندما أسمي هذه الوظيفة على خاصية CGColor لكائن HSB Uicolor هل تحويل القيم إلى RGB؟
المحلول
نعم، إرجاع مجموعة من CGFloats
. وبعد على وجه التحديد، تقوم بإرجاع "مجموعة من قيم الشدة لمكونات الألوان (بما في ذلك ألفا) المرتبطة باللون المحدد."
تعتمد مكونات الألوان التي تم إرجاعها على مساحة اللون التي مرت CGColorRef
الاستخدامات.
مزيد من المعلومات يمكن العثور عليها في وثائق CGColor..
نصائح أخرى
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
هل هذا يعود تعويم، أو صفيف من العوامات؟ يبدو أن العلامة النجمية هي اختصار لإنشاء صفيف. هل هذا صحيح؟
نوعا ما.
CGFloat *colors
يعلن متغير يحمل مؤشرا ل CGFLoوات واحد على الأقل. CGColorGetComponents
إرجاع مؤشر إلى العديد من cgfloats، واحدة تلو الأخرى على صفيف C الأخرى. تأخذ هذا المؤشر وتعيينه (ضع المؤشر في) colors
عامل.
إعلان المتغير لا يزيد المصفوفة. في الواقع، لا يفعل CGColorGetComponents
. وبعد مهما تم إنشاؤه كائن CGColor بإنشاء الصفيف وتخزينه داخل الكائن؛ CGColorGetComponents
يتيح لك أن يكون لديك المؤشر إلى هذا التخزين.
إعلان CGFloat *colors
يخلق المتغير فقط مكان - المتغير - لتخزين مؤشر واحد أو أكثر من cgfloats. الشيء الموجود في المتغير هو المؤشر، والشيء في هذا المؤشر هو الصفيف.
إذا كان هذا لا يزال غير واضح، انظر كل ما تحتاج لمعرفته حول المؤشرات في ج.
من تفاحة:
تقوم بإرجاع قيم مكونات الألوان (بما في ذلك Alpha) المرتبطة لون الكوارتز. مجموعة من قيم الشدة لمكونات الألوان (بما في ذلك ألفا) المرتبطة باللون المحدد. حجم الصفيف هو أكثر من عدد مكونات المساحة الملونة للون.
للحصول على مكونات RGB التي أستخدمها:
// Get UIColor's RGB normalized components (0..1)
CGFloat red, green, blue, alpha;
[color getRed:&red green:&green blue:&blue alpha:&alpha];
// Convert RGB components to 8-bit values (0..255)
int r = (int)(red * 255.0);
int g = (int)(green * 255.0);
int b = (int)(blue * 255.0);
إليك مثال على كيفية تحويل CGColorref بشكل صحيح myColorRef
إلى nscolor. myNSColor
:
NSColorSpace *cp = [[NSColorSpace alloc] initWithCGColorSpace:CGColorGetColorSpace(myColorRef)];
const CGFloat *components = CGColorGetComponents(myColorRef);
size_t componentCount = CGColorGetNumberOfComponents(myColorRef);
NSColor* myNSColor = [NSColor colorWithColorSpace:cp components:components count:componentCount];