IOS memcpy текстура для двойного массива - PullRequest
2 голосов
/ 30 октября 2011

Привет, я использую следующую функцию, чтобы связать sampleBuffer с текстурой opengl, которая работает хорошо.

void *imageData;  

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 
{ 
         UIImage * image = [self generateUIImageFromSampleBuffer:sampleBuffer];

         if(imageData == NULL){
             width = CGImageGetWidth(image.CGImage);
             height = CGImageGetHeight(image.CGImage);
             CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
             imageData = malloc( height * width * 4 );
             imgcontext = CGBitmapContextCreate(imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
             CGColorSpaceRelease( colorSpace );
         }
         CGContextClearRect( imgcontext, CGRectMake( 0, 0, width, height ) );
         CGContextTranslateCTM( imgcontext, 0, height - height );   
         CGContextDrawImage( imgcontext, CGRectMake( 0, 0, width, height ), image.CGImage );

         glBindTexture( GL_TEXTURE_2D, m_textureId );
         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
  }

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

   double data[width * height * 4];

    memcpy(data, imageData, width * height * 4);

       for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x += 4)
            {
                double r = data[ y * width + x];
                double g = data[ y * width + x + 1];
                double b = data[ y * width + x + 2];
                double a = data[ y * width + x + 3];
            }
        }

Этот код вызывается непосредственно после привязки текстуры, но r, g, b никогда не изменяют значения.Любые идеи, что я могу делать неправильно

Ура

1 Ответ

3 голосов
/ 30 октября 2011

Похоже, вы выделяете imageData для хранения значений пикселей как 32-разрядных (4-байтовых) целых чисел, но затем пытаетесь обработать каждую запись как double (8 байт). Это не сработает.

Может помочь следующий пост:

Как получить данные пикселей из UIImage (Cocoa Touch) или CGImage (Core Graphics)?

...