0

私は数日間フォーラムを探して検索してきましたが、現在直面しているこの問題を解決する方法を理解していないようです.iPhone用の小さなアプリを書いているときに、アルバムから写真を撮り、フィルター。

imagePickerController を使用して、フォト アルバムまたはカメラから画像を選択しています。

私が使用しているコードは、小さなjpg画像「001.jpg」で動作することを目的としていました

    - (void)viewDidLoad {
[self.imageView setImage:[UIImage imageNamed:@"001.jpg"]];
}

相対調整スライダーは次のようになります。

(IBAction) sliderMoved:(id)sender;
{
    UIImage *image = [UIImage imageNamed:@"001.jpg"]; ...

最初のフェーズではすべてがうまく機能し、フィルターは jpg に問題なく適用されたので、imagePickerController の実装に進みました。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}

そのため、アルバムから写真を選択して UIImageView に表示することができましたが、フィルターはまだ 001.jpg を探しているため、名前を次のように変更しました。

        - (void)viewDidLoad {
        imageView.image = [UIImage imageNamed:@"UIImagePickerControllerOriginalImage"];
}

- (IBAction) sliderMoved:(id)sender;
{
    UIImage *image = [UIImage imageNamed:@"UIImagePickerControllerOriginalImage"]; ...

基本的に、スライドを移動してフィルターを適用するとクラッシュし、場所が無効であることがわかります。didLoad と SliderMove の両方がピッカー イメージを反映するように変更されましたが、どちらも機能しませんでした。画像を書き直さなければならないと思います。サイズを小さくして名前を付けると、私の理解と知識が本当に止まり、助けが必要になります。

事前に感謝し、何でも役立ちます。

4

2 に答える 2

0

このリンクを確認してください:フォトアルバムに画像を保存する方法

その後、画像ライブラリからその画像を読み取ることができるようになります。また、「UIImagePickerControllerOriginalImage」が情報ディクショナリから画像を取得するために使用されるキーであることを考慮に入れてください。画像名と混同しないでください、それらは異なるものです。

ライブラリから画像をより簡単に読み書きしたい場合は、ALAssetsLibraryを使用することをお勧めします。これは非常に役立ちます。たとえば、アセットに画像を書き込むには、次のようにします。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:finalImage.CGImage orientation:(ALAssetOrientation)finalImage.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error ) {
    if(error){
        //Handle here your error
    }else{
        //Success! you saved your image!
        }
    }
 }];

//release your library

編集

アセットを使用したくない場合は、いつでもドキュメントフォルダを使用できます。この方法を見てください:

- (void)saveImage: (UIImage*)image
{
if (image != nil)
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                  NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                   [NSString stringWithString: @"your_image_name.png"] ];
    NSData* data = UIImagePNGRepresentation(image);
    [data writeToFile:path atomically:YES];
}

}

- (UIImage*)loadImage
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                  NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                  [NSString stringWithString: @"your_image_name.png"] ];
UIImage* image = [UIImage imageWithContentsOfFile:path];
return image;

}

あなたのための多くの回避策があります。1つは、その画像をドキュメントに保存し(上記の方法で)、常にそのコピーをドキュメントで処理することです。ただし、もちろん、ディスクの使用量に注意する必要があります。また、画像はカメラロールではなく内部フォルダにあるため、ユーザーはその画像にアクセスできないことに注意してください。

于 2012-10-11T14:41:25.600 に答える
0

元の選択した画像だけが必要な場合は、UIImagePickerControllerクラスのデリゲートがもう 1 つあります。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

選択した画像を提供するこのデリゲートを使用します。また、選択中の画像の編集を無効にすることもできます。

于 2012-10-11T15:12:02.383 に答える