0

TCP/IP 経由でテキスト文字列 (json メッセージ) を受信する小さなタスクを実行しています。1 つのエントリには、グレースケール イメージのピクセル値の長いリストが 1 つ含まれているため、値は 0 ~ 255 の範囲です。

NSString *foo = @"0,0,0,1,1,1,7,7,7,7,7,0,0,1,1,1,1,100,100,100,100,0,0,0,0,0,0,1,1,1";

iOS デバイスの UIImageView に表示したいこの文字列。画像の幅と高さ (json メッセージの一部) を知っているので、たとえば、上記は幅 = 6 と高さ = 5 の画像で、30 エントリ (ピクセル値) を持つ foo に一致します。

画像の各行に対して for ループと NSRange を使用して文字列を繰り返し処理しようとしました (最初の行では NSRange は 0,5、次の行では 6-11 など)。正しい方法と、それをUIImageViewで使用できるようにするために、NSData、NSArrayなどに変換する必要があるデータ形式。

4

1 に答える 1

2

このコードを試してください。

NSString *foo = @"0,0,0,1,1,1,7,7,7,7,7,0,0,1,1,1,1,100,100,100,100,0,0,0,0,0,0,1,1,1";
NSArray *colors = [foo componentsSeparatedByString:@","];
int width = 6;
int height = 5;

//create drawing context
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();

//draw pixels
for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {
        int index = x + y*width;
        CGFloat val = [[colors objectAtIndex:index] floatValue];
        val = val / 255.0f;
        CGFloat components[4] = {val, val, val, 1.0f};
        CGContextSetFillColor(context, components);
        CGContextFillRect(context, CGRectMake(x, y, 1.0f, 1.0f));
    }
}

//capture resultant image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGRect frame = self.imageView.frame;
frame.size = CGSizeMake(width, height);
self.imageView.frame = frame;

self.imageView.image = image;
于 2013-09-26T07:27:00.517 に答える