Mam przycisk zapisu o nazwie Zapisz do albumu fotograficznego. Na górze przycisku znajduje się mały UIImageView, w którym użytkownik może kliknąć przycisk poniżej, aby zapisać rzeczywisty rozmiar zdjęcia w albumie fotograficznym. Mój problem polega na tym, że po kliknięciu przycisku zapisu pojawia się błąd: Nie można zapisać obrazu do albumu fotograficznego.

Myślę, że zrobiłem to dobrze, ale moje doświadczenie jest zbyt ograniczone.

H Plik:

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController  {

    IBOutlet UIButton *btnReturn;
    IBOutlet UIButton *savePhoto;
    IBOutlet UIImage *saveImage;

}

@property (nonatomic, retain) IBOutlet UIButton *btnReturn;
@property (nonatomic, retain) IBOutlet UIButton *savePhoto;
@property (nonatomic, retain) IBOutlet UIImage *saveImage;

-(IBAction) saveToPhotoAlbum;

@end

Poniżej mój kod:

-(IBAction) saveToPhotoAlbum{

    NSString *saveMyPhoto=[NSHomeDirectory() stringByAppendingPathComponent:@"sample.png"];

    UIImage *saved=[UIImage imageWithContentsOfFile:saveMyPhoto]; 

    NSData *imageData = [NSData dataWithContentsOfFile:(NSString *)UIImagePNGRepresentation(saved)];
    [imageData writeToFile:(NSString *)saved atomically:YES ];

    UIImageWriteToSavedPhotosAlbum(saved, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    UIAlertView *alert;


    if (error)
        alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                                           message:@"Unable to save image to Photo Album." 
                                          delegate:self cancelButtonTitle:@"Ok" 
                                 otherButtonTitles:nil];
    else 
        alert = [[UIAlertView alloc] initWithTitle:@"Success" 
                                           message:@"Image saved to Photo Album." 
                                          delegate:self cancelButtonTitle:@"Ok" 
                                 otherButtonTitles:nil];
    [alert show];
    [alert release];
}
0
Amink 28 luty 2012, 17:34

2 odpowiedzi

Najlepsza odpowiedź

Te linie wyglądają naprawdę podejrzanie:

NSString *saveMyPhoto=[NSHomeDirectory() stringByAppendingPathComponent:@"sample.png"];
...
UIImage *saved = [UIImage imageWithContentsOfFile:saveMyPhoto]; 
...
[imageData writeToFile:(NSString *)saved atomically:YES ];

Czego oczekujesz od tego? Otrzymujesz ścieżkę do obrazu, ładujesz go, a następnie zapisujesz ponownie, ale rzuciłeś UIImage na NSString i masz nadzieję, że magicznie zmieni się w prawidłową ścieżkę na dysku?

Jeśli chodzi o pytanie, które zadajesz, czy jesteś pewien, że Twój obraz jest prawidłowym obrazem?

0
deanWombourne 28 luty 2012, 17:44

Po prostu utwórz obiekt UIImage i załaduj obraz z pliku. Następnie po prostu wywołaj funkcję UIIMageWriteToSavedPhotoAlbum i przekaż obiekt UIImage jako pierwszy parametr, a reszta może być NIL. Zobacz Dokumentacja Apple SDK.

1
Community 20 czerwiec 2020, 12:12