7
votes

Dessine des zones sélectionnées d'un uiimage

J'ai un uiimage contenant une image avec un tas d'images plus petites sur l'image (essentiellement une bande d'image contenant des sprites). Je voudrais dessiner un seul sprite sur une zone de mon uiview.

Je n'arrive pas à trouver un moyen d'attirer une partie de l'uImage sur la vue. Y a-t-il une méthode qui fait cela?


0 commentaires

3 Réponses :


2
votes

Yep, vous pouvez sûr avec quartz.

Il y a un tutoriel ici qui vous montre comment prendre un uImage et masquer une partie de celui-ci. p>

http://iosdevelopertaux.com/cocoa/how-to-mask-an-image.html P>

Voici le code de cette page (en cas d'incassième dépasse une raison quelconque) P>

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return [UIImage imageWithCGImage:masked];

}


1 commentaires

C'est de bonnes choses et je vais certainement le signet mais je ne veux pas créer de masque pour cela. Je veux simplement faire quelque chose comme: [[[[[UIIMAGE Imagenamed: @ "myImage"] Drawinrect: CGMakerect (10,10,50,50,50) FromRect: CGMakerect (60,60 50h50)];



8
votes

Je pense que vous recherchez peut-être CGIMAGEReReewithImageRect () . Vous pouvez obtenir un cgimage à partir d'un uiimage avec le Propriété du même nom .

EDIT: Une autre option qui existe en 2014, qui n'a pas été en 2009, est Spritekit . Selon ce que vous pourriez faire cela nécessite une feuille Sprite, cela pourrait être utile.


5 commentaires

Bon @sixten, je pense que cela ressemble plus à ce qu'il voulait +1


Fonctionne parfaitement (moins certains maux de tête avec Cgimages sont retournés lors du dessin). Merci.


J'ai écrit une catégorie UIImage pour la manipulation des feuilles de sprite. Consultez ceci, il peut être utile http: / /reecon.wardpress.com/2011/11/19/UIIIMAGE-SPRITE-ADDITI ONS-Object-C /


Cette approche a une incidence sur la performance au cas où le dessin est intensif. Existe-t-il un moyen sans recréer des parties de l'image, mais utilisez simplement des données bitmap disponibles à partir de l'instance UIImage donnant?


Le libellé de la documentation me suggère vivement que cette fonction fait réutiliser les données bitmap existantes et modifie simplement les limites de quelles parties de ces données sont "dans" l'image. Mais il existe certainement des fonctions de quartz pour obtenir les données bitmap sous-jacentes.



3
votes

J'ai écrit un UiImage catégorie pour la manutention des feuilles de sprite. Vérifiez cela, il peut être utile http: // reecon.wordpress.com/2011/11/19/uiImage-sprite-additions-Objective-c/

Comme indiqué précédemment, cette catégorie base sur cgimagecreatewithImageRect () mais fait le processus d'extraction des sprites à une seule feuille Sprite très loin plus pratique plus rapide .

Lien vers la page HUB GIT: https://github.com/r3econ/uiImage-sprite-additions

Vous pouvez également installer à l'aide de gousses de cacao.


0 commentaires