iPhone - استبدال كتلة من وحدات البكسل في صورة مع كتلة أخرى من pixls
-
25-09-2019 - |
سؤال
أود أن أعرف ما إذا كان يمكن لأي شخص أن يوجهني في الاتجاه الصحيح فيما يتعلق بما يجب استخدام الأطر/الأساليب عند استبدال كتلة من وحدات البكسل في صورة مع كتلة أخرى من وحدات البكسل.
على سبيل المثال ، دعنا نقول أن لدي صورة بسيطة اللون الأحمر بالكامل وأنا أعتبر حجم كتلة البكسل الخاص بي كـ 5 × 5 بكسل. الآن كل 3 كتل أريد استبدال الكتلة الثالثة بكتلة زرقاء ملونة (5 × 5 بكسل) بحيث ستؤدي إلى صورة حمراء مع ظهور كتل زرقاء كل 3 كتل حمراء.
لقد وجدت معلومات تتعلق باستبدال البكسل ولكني أحاول معرفة كيفية تحديد ومعالجة كتل البكسل. سيكون موضع تقدير أي نصيحة .. وأي رمز سيكون حلمًا رطبًا.
المحلول
على الرغم من أنه قد يبدو وكأنه سؤال بسيط ، إلا أنه ليس من السهل القيام بشيء من هذا القبيل. تحتاج إلى الكثير من المعلومات الأساسية للحصول على كل شيء. يعتمد ذلك أيضًا على المكان الذي تأتي منه الصورة ، وما تريد فعله به.
لن أقدم لكم مثالًا عاملاً ، ولكن إليك بعض المؤشرات:
القراءة في صورة:
UIImage *img = [UIImage imageNamed:@"myimage.png"];
// make sure you added myimage.png to your project
إنشاء "سياق الرسومات" الخاص بك للاستخلاص على:
UIGraphicsBeginImageContext(CGSizeMake(480.0f, 320.0f)); // the size (width,height)
CGContextRef ctx = UIGraphicsGetCurrentContext();
رسم صورتك على سياقك (الحالي):
[img drawAtPoint:CGPointMake(0.0f, -480.0f)]; // (draws on current context)
القيام ببعض اللوحات الأخرى:
CGContextBeginPath(ctx); // start a path
CGContextSetRGBStrokeColor(ctx,1,0,0,1); // red,green,blue,alpha with range 0-1
CGContextMoveToPoint(ctx,50,0); // move to beginning of path at point (50,0)
CGContextAddLineToPoint(ctx,100,100); // add a line to point (100,100)
CGContextStrokePath(ctx); // do the drawing
تحويل سياق الصورة النقطية إلى صورة مرة أخرى:
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
ثم ، إما:
أظهر الصورة للجمهور ، من داخل وحدة التحكم في العرض:
[self.view addSubview:[[[UIImageView alloc] initWithImage:resultImage] autorelease]];
أو اكتب الصورة باسم JPEG:
NSData *imagedata = UIImageJPEGRepresentation(img,0.8); // 0.8 = quality
[imagedata writeToFile:filename atomically:NO];
أو كـ PNG:
NSData *imagedata = UIImagePNGRepresentation(img);
[imagedata writeToFile:filename atomically:NO];
بالنسبة لأولئك الذين ستحتاج إلى اسم ملف ، وهو ليس تافهاً أيضًا (بالنظر إلى بيئة الهاتف التي تعيش فيها). هذا موضوع آخر ستجده كثيرًا ، ابحث عن أشياء مثل:
NSArray *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *filename = [[path elementAtIndex:0] stringByAppendingPathComponent:@"myimage.png"];
هذا هو الخطوط العريضة العامة ، ربما ارتكبت بعض الأخطاء ولكن هذا يجب أن يجعلك تسير على الأقل.