2010-09-29 28 views
0

je code quelque chose comme ça ...Buffère écriture devient lent après CGBitmapContextCreate

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef ctx = CGBitmapContextCreate(pixelArray, width, height, 8, 4 * width, colorSpace, kCGImageAlphaNoneSkipLast); 

CGImageRef createdImage = CGBitmapContextCreateImage (ctx); 

uiImage = [[UIImage imageWithCGImage:createdImage] retain]; 

Le problème est que, une fois que je crée CGImage et UIImage du tampon (pixelArray), toutes les opérations d'écriture dans la mémoire tampon est au moins 4x plus lent. Cela se produit uniquement sur un appareil iPad non sur iPhone. Est-ce que quelqu'un a le même problème? Qu'est-ce qui se passe ici?

Voici le code d'opération d'écriture, et je l'appelle ceux-ci dans des boucles (setPixel) ...

- (RGBA*) getPixel:(NSInteger)x y:(NSInteger)y { 
    // Bound the co-cordinates. 
    x = MIN(MAX(x, 0), width - 1); 
    y = MIN(MAX(y, 0), height - 1); 

    // yIndexes are pre populated 
    return (RGBA*)(&pixelArray[(x + yIndexes[y]) << 2]); 
} 

- (void) setPixel:(RGBA*)color x:(NSInteger)x y:(NSInteger)y { 
    // Bound the co-cordinates. 
    x = MIN(MAX(x, 0), _width); 
    y = MIN(MAX(y, 0), _height); 

    memcpy([self getPixel:x y:y], color, 3); 

    colorDirtyBit = YES; 
} 
+0

Montrez-nous votre partie de code pour votre opération d'écriture? – tia

+0

J'ai mis à jour la question avec le code d'écriture. – Abix

Répondre

0

Je ne sais pas ce qui va mal, mais je crois que ce pourrait être votre code d'opération d'écriture qui diffèrent en vitesse. Pourriez-vous essayer une opération d'écriture brute sans utiliser ces fonctions à la place? par exemple.

for(int i = 0; i < bufferlen; i++) { 
    pixelArray[i] = i; // or any arbitrary value 
} 
+0

J'ai déjà essayé mais ça n'aide pas. Si je crée un autre tampon et que je fais un memcpy (newBuffer, pixelArray) et que j'effectue les opérations d'écriture, tout va bien. On dirait qu'une fois que je crée une image à partir du bloc de mémoire, une sorte de rappel est attaché à elle, aucune idée de ce que cela peut être possible. – Abix