Domanda

Sto sviluppando un'applicazione per iPhone che ridimensiona e si fonde immagini.

Voglio selezionare due foto di dimensioni 1600x1200 dalla libreria di foto e quindi unire sia in una singola immagine e salvare quella nuova immagine di nuovo alla libreria di foto.

Tuttavia, non posso ottenere la dimensione giusta per l'immagine unita.

prendo due punti di vista di immagine del telaio 320x480 e impostare l'immagine della vista alle mie immagini importate. Dopo manipolare le immagini (zoom, ritaglio, rotazione), ho poi salvare l'immagine dell'album. Quando controllo la dimensione dell'immagine si vede 600x800. Come faccio ad avere le dimensioni originali del 1600 * 1200?

Sono stato bloccato su questo problema da due settimane!

Grazie in anticipo.

È stato utile?

Soluzione 2

risolto come segue.

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);

Grazie per tutto il vostro supporto per risolvere il problema

Altri suggerimenti

Il telaio del UIImageView ha nulla a che fare con la dimensione dell'immagine viene visualizzato. Se si visualizza un pixel 1200x1600 in un IMAGEVIEW 75x75 le dimensioni dell'immagine in memoria è ancora 1200x1600. Da qualche parte nella vostra elaborazione dell'immagine che si sta reimpostando la sua dimensione.

È necessario ridimensionare le immagini a livello di codice dietro le quinte e ignorare il modo in cui vengono visualizzati. Per la massima fedeltà, vi suggerisco di preformatura tutte le elaborazioni sull'immagine a grandezza naturale e quindi il ridimensionamento solo il risultato finale. Per la velocità e l'uso della memoria bassa, ridimensionare piccolo prima, processo e quindi ridimensionare nuovamente come necessario.

Trevor Harmon di UIImage + Ridimensiona per ridimensionare le immagini.

Il suo metodo di base è simile al seguente:

- (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 mi ha salvato decine di ore uomo che cerca di ottenere il ridimensionamento fatto correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top