0

我正在做一个小任务,我通过 TCP/IP 接收一个文本字符串(json 消息),并且一个条目包含一个长长的灰度图像像素值列表,因此这些值在 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 的图像,它与 foo 匹配 30 个条目(像素值)。

我尝试使用 for 循环和图像中每一行的 NSRange 迭代字符串(其中第一行 NSRange 为 0,5,下一行为 6-11,依此类推),但我不知道这是否是正确的方法,以及我应该将它转换成什么数据格式,例如 NSData、NSArray 或其他能够将它用于 UIImageView 的东西。

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 回答