Question

Je développe une application iPhone qui redimensionne et fusionne les images.

Je veux sélectionner deux photos de taille 1600x1200 de la bibliothèque de photos puis fusionner les deux en une seule image et enregistrer cette nouvelle image à la photothèque.

Cependant, je ne peux pas obtenir la bonne taille pour l'image fusionnée.

Je prends deux vues d'image du cadre 320x480 et mis à mes images importées à l'image de la vue. Après la manipulation des images (zoom, recadrage, rotation), je puis enregistrez l'image à l'album. Quand je vérifie la taille de l'image il montre 600x800. Comment puis-je obtenir la taille originale de 1600 * 1200?

Je suis coincé sur ce problème de deux semaines!

Merci d'avance.

Était-ce utile?

La solution 2

Résolu comme suit.

UIView *bgView = [[UIView alloc] initwithFrame:CGRectMake(0, 0, 1600, 1200)];
UIGraphicsBeginImageContext(tempView.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil);

Merci pour votre soutien pour résoudre le problème

Autres conseils

Le cadre du UIImageView n'a rien à voir avec la taille de l'image qu'il affiche. Si vous affichez un pixel 1200x1600 dans un imageView 75x75 la taille de l'image en mémoire est encore 1200x1600. Quelque part dans votre traitement de l'image que vous remaniant sa taille.

Vous devez redimensionner les images par programmation dans les coulisses et ignorer la façon dont ils sont affichés. Pour la plus haute fidélité, je vous suggère de préformage tout le traitement sur l'image en taille réelle, puis le redimensionnement que le résultat final. Pour une vitesse et une faible consommation de mémoire, redimensionner les plus petits, processus, puis redimensionner à nouveau au besoin.

J'utilise Trevor Harmon UIImage + redimensionner pour redimensionner les images.

Sa méthode de base ressemble à ceci:

- (UIImage *)resizedImage:(CGSize)newSize
                transform:(CGAffineTransform)transform
           drawTransposed:(BOOL)transpose
     interpolationQuality:(CGInterpolationQuality)quality 
{
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width);
    CGImageRef imageRef = self.CGImage;

    // Build a context that's the same dimensions as the new size
    CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                newRect.size.width,
                                                newRect.size.height,
                                                CGImageGetBitsPerComponent(imageRef),
                                                0,
                                                CGImageGetColorSpace(imageRef),
                                                CGImageGetBitmapInfo(imageRef));

    // Rotate and/or flip the image if required by its orientation
    CGContextConcatCTM(bitmap, transform);

    // Set the quality level to use when rescaling
    CGContextSetInterpolationQuality(bitmap, quality);

    // Draw into the context; this scales the image
    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef);

    // Get the resized image from the context and a UIImage
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    // Clean up
    CGContextRelease(bitmap);
    CGImageRelease(newImageRef);

    return newImage;
}

Harmon m'a sauvé des dizaines d'heures de travail en essayant d'obtenir Redimensionnement fait correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top