iPhone - استبدال كتلة من وحدات البكسل في صورة مع كتلة أخرى من pixls

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

سؤال

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

على سبيل المثال ، دعنا نقول أن لدي صورة بسيطة اللون الأحمر بالكامل وأنا أعتبر حجم كتلة البكسل الخاص بي كـ 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"];

هذا هو الخطوط العريضة العامة ، ربما ارتكبت بعض الأخطاء ولكن هذا يجب أن يجعلك تسير على الأقل.

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