2010-07-12 11 views
-1

Sous Mac OSX, J'ai une image avec un pixel noir dans les 4 directions. Je veux recadrer par programme l'image au rectangle maximum de l'image.Comment rogner l'image sur l'image maximum rect?

Devrais-je vérifier le pixel noir, puis créer le rectangle de recadrage ou existe-t-il une API supportée?

+0

Vous ne savez pas exactement ce que vous voulez faire. Que voulez-vous dire par "image maximum rect"? De plus, de quel type avez-vous l'image? –

+0

Je peux avoir des images .jpg, ou .png, ou .tiff. Toutes les thèses peuvent être chargées dans NSimage. Dans mon image originale, disons qu'il est de taille 1200X600 Mais l'image réelle est seulement 300X200 au centre. L'autre zone est remplie de pixels noirs. Je veux obtenir l'image rect qui couvre la zone 300X200. – Dhanaraj

Répondre

1

Créez un NSImage de la taille souhaitée, verrouillez le focus, dessinez le rectangle de recadrage souhaité de l'image source dans les limites entières de l'image de destination et déverrouillez le focus. L'image que vous avez créée contient maintenant le recadrage de l'image source. Notez qu'il perdra des informations telles que la résolution (DPI), le profil de couleur et les étiquettes EXIF. Si vous souhaitez conserver ces éléments (probablement une bonne idée), utilisez CGImage:

  1. Utilisez CGImageSource pour charger l'image. Assurez-vous de récupérer les propriétés de chaque image à partir du fichier, ainsi que les images elles-mêmes. Et notez que j'ai utilisé le pluriel: les fichiers TIFF peuvent contenir plusieurs images.
  2. Utilisez the CGImageCreateWithImageInRect function pour recadrer la section souhaitée de chaque image. N'oubliez pas de libérer chaque image originale selon le cas. Si vous voulez écrire les images rognées dans un fichier, utilisez CGImageDestination. Passez à la fois les images et les dictionnaires d'attributs que vous avez obtenus à l'étape 1.
+0

Merci Peter, Mais comment obtenir le recadrage rectiligne? L'image réelle 300X200, qui peut ne pas être dans une forme rectangle dans l'image complète de 1200X600. Je veux obtenir le recadrage qui couvre toute cette partie de l'image (300X200). Je l'ai fait en passant par chaque pixel de toutes les lignes et colonnes de l'image. Y a-t-il une autre approche que celle-ci? – Dhanaraj

+0

Je vous ai déjà dit comment extraire la section désirée de l'image. Le rectangle est facile à comprendre, puisque vous connaissez la largeur et la hauteur et que c'est au centre. Il n'y a pas besoin d'examiner les pixels vous-même. –