هل يجب أن أضرب المقياس مع قيم النقطة لعرض شبكية العين ، في هذه الحالة؟

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

سؤال

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

أنا أرسم شيئًا ما في الفئة الفرعية لـ uicontrol. لقد اكتشفت أن المقياس الحالي داخل أن uicontrol هو بالفعل 2.0. يحصل هذا الرمز على cgimage من uiimage ، والتي ربما لن تعرف أي شيء عن المقياس. يتم تغذيةها كمعلمة لطريقة تأخذ أيضًا قيم بعض النقاط في الوقت الحالي.

CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);

ملاحظة: DrawerRect في النقاط. img.size.width داخل NSLOG يقوم بإخراج القيمة الصحيحة في النقاط ، في حين أن [img cgimage] يقوم بإخراج صورة @2x لعرض Retina. قمت بشيك للتحقق من هذا:

NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));

الإخراج في وحدة التحكم: image height = 31.000000 (CGImage = 62)

كيف يمكنني التعامل مع صورة @2x هنا؟ هل يجب أن أضرب كل قيمة بالمقياس ، يدويًا؟ ولكن هذا من شأنه أن يرفع المستطيل المرئي الفعلي على الشاشة ، أم لا؟

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

المحلول

نعم.

CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale

بدلاً من ذلك ، يمكنك استخدام -[UIImage drawAtPoint:], -[UIImage drawInRect:] وغيرها من الطرق المماثلة التي تتعامل مع المقياس تلقائيًا. إذا كنت تنزل إلى CGImage, ، عليك التعامل مع الحجم.

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