@@ -212,32 +212,42 @@ cms_transform_dealloc(CmsTransformObject *self) {
212
212
/* internal functions */
213
213
214
214
static cmsUInt32Number
215
- findLCMStype (char * PILmode ) {
216
- if (strcmp (PILmode , "RGB" ) == 0 || strcmp (PILmode , "RGBA" ) == 0 ||
217
- strcmp (PILmode , "RGBX" ) == 0 ) {
218
- return TYPE_RGBA_8 ;
215
+ findLCMStype (const char * const mode_name ) {
216
+ const ModeID mode = findModeID (mode_name );
217
+ switch (mode ) {
218
+ case IMAGING_MODE_RGB :
219
+ case IMAGING_MODE_RGBA :
220
+ case IMAGING_MODE_RGBX :
221
+ return TYPE_RGBA_8 ;
222
+ case IMAGING_MODE_CMYK :
223
+ return TYPE_CMYK_8 ;
224
+ case IMAGING_MODE_I_16 :
225
+ case IMAGING_MODE_I_16L :
226
+ return TYPE_GRAY_16 ;
227
+ case IMAGING_MODE_I_16B :
228
+ return TYPE_GRAY_16_SE ;
229
+ case IMAGING_MODE_YCbCr :
230
+ return TYPE_YCbCr_8 ;
231
+ case IMAGING_MODE_LAB :
232
+ // LabX equivalent like ALab, but not reversed -- no #define in lcms2
233
+ return (COLORSPACE_SH (PT_LabV2 ) | CHANNELS_SH (3 ) | BYTES_SH (1 ) | EXTRA_SH (1 ));
234
+ default :
235
+ // This function only accepts a subset of the imaging modes Pillow has.
236
+ break ;
219
237
}
220
- if (strcmp (PILmode , "RGBA;16B" ) == 0 ) {
238
+ // The following modes are not valid PIL Image modes.
239
+ if (strcmp (mode_name , "RGBA;16B" ) == 0 ) {
221
240
return TYPE_RGBA_16 ;
222
241
}
223
- if (strcmp (PILmode , "CMYK" ) == 0 ) {
224
- return TYPE_CMYK_8 ;
225
- }
226
- if (strcmp (PILmode , "I;16" ) == 0 || strcmp (PILmode , "I;16L" ) == 0 ||
227
- strcmp (PILmode , "L;16" ) == 0 ) {
242
+ if (strcmp (mode_name , "L;16" ) == 0 ) {
228
243
return TYPE_GRAY_16 ;
229
244
}
230
- if (strcmp (PILmode , "I;16B" ) == 0 || strcmp ( PILmode , "L;16B" ) == 0 ) {
245
+ if (strcmp (mode_name , "L;16B" ) == 0 ) {
231
246
return TYPE_GRAY_16_SE ;
232
247
}
233
- if (strcmp (PILmode , "YCbCr" ) == 0 || strcmp (PILmode , "YCCA" ) == 0 ||
234
- strcmp (PILmode , "YCC" ) == 0 ) {
248
+ if (strcmp (mode_name , "YCCA" ) == 0 || strcmp (mode_name , "YCC" ) == 0 ) {
235
249
return TYPE_YCbCr_8 ;
236
250
}
237
- if (strcmp (PILmode , "LAB" ) == 0 ) {
238
- // LabX equivalent like ALab, but not reversed -- no #define in lcms2
239
- return (COLORSPACE_SH (PT_LabV2 ) | CHANNELS_SH (3 ) | BYTES_SH (1 ) | EXTRA_SH (1 ));
240
- }
241
251
/* presume "1" or "L" by default */
242
252
return TYPE_GRAY_8 ;
243
253
}
0 commit comments