2011-08-08 6 views
3

le but de mon projet: l'utilisateur peut changer la couleur d'une partie en images en touchant l'écran, quand il touche n'importe quelle zone la couleur de cette zone devrait être changéeObjectif-C/iphone - changer la couleur des pixels?

J'ai beaucoup d'idées mais mes idées sont basées sur placer d'autres images (créées dynamiquement) dans la vue, mais ces idées sont coûteuses en mémoire;

comment faire ceci().

Répondre

5

Vous pouvez utiliser Core Graphics. Ajouter QuartzCore cadre à votre projet.

La méthode de base pour le faire est de rendre votre image dans un contexte bitmap:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8,bytesPerRow, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); 
CGColorSpaceRelease(colorSpace); 
CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = originalWidth, .size.height = originalHeight}, cgImage); 

alors vous pouvez saisir une référence aux pixels sous-jacents:

UInt8* data = (UInt8*)CGBitmapContextGetData(bmContext); 

Effectuez ensuite l'opération de pixels:

const size_t bitmapByteCount = bytesPerRow * originalHeight; 
for (size_t i = 0; i < bitmapByteCount; i += 4) 
{ 
    UInt8 a = data[i]; 
    UInt8 r = data[i + 1]; 
    UInt8 g = data[i + 2]; 
    UInt8 b = data[i + 3]; 

    // Do pixel operation here 

    data[i] = (UInt8)newAlpha 
    data[i + 1] = (UInt8)newRed; 
    data[i + 2] = (UInt8)newGreen; 
    data[i + 3] = (UInt8)newBlue; 
} 

Enfin, prenez votre nouvelle image du contexte:

CGImageRef newImage = CGBitmapContextCreateImage(bmContext); 
+0

pouvez-vous clarifier plus; coz je n'ai pas travaillé avec ce genre de projet (graphiques), aussi je suis nouveau pour les graphiques de base, j'ai essayé un peu de codage mais malheureusement cela n'a pas fonctionné –

+0

Jetez un oeil à ce code: https: // github. com/Nyx0uf/NYXImagesUtilities – Nyx0uf

+0

thx pour votre soutien .... je suis maintenant capable de changer les pixels .. :) –

Questions connexes