Форум программистов, компьютерный форум, киберфорум
Delphi: FireMonkey
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 2
Регистрация: 20.12.2012
Сообщений: 24
1

SavePhotoToAlbum

23.04.2014, 15:08. Показов 1416. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Пишу приложение под IOS. Как сохранить картинку из Bitmap не в песочницу, а в фотогаллерею телефона? Пробовал использовать компонент TUIImagePickerController, но там можно только задать сохранять ли фото после того как его сделал. А мне нужна возможность сохранять Bitmap в галерею. Знаю про функцию "UIImageWriteToSavedPhotosAlbum" но хоть убей не понимаю как ей воспользоваться. Вроде бы кажется что вопрос весьма должен быть востребованным, но несколько дней в гугле даже по китайским сайтам не помогли Если есть тот кто может написать пример кода сохранения BitMap'а в галлерею, буду очень признателен. Спасибо.
P.S.: речь идет о коде на Delphi FireMonkey.
0
Лучшие ответы (1)
3 / 3 / 2
Регистрация: 20.12.2012
Сообщений: 24
25.04.2014, 10:17  [ТС] 2
Лучший ответ Сообщение было отмечено xenon54 как решение

Решение

Неужели это никому не интересно или никто не знает ответа? Или я что-то не так описал и вопрос непонятен?
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
procedure TDPFImagePickerControllerDelegate.imagePickerController( picker: UIImagePickerController; didFinishPickingMediaWithInfo: NSDictionary );
const
  EType: array [TDPFEditingType] of string = ( 'UIImagePickerControllerMediaType', 'UIImagePickerControllerOriginalImage', 'UIImagePickerControllerEditedImage' );
var
  img                : UIImage;
  Bitmap             : TBitmap;
  Angle              : SIngle;
  mtype              : NSString;
  videoURL           : NSURL;
  videoData          : NSData;
  FileSavedPath      : string;
  isMovie            : Boolean;
  P                  : Pointer;
  newWidth, newHeight: Single;
  scaleFactor        : Single;
begin
  HidePicker;
 
  mtype   := TNSString.Wrap( didFinishPickingMediaWithInfo.objectForKey( ( CocoaNSStringConst( libKit, 'UIImagePickerControllerMediaType' ) as ILocalObject ).GetObjectID ) );
  isMovie := ( mtype.isEqualToString( kUTTypeVideo ) or mtype.isEqualToString( kUTTypeMovie ) );
 
  // movie != video
  if Assigned( FDPFUIImagePickerController.FOndidFinishPickingMovie ) and isMovie then
  begin
    videoURL  := TNSURL.Wrap( didFinishPickingMediaWithInfo.objectForKey( ( CocoaNSStringConst( libKit, 'UIImagePickerControllerMediaURL' ) as ILocalObject ).GetObjectID ) );
    videoData := TNSData.Wrap( TNSData.OCClass.dataWithContentsOfURL( videoUrl ) );
 
    FileSavedPath := UTF8ToString( videoURL.absoluteString.UTF8String );
 
    if FDPFUIImagePickerController.FSaveToAlbum then
      if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum( PNSStr( FileSavedPath ) ) then
        UISaveVideoAtPathToSavedPhotosAlbum( PNSStr( FileSavedPath ), nil, nil, nil );
 
    FDPFUIImagePickerController.FOndidFinishPickingMovie( FDPFUIImagePickerController, videoData.length, FileSavedPath );
    if FileSavedPath <> UTF8ToString( videoURL.absoluteString.UTF8String ) then
      videoData.writeToFile( NSStr( FileSavedPath ), true );
  end
  else if Assigned( FDPFUIImagePickerController.FOndidFinishPickingImage ) and not isMovie then
  begin
    img    := TUIImage.Wrap( didFinishPickingMediaWithInfo.objectForKey( ( CocoaNSStringConst( libKit, EType[FDPFUIImagePickerController.FEditingType] ) as ILocalObject ).GetObjectID ) );
    Angle  := GetImageOrientation( img );
    Bitmap := UIImageToBitmap( img, Angle );
    try
      FDPFUIImagePickerController.FOndidFinishPickingImage( FDPFUIImagePickerController, BitMap );
    finally
      Bitmap.DisposeOf;
    end;
  end
  else if Assigned( FDPFUIImagePickerController.FOndidFinishPickingUIImage ) and not isMovie then
  begin
    img := TUIImage.Wrap( didFinishPickingMediaWithInfo.objectForKey( ( CocoaNSStringConst( libKit, EType[FDPFUIImagePickerController.FEditingType] ) as ILocalObject ).GetObjectID ) );
    FDPFUIImagePickerController.FOndidFinishPickingUIImage( FDPFUIImagePickerController, img );
  end
  else if Assigned( FDPFUIImagePickerController.FOndidFinishPickingSavedImage ) and not isMovie then
  begin
    P := didFinishPickingMediaWithInfo.objectForKey( ( CocoaNSStringConst( libKit, EType[FDPFUIImagePickerController.FEditingType] ) as ILocalObject ).GetObjectID );
 
    if Assigned( FDPFUIImagePickerController.FOnResizeImage ) then
    begin
      img       := TUIImage.Wrap( P );
      newWidth  := img.size.width;
      newHeight := img.size.height;
      FDPFUIImagePickerController.FOnResizeImage( FDPFUIImagePickerController, newWidth, newHeight );
 
      if img.size.width > img.size.height then
      begin
        scaleFactor := img.size.width / img.size.height;
        newHeight   := newHeight / scaleFactor;
      end
      else
      begin
        scaleFactor := img.size.height / img.size.width;
        newWidth    := newWidth / scaleFactor;
      end;
 
      UIGraphicsBeginImageContext( CGSizeMake( newWidth, newHeight ) { , false, 0.0 } );
      img.drawInRect( CGRectMake( 0, 0, newWidth, newHeight ) );
      P := UIGraphicsGetImageFromCurrentImageContext( );
      UIGraphicsEndImageContext( );
    end;
 
    if FDPFUIImagePickerController.FSaveImageType = itPNG then
    begin
      P             := UIImagePNGRepresentation( P );
      FileSavedPath := '.png';
    end
    else
    begin
      P             := UIImageJPEGRepresentation( P, 1.0 );
      FileSavedPath := '.jpg';
    end;
 
    FileSavedPath := GetTempDirectory + GetUUID + FileSavedPath;
    if Assigned( P ) then
      if not TNSData.Wrap( P ).writeToFile( NSStr( FileSavedPath ), true ) then
        FileSavedPath := '';
    FDPFUIImagePickerController.FOndidFinishPickingSavedImage( FDPFUIImagePickerController, FileSavedPath );
  end;
 
  if not isMovie and ( FDPFUIImagePickerController.FDPFImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera ) and FDPFUIImagePickerController.FSaveToAlbum then
  begin
    p := didFinishPickingMediaWithInfo.objectForKey( ( CocoaNSStringConst( libKit, EType[FDPFUIImagePickerController.FEditingType] ) as ILocalObject ).GetObjectID );
    if FDPFUIImagePickerController.FSaveToAlbum then
      UIImageWriteToSavedPhotosAlbum( P, nil, nil, nil );
  end;
 
end;


Под спойлером функция от "TUIImagePickerController", которая сохраняет фото в галерею после снимка.

Самая последняя функция
Delphi
1
 UIImageWriteToSavedPhotosAlbum( P, nil, nil, nil );
как раз таки сохраняет фото в галерею iphone, но вот я никак не могу разобраться как правильно сформировать первый аргумент исходя из того что у меня есть Bitmap.
0
3 / 3 / 2
Регистрация: 20.12.2012
Сообщений: 24
30.04.2014, 02:19  [ТС] 3
UP..........
0
30.04.2014, 02:19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru