2010-09-01 5 views
2

Je construis une application de dessin qui utilise OpenGl. Je suis nouveau à OpenGL mais réussi à construire l'application de base.remplacer la couleur spécifique dans le dessin openGl dans xcode?

Je travaille maintenant sur la capacité de l'utilisateur à enregistrer les dessins sur rouleau de caméra.

J'ai une vue qui contient une image que l'utilisateur utilise pour dessiner, elle doit donc être visible mais pas affectée depuis la zone de dessin.

un bove it j'ai une vue que j'utilise pour le dessin. à cause de ce que j'ai dit avant que j'ai mis le fond à noir transparent avec -

glClearColor (0.0f, 0.0f, 0.0f, 0.0f);

Le problème -

tout est bien jusqu'à ce que je sauve l'image. De toute évidence la couleur de fond est noir transparent donc les images ont un fond noir alors que j'ai besoin d'être blanc.

J'ai appris à changer toute la couleur noire dans la toile à blanc avant la sauvegarde.

Est-ce que quelqu'un peut me diriger avec ça?

réservoirs Shani


Salut david merci pour la réponse. Dans la première fois, je l'ai utilisé tel quel. Je rougis un peu plus et ajoutai le reste du code (je l'espère) cette fois-ci le fond devint blanc mais les lignes tracées disparurent. J'ai essayé de vérifier la couleur du tampon à chaque point et de le remplacer à 255 à chaque fois qu'il est 0. Cela a bien fonctionné, le fond est devenu blanc et les lignes sont restées mais leurs couleurs ont changé d'une manière que je ne peux pas comprendre. J'apprécierai si vous pouvez m'aider avec cela.

Voici le code que j'ai écrit

-(void)saveCurrentScreenToPhotoAlbum { 
    int width = 768; 
    int height = 1024; 


    //glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
    //glClear(GL_COLOR_BUFFER_BIT); 


    NSInteger myDataLength = width * height * 4; 
    GLubyte *buffer = (GLubyte *) malloc(myDataLength); 
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength); 
    glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 

    NSLog(@"%d", buffer[0]); 
    for(int y = 0; y <height; y++) { 
     for(int x = 0; x <width * 4; x++) { 

      if (buffer[y * 4 * width + x]==0) { 
       buffer[y * 4 * width + x] = 250; 
       //buffer[y * 4 * width + x+1] = 250; 
       NSLog(@" = %i",y * 4 * width + x); 

      } 

       buffer2[(height - 1 - y) * width * 4 + x] = buffer[y * 4 * width + x]; 



      // printf("%d %d %d\n",buffer[(height - 1 - y) * width * 4 + x],buffer[1],buffer[2]); 
     } 
    } 
    free(buffer); // YOU CAN FREE THIS NOW 

    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, releaseData); 
    int bitsPerComponent = 8; 
    int bitsPerPixel = 32; 
    int bytesPerRow = 4 * width; 
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; 
    CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); 

    CGColorSpaceRelease(colorSpaceRef); // YOU CAN RELEASE THIS NOW 
    CGDataProviderRelease(provider);  // YOU CAN RELEASE THIS NOW 

    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; // change this to manual alloc/init instead of autorelease 
    CGImageRelease(imageRef); // YOU CAN RELEASE THIS NOW 


    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); // add callback for finish saving 

} 

Shani

Répondre

1

changer le comportement du code de dessin lors de la sauvegarde:

if(willSave) 
    glClearColor(1,1,1,1); 
else 
    glClearColor(0,0,0,0); 
+0

Salut David J'ai essayé ce que vous segusted et collé le code au début de l'action de sauvegarde mais il stil sauve l'image avec une couleur noire. N'existe-t-il pas un moyen d'itérer les pixels du dessin et de changer tous les pixels noirs en blanc? Merci pour votre aide Shani – shannoga

+0

Avez-vous seulement coller dans ce code, ou y apporter les autres modifications nécessaires impliquées par lui? –

Questions connexes