29
29
#include " sys-codecs.h"
30
30
#define kSDUTTypeHEIC ((__bridge CFStringRef )@" public.heic" )
31
31
#define kSDUTTypeHEIF ((__bridge CFStringRef )@" public.heif" )
32
+ #define kSDUTTypeDDS ((__bridge CFStringRef )@" com.microsoft.dds" )
32
33
33
34
34
35
#ifdef unused
@@ -112,6 +113,7 @@ int EncodeImageToFile(const char *uri, REBCDI *codi)
112
113
case CODI_IMG_BMP: type = kUTTypeBMP ; break ; // Device independent bitmap
113
114
case CODI_IMG_TIFF: type = kUTTypeTIFF ; break ; // Tagged Image File Format
114
115
case CODI_IMG_HEIF: type = kSDUTTypeHEIC ; break ;
116
+ case CODI_IMG_DDS: type = kSDUTTypeDDS ; break ; // Microsoft DirectDraw Surface
115
117
default :
116
118
codi->error = 1 ;
117
119
return codi->error ;
@@ -125,7 +127,6 @@ int EncodeImageToFile(const char *uri, REBCDI *codi)
125
127
CGColorSpaceRelease (colorSpace);
126
128
ASSERT_NOT_NULL (img, 2 , " create an image" );
127
129
128
-
129
130
if (uri == NULL ) {
130
131
// writing into preallocated buffer (fixed size!)
131
132
dataDst = CFDataCreateWithBytesNoCopy (NULL , codi->data , codi->len , NULL );
@@ -138,14 +139,20 @@ int EncodeImageToFile(const char *uri, REBCDI *codi)
138
139
}
139
140
ASSERT_NOT_NULL (imgDst, 4 , " create a destination image" );
140
141
// TODO: handle user defined options
141
- prop = CFDictionaryCreateMutable (NULL ,0 ,NULL ,NULL );
142
- CFDictionaryAddValue (prop, kCGImageDestinationLossyCompressionQuality , " 0.2" );
142
+
143
143
CGFloat quality = 0.6 ;
144
- CGImageDestinationAddImage (imgDst, img, (__bridge CFDictionaryRef )@{(__bridge NSString *)kCGImageDestinationLossyCompressionQuality : @(quality)});
145
- CGImageDestinationFinalize (imgDst);
144
+ CGImageDestinationAddImage (imgDst, img, (__bridge CFDictionaryRef )@{
145
+ (__bridge NSString *)kCGImageDestinationLossyCompressionQuality : @(quality)
146
+ });
147
+
148
+ if (!CGImageDestinationFinalize (imgDst)) {
149
+ // failed to finalize!
150
+ error = 6 ;
151
+ }
146
152
} while (FALSE );
147
- if (uri == NULL ) {
153
+ if (uri == NULL && !error ) {
148
154
codi->len = CFDataGetLength (dataDst);
155
+ if (codi->len == 0 ) error = 5 ;
149
156
// CFRelease(dataDst);
150
157
}
151
158
SAFE_CF_RELEASE (img);
0 commit comments