Я пытаюсь нарисовать круг на NSImage, а затем отобразить его на экране. Я хочу сделать это несколько раз, чтобы с каждым новым кругом старые не показывались. Если я использую код ниже, круг рисуется, но каждый раз, когда я рисую новый, старые все еще присутствуют.рисунок на NSImage
-(void)drawPointToImage:(float)x y:(float)y
{
// drawpoint and update
float diameter1 = 20, x_plot, y_plot; // keep diameter1
if (isnan(x) || isnan(y) || x < 0.0001 || y < 0.0001) {
return;
}
x_plot = [self xToScreen:x];
y_plot = [self yToScreen:y];
NSImage *image = [[NSImage alloc]initWithSize:NSMakeSize(canvasWidth, canvasHeight)]; // start with clean image
image = [NSImage imageNamed:@"538x598.png"];//orginalImage;
NSRect myRect1 = NSMakeRect(x_plot, y_plot, diameter1, diameter1);
NSBezierPath *path1;
path1 = [NSBezierPath bezierPathWithOvalInRect:myRect1];
[[NSColor blackColor] set];
[path1 fill];
imageView.image = image; // display to screen
}
Итак, я попробовал следующее, но теперь круги не нарисованы вообще. Как я могу нарисовать круг на новом изображении каждый раз?
-(void)drawPointToImage:(float)x y:(float)y
{
// drawpoint and update
float diameter1 = 20, x_plot, y_plot; // keep diameter1
if (isnan(x) || isnan(y) || x < 0.0001 || y < 0.0001) {
return;
}
x_plot = [self xToScreen:x];
y_plot = [self yToScreen:y];
NSImage *image = [[NSImage alloc]initWithSize:NSMakeSize(canvasWidth, canvasHeight)]; // start with clean image
image = [NSImage imageNamed:@"538x598.png"];//orginalImage;
[image lockFocus];
NSRect myRect1 = NSMakeRect(x_plot, y_plot, diameter1, diameter1);
NSBezierPath *path1;
path1 = [NSBezierPath bezierPathWithOvalInRect:myRect1];
[[NSColor blackColor] set];
[path1 fill];
[image unlockFocus];
imageView.image = image; // display to screen
}
Я не уверен, я понимаю, почему вы используете изображения на всех, но когда вы назначаете 'image' используя' ImageName: ', вы выбрасываете (и утечки) тот, который вы alloc'd в предыдущая строка. – JWWalker
У меня есть диаграмма, на которой я хочу построить точку, эта точка меняется, поэтому я начинаю с чистого изображения каждый раз, а затем рисую новую точку, я не хочу, чтобы предыдущие точки оставались. Я использую ARC, поэтому я думал, что это позаботится об утечке. – user1390106
Возможно, ARC позаботится об утечке, но по-прежнему бессмысленно бросать объект сразу после его создания. – JWWalker