Нарисуйте растровое изображение на IOS на основе набора данных RGB - PullRequest
0 голосов
/ 03 июля 2018

Я хотел бы нарисовать картинку bimap на платформе IOS на основе набора данных RGB, но у меня возникли некоторые проблемы при обращении к этому официальному веб-сайту: https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-TPXREF101

Самая большая проблема здесь для меня заключается в том, что в этом руководстве нарисовано растровое изображение на MAC OS , а не на IOS .

Итак, я добавил подпредставление в представление и намеревалось нарисовать растровое изображение в подпредставлении.

UIImageView *imgview = [[UIImageView alloc] initWithFrame:CGRectMake(15, 355, 384, 288)];
[self drawBitmap:384 andPixelshigh:288];
[self.view addSubview:imgview];

Функция drawBitmap представляет собой самописную функцию, используемую для рисования растрового изображения после урока.

- (void)drawBitmap:(NSInteger)pixelsWide andPixelshigh:     (NSInteger)pixelsHigh{
CGRect myBoundingBox;
CGContextRef myBitmapContext;
CGImageRef myImage;

myBoundingBox = CGRectMake (33, 366, 384, 288);
myBitmapContext = [self MyCreateBitmapContext:pixelsWide andPixelsHigh:pixelsHigh];
CGContextSetRGBFillColor (myBitmapContext, 1, 0, 0, 1);
CGContextFillRect (myBitmapContext, CGRectMake (100, 100, 200, 100 ));
CGContextSetRGBFillColor (myBitmapContext, 0, 0, 1, .5);
CGContextFillRect (myBitmapContext, CGRectMake (100, 100, 100, 200 ));
myImage = CGBitmapContextCreateImage (myBitmapContext);
CGContextDrawImage(myBitmapContext, myBoundingBox, myImage);
char *bitmapData = CGBitmapContextGetData(myBitmapContext);
CGContextRelease (myBitmapContext);
if (bitmapData)
    free(bitmapData);
CGImageRelease(myImage);
}

и myBitmapContext - это контекст растрового изображения, созданного следующей функцией.

- (CGContextRef) MyCreateBitmapContext: (NSInteger) pixelsWide andPixelsHigh: (NSInteger) pixelsHigh{
CGContextRef    context = NULL;
CGColorSpaceRef colorSpace;
NSInteger *          bitmapData;
NSInteger            bitmapByteCount;
NSInteger            bitmapBytesPerRow;

bitmapBytesPerRow   = (pixelsWide * 4);
bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);

colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
bitmapData = (NSInteger *)calloc( bitmapByteCount, sizeof(uint8_t) );
if (bitmapData == NULL)
{
    return NULL;
}
context = CGBitmapContextCreate (bitmapData,
                                 pixelsWide,
                                 pixelsHigh,
                                 8,
                                 bitmapBytesPerRow,
                                 colorSpace,
                                 kCGImageAlphaPremultipliedLast);
if (context== NULL)
{
    free (bitmapData);
    return NULL;
}
CGColorSpaceRelease( colorSpace );

return context;
}

Думаю, в моем коде нет ничего плохого, но я просто не могу нарисовать нужную мне растровую фигуру.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Я вдруг понял, что совершил очень глупую ошибку. Функция CGBitmapContextCreateImage() имеет возвращаемое значение, которое на самом деле является UIImage. Таким образом, решение этой проблемы состоит в том, чтобы просто присвоить возвращаемое значение myView.image, чтобы показать изображение.

0 голосов
/ 03 июля 2018

Как насчет UIImage(data: imageData) в быстром или [UIImage imageWithData:imageData] в Objective-C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...