كيف يمكنني إنشاء صورة جديدة من قبل الرسم على رأس قائمة واحدة باستخدام الكوارتز ؟

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

سؤال

لدي عرض مع uiimageview إسناد هذا uiimageview صورة عن طريق الكاميرا..الآن أريد أن أفعل بعض الرسم على الصورة....باستخدام coregraphics.أريد أن أفعل شيئا مثل هذا...حدد منطقة طريق لمس رسم خط عند خط ينضم شيئا مثل دائرة أو أي شكل..أريد تغيير هذا المجال بالذات إلى شيء آخر على سبيل المثال تغيير لون هناك.تحويل ذلك إلى الرمادي..حتى الآن أنا قادر على رسم خط...هنا هو صورة الخط الذي رسمته على uiimage عرض...

alt text

ولكن أنا غير قادر على معرفة كيف يمكنني رسم في imageview صورة..يعني كيفية تعديل imageview صورة???

أيضا أريد أن استعادة الصورة عند الضغط على زر واضحة أو شيء مثل التراجع..لا أحد يعرف كيف يمكن تحقيق ذلك ؟

و

كيف يمكنني إنشاء مستطيل عندما انقر على المحاصيل الزر تحريك المستطيل في أي مكان على الشاشة ثم تضغط على الزر المحاصيل الصورة ثم حفظ اقتصاص الصورة..

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

المحلول

هذه هي الخطوات:

  1. إنشاء CGBitmapContext مطابقة للصورة colorspace والأبعاد.
  2. رسم صورة في هذا السياق.
  3. رسم ما تريد على أعلى الصورة.
  4. خلق صورة جديدة من السياق.
  5. التخلص من السياق.

هنا هو الطريقة التي يأخذ صورة يرسم شيئا على أعلى من ذلك و ترجع جديدة UIImage مع تعديل محتويات:

- (UIImage*)modifiedImageWithImage:(UIImage*)uiImage
{
    // build context to draw in
    CGImageRef image = uiImage.CGImage;
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(NULL,
                                             CGImageGetWidth(image), CGImageGetHeight(image),
                                             8, CGImageGetWidth(image) * 4,
                                             colorspace, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorspace);

    // draw original image
    CGRect r = CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image));
    CGContextSetBlendMode(ctx, kCGBlendModeCopy);
    CGContextDrawImage(ctx, r, image);
    CGContextSetBlendMode(ctx, kCGBlendModeNormal);

    // draw something
    CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
    CGContextSetRGBStrokeColor(ctx, 1.0f, 1.0f, 1.0f, 0.5f);
    CGContextSetLineWidth(ctx, 16.0f);
    CGContextDrawPath(ctx, kCGPathStroke);

    CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
    CGContextSetRGBStrokeColor(ctx, 0.7f, 0.0f, 0.0f, 1.0f);
    CGContextSetLineWidth(ctx, 4.0f);
    CGContextDrawPath(ctx, kCGPathStroke);

    // create resulting image
    image = CGBitmapContextCreateImage(ctx);
    UIImage* newImage = [[[UIImage alloc] initWithCGImage:image] autorelease];
    CGImageRelease(image);
    CGContextRelease(ctx);

    return newImage;
}

لاستعادة الصورة القديمة ، تبقى مجرد إشارة إلى ذلك.

الاقتصاص شيء لا علاقة أعلاه يجب إنشاء سؤال جديد على ذلك.

نصائح أخرى

وسيكون أسهل وهناك الكثير الحل يكون

(UIImage *) modifyImage:(UIImage *)inputImage
{
   UIGraphicsBeginImageContext(inputImage.size);
   [inputImage drawInRect:CGRectMake(0, 0, inputImage.size.width, inputImage.size.height);
   CGContextRef ctx = UIGraphicsGetCurrentContext();
   //Drawing code using above context goes here
   /*
    *
    */
   UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return outputImage;
}

ونلقي نظرة على الموقع نظرة عامة على الكوارتز 2D للحصول على معلومات حول كيفية استخدام الكوارتز 2D على اي فون.

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