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