заменить определенный цвет в чертеже openGl в xcode? - PullRequest
2 голосов
/ 01 сентября 2010

я строю приложение для рисования, которое использует openGl.Я новичок в openGL, но мне удалось создать базовое приложение.

Сейчас я работаю над тем, чтобы пользователь мог сохранять рисунки в рулон камеры.

У меня есть представление, которое содержитизображение, которое пользователь использует для рисования, поэтому оно должно быть видимым, но не должно зависеть от холста для рисования.

a bove it У меня есть вид, который я использую для рисования.из-за того, что я сказал ранее, я установил прозрачный фон черного цвета с помощью -

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

Проблема -

все отлично, пока я не сохраню изображение.очевидно, цвет фона прозрачный черный, поэтому изображения имеют черный фон, а мне нужно, чтобы он был белым.

Я учил менять весь черный цвет на холсте на белый перед сохранением.

Может кто-нибудь направить меня с этим?

танки Шани


Привет Дэвид, спасибо за ответ.В первый раз я фактически использовал это как есть.Я немного покраснел и добавил остальную часть кода (я надеюсь, что так), на этот раз фон стал белым, но нарисованные линии исчезли.Я попытался проверить цвет буфера в каждой точке и заменить его на 255 каждый раз, когда он равен 0. Это работало отлично, фон стал белым, а линии остались, но их цвета изменились таким образом, что я не могу понять.Буду признателен, если вы поможете мне с этим.

Это код, который я написал

-(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

}

Шани

1 Ответ

1 голос
/ 02 сентября 2010

Изменение поведения кода рисования при сохранении:

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