{{ $root.errMsg }}

如何更改結果以打印Objective C中的RGB像素值

(已刪除)

(己關閉)

(已標記為濫發)

(已保護)


如何更改結果以打印Objective C中的RGB像素值?

 

我有這個代碼,我想讓它返回每個像素的RGB顏色值,而不是亮度。現在,它打印每個像素的亮度在命令行上,我想要改變這打印每個像素的RGB值。 我是Objective-C的新手,所以如果能得到一些幫助和解釋會非常感謝:)。

 

我到目前為止的一個例子。此圖像顯示每個像素的亮度。

 

 // 1. Get pixels of image
  CGImageRef inputCGImage = [image CGImage];
  NSUInteger width = CGImageGetWidth(inputCGImage);
  NSUInteger height = CGImageGetHeight(inputCGImage);

  NSUInteger bytesPerPixel = 4;
  NSUInteger bytesPerRow = bytesPerPixel * width;
  NSUInteger bitsPerComponent = 8;

  UInt32 * pixels;
  pixels = (UInt32 *) calloc(height * width, sizeof(UInt32));

  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  CGContextRef context = CGBitmapContextCreate(pixels, width, height,
                                               bitsPerComponent, bytesPerRow, colorSpace,
                                               kCGImageAlphaPremultipliedLast|kCGBitmapByteOrder32Big);

  CGContextDrawImage(context, CGRectMake(0, 0, width, height), inputCGImage);

  CGColorSpaceRelease(colorSpace);
  CGContextRelease(context);

#define Mask8(x) ( (x) & 0xFF )
#define R(x) ( Mask8(x) )
#define G(x) ( Mask8(x >> 8 ) )
#define B(x) ( Mask8(x >> 16) )

  // 2. Iterate and log!
  NSLog(@"Brightness of image:");
  UInt32 * currentPixel = pixels;
  for (NSUInteger j = 0; j < height; j++) {
    for (NSUInteger i = 0; i < width; i++) {
      UInt32 color = *currentPixel;

      printf("%3.0f ", (R(color)+G(color)+B(color))/3.0);
      currentPixel++;
    }
    printf("\n");
  }

  free(pixels);

 

 

 

 

 [原文: http://stackoverflow.com/questions/42405404/how-to-change-the-result-to-print-the-rgb-pixel-value-in-objective-c 由 George Schena 於 23/2/2017 發問]

 

ios    iphone   


{{ ctrl.votes | shortNumber: 0 }}
問於 {{ '2017-03-06T02:43:28.276Z' | calendarTime }} 修改於 {{ '2017-03-06T05:53:18.340Z' | calendarTime }}


{{ ctrl.answersCount }} 個答案


(此答案已被刪除)

(此答案已被關閉)

(此答案已被標記為濫發)

(此答案已被保護)

只需更改此行:

printf("%3.0f ", (R(color)+G(color)+B(color))/3.0);
printf("(r=%3.0f, g=%3.0f, b=%3.0f) ", R(color), G(color), B(color));

{{ ctrl.ansVotes[0] | shortNumber: 0 }}
答於 {{ '2017-03-06T05:50:46.373Z' | calendarTime }}


提供您的答案? 請先登錄/注冊

您的答案

您要有多於 {{ ctrl.accessRight.postRight.minReputation }} 聲譽才能提供答案。

感謝您為 HackGa 提供答案,回答問題時,請注意下列事項:

  • HackGa 不是一個討論的平台,請只提供該問題的答案。
  • 請儘量以中文書寫。
  • 不要回應其他答案。
  • 不要提出另一個問題或要求幫助。
  • 歡迎提供與解決方案相關的原代碼,請按【{;}】來輸入代碼。
請提供答案


{{ $root.errMsg }}