Voici une fonction i fouetté qui prend 1 image et étend juste milieu ...
-(NSImage *)image:(NSImage *)image leftCapWidth:(float)leftWidth middleWidth:(float)middleWidth rightCapWidth:(float)rightWidth {
// Calculate the new images dimensions
float imageWidth = leftWidth + middleWidth + rightWidth;
float imageHeight = image.size.height;
// Generate the left image
NSRect rectLeft = NSMakeRect(0, 0, leftWidth, imageHeight);
NSImage *imageLeft = [[NSImage alloc] initWithSize:rectLeft.size];
if (imageLeft.size.width > 0) {
[imageLeft lockFocus];
[image drawInRect:rectLeft fromRect:rectLeft operation:NSCompositeCopy fraction:1.0];
[imageLeft unlockFocus];
}
// Generate the middle image
NSRect rectMiddle = NSMakeRect(0, 0, image.size.width - (rightWidth + leftWidth), imageHeight);
NSImage *imageMiddle = [[NSImage alloc] initWithSize:rectMiddle.size];
if (imageMiddle.size.width > 0) {
[imageMiddle lockFocus];
[image drawInRect:rectMiddle fromRect:NSMakeRect(leftWidth, 0, rectMiddle.size.width, imageHeight) operation:NSCompositeCopy fraction:1.0];
[imageMiddle unlockFocus];
}
// Generate the right image
NSRect rectRight = NSMakeRect(0, 0, rightWidth, imageHeight);
NSImage *imageRight = [[NSImage alloc] initWithSize:rectRight.size];
if (imageRight.size.width > 0) {
[imageRight lockFocus];
[image drawInRect:rectRight fromRect:NSMakeRect(image.size.width - rightWidth, 0, rightWidth, imageHeight) operation:NSCompositeCopy fraction:1.0];
[imageRight unlockFocus];
}
// Combine the images
NSImage *newImage = [[[NSImage alloc] initWithSize:NSMakeSize(imageWidth, imageHeight)] autorelease];
if (newImage.size.width > 0) {
[newImage lockFocus];
NSDrawThreePartImage(NSMakeRect(0, 0, imageWidth, imageHeight), imageLeft, imageMiddle, imageRight, NO, NSCompositeSourceOver, 1, NO);
[newImage unlockFocus];
}
// Release the images and return the new image
[imageLeft release];
[imageMiddle release];
[imageRight release];
return newImage;
}
NSDrawThreePartImage fonctionne bien, merci Pierre, mais vous devez créer 3 PNGs. Ce n'est pas un gros problème, mais je remarque que beaucoup d'applications ont une bulle png comme une ressource qu'elles étirent d'une manière ou d'une autre, laissant ainsi cela ouvert un peu plus longtemps au cas où quelqu'un connaîtrait une seule technique png. –
Vous pouvez utiliser la technique de Ben Gottlieb pour diviser l'image en trois parties. Créez une nouvelle image vide pour chaque partie, puis dessinez la section correspondante de l'image entière dans chaque image de pièce. –
Vous pouvez également utiliser [Opacity] (http://likethought.com/opacity) pour l'ensemble de l'image et utiliser ses fonctions Factories and Slices pour générer trois fichiers PNG à partir du document Opacity. –