現時点では少し混乱しています。スタックオーバーフローに関する初めてのポスターです。私は Objective C の初心者ですが、同僚から多くのことを学びました。私がやろうとしているのは、垂直ループごとに 1 ピクセルずつ水平方向にシフトする bmContext を垂直にトラバースすることです。いくつかのコードを次に示します。
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
}
}
本当に水平方向に 1 単位シフトしてから、垂直方向のすべてのピクセルをチェックしてから、水平方向に再びシフトしているのでしょうか。と思いましたが、結果は少しずれているようです。Java と C# では、タスクを達成するのはかなり簡単でした。Objective C でこれを行うためのより簡単な方法を誰かが知っている場合は、私に知らせてください。前もって感謝します!