Нарисовать пиксельный массив в iOS

У меня есть массив 1 и 0. 1 для черного и 0 для белого. Мне нужен самый быстрый способ рисования/рендеринга, инвертирования цвета пикселя и изменения размера рисунка в iOS. Я написал этот код, но он кажется медленным:

for (int yCoordinate = 0; yCoordinate < height; yCoordinate++)
{
for (int xCoordinate = 0; xCoordinate < width; xCoordinate++)
{
int byteIndex = (bytesPerRow * yCoordinate) + xCoordinate * bytesPerPixel;
        int pixel = jbig2_image_get_pixel(imgData, xCoordinate, yCoordinate);
        float pixelRGB[]={0,0,0,0};

        if(pixel==0)
        {
            pixelRGB[0] = backRGB[0];  //255.f;
            pixelRGB[1] = backRGB[1];
            pixelRGB[2] = backRGB[2];
            pixelRGB[3] = backRGB[3];

        }

        else
        {
            pixelRGB[0] =  textRGB[0]; //0.f
            pixelRGB[1] =  textRGB[1];
            pixelRGB[2] =  textRGB[2];
            pixelRGB[3] =  textRGB[3];

        }


//Assigning new color components

rawData[byteIndex] = (unsigned char) pixelRGB[0];
rawData[byteIndex + 1] = (unsigned char) pixelRGB[1];
rawData[byteIndex + 2] = (unsigned char) pixelRGB[2];
        rawData[byteIndex + 3] = (unsigned char) pixelRGB[3];


}
}

CGColorSpaceRef  colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(rawData,
                                      width,
                                      height,
                                      8,
                                      bytesPerRow,
                                      colorSpace,
                                      (CGBitmapInfo)kCGImageAlphaNoneSkipLast);


CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
newUIImage = [UIImage imageWithCGImage:cgImage];

Есть ли лучший метод, такой как CGLayer, UIKit и т. Д. Я был бы очень признателен, если бы кто-нибудь предоставил мне пример кода и лучший и более быстрый метод.


person Zeeshan Sheikh    schedule 19.05.2014    source источник


Ответы (1)


Я бы использовал CGBitmapCreate() и создал изображение с разрешением 1 бит на пиксель. (Обратите внимание, что вам придется преобразовать массив байтов в растровое изображение, где каждый байт в массиве байтов станет одним битом растрового изображения.) Затем вы можете создать UIImage непосредственно из 1 бита на пиксель CGImage. Чтобы инвертировать его, вы можете рисовать, используя другой режим наложения (может быть, разностный режим или, возможно, XOR?).

person user1118321    schedule 20.05.2014