Zoomer une image dans une NSView

julien31

Membre confirmé
2 Septembre 2003
34
1
Bonjour.

J'ai un petit problème pour zoomer une image que j'ai affiché dans une NSView. J'ai essayé plein de méthodes différentes, mais j'arrive pas à obtenir de résultat correct. Avec le code affiché dessous, le frame de l'image semble s'aggrandir, mais pas l'image, résultat, j'ai un fond blanc en haut et à droite de mon image.

Voici le code de ma vue :
Bloc de code:
- (void)frameChanged:(NSNotification *)toto
{
	if(carte)
	{
  NSSize tailleImage=[carte size];
  NSRect limites=[[self superview] frame];
  NSSize tailleFrame=limites.size;
  NSPoint p2;
  float x,y;
  
  if(tailleImage.width<limites.size.width) x=((limites.size.width-tailleImage.width)/2);
  else x=0;
  if(tailleImage.height<limites.size.height) y=((limites.size.height-tailleImage.height)/2);
  else y=0;
  imageOrigin.x=x;
  imageOrigin.y=y;
  
  NSRect nouveauBounds;
  p2.x=0;
  p2.y=0;
  nouveauBounds.origin=p2;
  nouveauBounds.size=tailleImage;
  nouveauBounds.size.width=(nouveauBounds.size.width+imageOrigin.x);
  nouveauBounds.size.height=(nouveauBounds.size.height+imageOrigin.y);
  [self setBounds:nouveauBounds];  
  [self setFrame:nouveauBounds];
  [self setNeedsDisplay:YES];
	}
}

- (void)drawRect:(NSRect)rect
{
	if(carte)
	{	
  [self frameChanged:nil];
  [carte compositeToPoint:imageOrigin operation:NSCompositeCopy];
	}
}

- (void)afficherCarte:(NSImage *)nouvelleImage
{
	[nouvelleImage retain];
	[carte release];
	carte=nouvelleImage;
	zoomCarte=1;
	tailleOrigineCarte=[carte size];
	[self frameChanged:nil];
	[self setNeedsDisplay:YES];
}

- (void)setZoomCarte:(float)zoom
{
	zoomCarte=zoom;
	NSAffineTransform *at = [NSAffineTransform transform];
    [at scaleBy:zoom];
    
    [carte setSize:[at transformSize:tailleOrigineCarte]];
	[carte setScalesWhenResized: YES];
	[self frameChanged:nil];
	[self setNeedsDisplay:YES];
}

carte est mon image, frameChanged est appelé lorsque la fenêtre est redimensionnée, pour que l'image reste toujours au centre.

Une idée ?
 
Il me semble qu'ils en parlent dans les tutos de Project:?
dans Introduction aux graphiques sous Cocoa partie 1 ou 2.

@++

EDIT: j'ai regardé mes PDF et ça doit être plus loin dans le cour, parce que c'est pas dans c'est chapitre là, mais il me semble vraiment avoir lu quelque chose sur le zoom (j'ai lu jusqu'au 24eme chapitre)
 
Oui mais dans ce cas là, ils utilisent une NSImageView, et c'est plus facile, car tu n'as qu'une simple image dans la vue ...