Рисование изображения с помощью CGImage? - PullRequest
4 голосов
/ 06 августа 2010

У меня есть CGImageRef, и я хочу отобразить его на NSView.У меня уже есть CGImageRef из исходного пути, но следующее не работает:

- (void)drawRect:(NSRect)rect {

  NSString *   thePath = [[NSBundle mainBundle] pathForResource: @"blue_pict"
                                                         ofType: @"jpg"];
  NSLog(@"the path : %@", thePath);

  CGImageRef myDrawnImage = [self createCGImageRefFromFile:thePath];

  NSLog(@"get the context");
  CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext]     graphicsPort];
  if (context==nil) {
    NSLog(@"context failed");
    return;
  }

  //get the bitmap context
  CGContextRef myContextRef = CreateARGBBitmapContext(myDrawnImage);

  //set the rectangle
  NSLog(@"get the size for imageRect");
  size_t w = CGImageGetWidth(myDrawnImage);
  size_t h = CGImageGetHeight(myDrawnImage);
  CGRect imageRect = {{0,0}, {w,h}};
  NSLog(@"W : %d", w);

  myDrawnImage = CGBitmapContextCreateImage(myContextRef);

  NSLog(@"now draw it");
  CGContextDrawImage(context, imageRect, myDrawnImage);

  char *bitmapData = CGBitmapContextGetData(myContextRef);

  NSLog(@"and release it");
  CGContextRelease(myContextRef);
  if (bitmapData) free(bitmapData);
  CGImageRelease(myDrawnImage);
}

Что с ним не так?

Ответы [ 2 ]

4 голосов
/ 07 августа 2010
CGImageRef myDrawnImage = [self createCGImageRefFromFile:thePath];

Теперь у вас есть ваше изображение.

CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext]     graphicsPort];

Теперь у вас есть контекст вашего представления. У вас есть все, что нужно для рисования изображения.

CGContextRef myContextRef = CreateARGBBitmapContext(myDrawnImage);

Подождите, что?

myDrawnImage = CGBitmapContextCreateImage(myContextRef);

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

CGContextDrawImage(context, imageRect, myDrawnImage);

Вы рисуете пустое изображение.

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

Или используйте NSImage. Это будет двухслойный.

1 голос
/ 06 августа 2010

Да, вы на самом деле не рисуете изображение.Все, что вам нужно сделать, это использовать CGContextDrawImage вместо создания пустого растрового контекста.

...