2012-07-18 69 views
3

我現在有點困惑,第一次在這裏發現堆棧溢出。我是客觀C的全新人物,但從我的同事那裏學到了很多東西。我想要做的是在每個垂直循環之後遍歷一個bmContext垂直水平移動1個像素。繼承人一些代碼:Objective C垂直掃描圖像中的像素

NSUInteger width = image.size.width; 
NSUInteger height = image.size.height; 
NSUInteger bytesPerPixel = 4; 
NSUInteger bytesPerRow = width * bytesPerPixel; 
NSUInteger bytesPerColumn = height * bytesPerPixel; 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow,  colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); 
CGColorSpaceRelease(colorSpace); 
CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = height}, image.CGImage); 

UInt8* data = (UInt8*)CGBitmapContextGetData(bmContext); 

const size_t bitmapByteCount = bytesPerRow * height; 

struct Color { 
    UInt8 r; 
    UInt8 g; 
    UInt8 b; 
}; 

for (size_t i = 0; i < bytesPerRow; i += 4) //shift 1 pixel 
{ 
    for (size_t j = 0; j < bitmapByteCount; j += bytesPerRow) //check every pixel in column 
    { 
     struct Color thisColor = {data[j + i + 1], data[j + i + 2], data[j + i + 3]}; 
    } 
} 

在java中它看起來像這樣,但我對java版本沒有興趣,它只是強調我的真實問題。我只關心客觀的c代碼。

for (int x = 0; x = image.getWidth(); x++) 
{ 
    for (int y = 0; y = image.getHeight(); y++) 
    { 
     int rgb = image.getRGB(x, y); 
     //do something with pixel 
    } 
} 

我真的會將一個單位水平移動,然後檢查所有的垂直像素,然後再次水平移動?我以爲我是,但我的結果似乎有點關閉。在java和c#中實現任務相當簡單,如果有人知道在Objective C中做到這一點的更簡單的方法,請讓我知道。提前致謝!

回答

2

你在像素上的方式似乎是關閉的。

如果我理解正確,你只是想遍歷圖像中的每個像素,逐列。對? 這應該工作:

for (size_t i = 0; i < CGBitmapContextGetWidth(bmContext); i++) 
{ 
    for (size_t j = 0; j < CGBitmapContextGetHeight(bmContext); j++) 
    { 
     int pixel = j * CGBitmapContextGetWidth(bmContext) + i; 
     struct Color thisColor = {data[pixel + 1], data[pixel + 2], data[pixel + 3]}; 
    } 
} 
+0

嘿感謝快速回復,想說我用你的圖片作爲我自己對我的Steam帳號嘿嘿。我對你的答案有點困惑,我應該更具體。我不會替換像素的顏色或創建新圖像。我想要做的是計算我的垂直循環內有多少連續的顏色。對於每一行(它編寫和運行的代碼!)。我只是對我的循環感到困惑,我是通過查看所有垂直像素,然後水平移動1來真正檢查圖像。對困惑感到抱歉。 – Xav 2012-07-18 20:38:10

+0

看到我編輯的答案爲解決方案 – Dima 2012-07-18 20:54:55

+1

你釘了它!非常感謝! – Xav 2012-07-18 20:59:11