2012-07-18 2 views
3

나는 처음에 스택 오버플로에 대해 약간 혼란스러워. 나는 객관적인 C에 새로운 브랜드이지만, 제 동료들로부터 많은 것을 배웠습니다. 내가하려고하는 일은 모든 수직 루프가 끝난 후 1 픽셀 씩 가로로 세로로 이동하는 bmContext를 가로 지르는 것입니다. 몇 가지 코드가 있습니다 :목표 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이 코드는 다음과 유사하지만 자바 버전에 관심이 없습니다. 나는 객관적인 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

안녕하세요 덕분에 나는 도니는 다르게 내 스팀 계정에 내 자신으로 사진을 사용 말하고 싶었다 : 이 작동합니다. 나는 당신의 대답에 대해 조금 혼란 스럽다. 나는 좀 더 구체적 이어야만했다. 나는 픽셀의 색을 바꾸거나 새로운 이미지를 만들지 않을 것이다. 내가하려고하는 것은 수직 반복 내에서 얼마나 많은 연속 색상이 있는지 계산하는 것입니다. 각 행에 대해 (이 코드는 작성하고 작동합니다!). 난 그냥 내 루프에 대해 혼란 스러워요, 난 진정으로 모든 수직 픽셀을보고 나서 수평으로 1 이상 이동하여 이미지를 확인합니다. 혼란을 드려 죄송합니다. – Xav

+0

솔루션에 대한 내 편집 된 답변보기 – Dima

+1

당신이 그것을 찍었 어! 정말 고맙습니다! – Xav

관련 문제