forked from bartvdbraak/blender
Image save as operator 'BW' option wasnt working on some formats, now only show when its supported.
This commit is contained in:
parent
ddf934dedf
commit
a044f532ab
@ -60,10 +60,10 @@ char BKE_ftype_to_imtype(const int ftype);
|
|||||||
int BKE_imtype_to_ftype(char imtype);
|
int BKE_imtype_to_ftype(char imtype);
|
||||||
|
|
||||||
int BKE_imtype_is_movie(const char imtype);
|
int BKE_imtype_is_movie(const char imtype);
|
||||||
int BKE_imtype_supports_alpha(const char imtype);
|
|
||||||
int BKE_imtype_supports_zbuf(const char imtype);
|
int BKE_imtype_supports_zbuf(const char imtype);
|
||||||
int BKE_imtype_supports_compress(const char imtype);
|
int BKE_imtype_supports_compress(const char imtype);
|
||||||
int BKE_imtype_supports_quality(const char imtype);
|
int BKE_imtype_supports_quality(const char imtype);
|
||||||
|
char BKE_imtype_valid_channels(const char imtype);
|
||||||
char BKE_imtype_valid_depths(const char imtype);
|
char BKE_imtype_valid_depths(const char imtype);
|
||||||
|
|
||||||
char BKE_imtype_from_arg(const char *arg);
|
char BKE_imtype_from_arg(const char *arg);
|
||||||
@ -115,6 +115,10 @@ struct RenderResult;
|
|||||||
/* image-user gets a new image, check settings */
|
/* image-user gets a new image, check settings */
|
||||||
#define IMA_SIGNAL_USER_NEW_IMAGE 6
|
#define IMA_SIGNAL_USER_NEW_IMAGE 6
|
||||||
|
|
||||||
|
#define IMA_CHAN_FLAG_BW 1
|
||||||
|
#define IMA_CHAN_FLAG_RGB 2
|
||||||
|
#define IMA_CHAN_FLAG_ALPHA 4
|
||||||
|
|
||||||
/* depending Image type, and (optional) ImageUser setting it returns ibuf */
|
/* depending Image type, and (optional) ImageUser setting it returns ibuf */
|
||||||
/* always call to make signals work */
|
/* always call to make signals work */
|
||||||
struct ImBuf *BKE_image_get_ibuf(struct Image *ima, struct ImageUser *iuser);
|
struct ImBuf *BKE_image_get_ibuf(struct Image *ima, struct ImageUser *iuser);
|
||||||
|
@ -900,24 +900,6 @@ int BKE_imtype_is_movie(const char imtype)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BKE_imtype_supports_alpha(const char imtype)
|
|
||||||
{
|
|
||||||
switch(imtype) {
|
|
||||||
case R_IMF_IMTYPE_TARGA:
|
|
||||||
case R_IMF_IMTYPE_IRIS:
|
|
||||||
case R_IMF_IMTYPE_PNG:
|
|
||||||
/* case R_IMF_IMTYPE_BMP: */ /* read but not write */
|
|
||||||
case R_IMF_IMTYPE_RADHDR:
|
|
||||||
case R_IMF_IMTYPE_TIFF:
|
|
||||||
case R_IMF_IMTYPE_OPENEXR:
|
|
||||||
case R_IMF_IMTYPE_MULTILAYER:
|
|
||||||
case R_IMF_IMTYPE_DDS:
|
|
||||||
case R_IMF_IMTYPE_JP2:
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int BKE_imtype_supports_zbuf(const char imtype)
|
int BKE_imtype_supports_zbuf(const char imtype)
|
||||||
{
|
{
|
||||||
switch(imtype) {
|
switch(imtype) {
|
||||||
@ -948,6 +930,39 @@ int BKE_imtype_supports_quality(const char imtype)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char BKE_imtype_valid_channels(const char imtype)
|
||||||
|
{
|
||||||
|
char chan_flag= IMA_CHAN_FLAG_RGB; /* assume all support rgb */
|
||||||
|
|
||||||
|
/* alpha */
|
||||||
|
switch(imtype) {
|
||||||
|
case R_IMF_IMTYPE_TARGA:
|
||||||
|
case R_IMF_IMTYPE_IRIS:
|
||||||
|
case R_IMF_IMTYPE_PNG:
|
||||||
|
/* case R_IMF_IMTYPE_BMP: */ /* read but not write */
|
||||||
|
case R_IMF_IMTYPE_RADHDR:
|
||||||
|
case R_IMF_IMTYPE_TIFF:
|
||||||
|
case R_IMF_IMTYPE_OPENEXR:
|
||||||
|
case R_IMF_IMTYPE_MULTILAYER:
|
||||||
|
case R_IMF_IMTYPE_DDS:
|
||||||
|
case R_IMF_IMTYPE_JP2:
|
||||||
|
chan_flag |= IMA_CHAN_FLAG_ALPHA;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* bw */
|
||||||
|
switch(imtype) {
|
||||||
|
case R_IMF_IMTYPE_PNG:
|
||||||
|
case R_IMF_IMTYPE_JPEG90:
|
||||||
|
case R_IMF_IMTYPE_TARGA:
|
||||||
|
case R_IMF_IMTYPE_RAWTGA:
|
||||||
|
case R_IMF_IMTYPE_TIFF:
|
||||||
|
case R_IMF_IMTYPE_IRIS:
|
||||||
|
chan_flag |= IMA_CHAN_FLAG_BW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return chan_flag;
|
||||||
|
}
|
||||||
|
|
||||||
char BKE_imtype_valid_depths(const char imtype)
|
char BKE_imtype_valid_depths(const char imtype)
|
||||||
{
|
{
|
||||||
switch (imtype) {
|
switch (imtype) {
|
||||||
|
@ -187,7 +187,7 @@ void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
|
|||||||
/* Dynamic Enums
|
/* Dynamic Enums
|
||||||
* strings are not freed, assumed pointing to static location. */
|
* strings are not freed, assumed pointing to static location. */
|
||||||
|
|
||||||
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item);
|
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item);
|
||||||
void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem);
|
void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem);
|
||||||
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item);
|
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item);
|
||||||
void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value);
|
void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value);
|
||||||
|
@ -2696,7 +2696,7 @@ int rna_parameter_size_alloc(PropertyRNA *parm)
|
|||||||
|
|
||||||
/* Dynamic Enums */
|
/* Dynamic Enums */
|
||||||
|
|
||||||
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item)
|
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
|
||||||
{
|
{
|
||||||
EnumPropertyItem *newitems;
|
EnumPropertyItem *newitems;
|
||||||
int tot= *totitem;
|
int tot= *totitem;
|
||||||
|
@ -217,6 +217,10 @@ EnumPropertyItem image_color_mode_items[] ={
|
|||||||
{R_IMF_PLANES_RGBA, "RGBA", 0, "RGBA", "Images are saved with RGB and Alpha data (if supported)"},
|
{R_IMF_PLANES_RGBA, "RGBA", 0, "RGBA", "Images are saved with RGB and Alpha data (if supported)"},
|
||||||
{0, NULL, 0, NULL, NULL}};
|
{0, NULL, 0, NULL, NULL}};
|
||||||
|
|
||||||
|
#define IMAGE_COLOR_MODE_BW image_color_mode_items[0]
|
||||||
|
#define IMAGE_COLOR_MODE_RGB image_color_mode_items[1]
|
||||||
|
#define IMAGE_COLOR_MODE_RGBA image_color_mode_items[2]
|
||||||
|
|
||||||
EnumPropertyItem image_color_depth_items[] = {
|
EnumPropertyItem image_color_depth_items[] = {
|
||||||
/* 1 (monochrome) not used */
|
/* 1 (monochrome) not used */
|
||||||
{R_IMF_CHAN_DEPTH_8, "8", 0, "8", "8 bit color channels"},
|
{R_IMF_CHAN_DEPTH_8, "8", 0, "8", "8 bit color channels"},
|
||||||
@ -615,11 +619,16 @@ static void rna_ImageFormatSettings_file_format_set(PointerRNA *ptr, int value)
|
|||||||
{
|
{
|
||||||
ImageFormatData *imf= (ImageFormatData *)ptr->data;
|
ImageFormatData *imf= (ImageFormatData *)ptr->data;
|
||||||
ID *id= ptr->id.data;
|
ID *id= ptr->id.data;
|
||||||
|
const char is_render= (id && GS(id->name) == ID_SCE);
|
||||||
|
/* see note below on why this is */
|
||||||
|
const char chan_flag= BKE_imtype_valid_channels(imf->imtype) | (is_render ? IMA_CHAN_FLAG_BW : 0);
|
||||||
|
|
||||||
imf->imtype= value;
|
imf->imtype= value;
|
||||||
|
|
||||||
/* ensure depth and color settings match */
|
/* ensure depth and color settings match */
|
||||||
if (!BKE_imtype_supports_alpha(imf->imtype)) {
|
if ( ((imf->planes == R_IMF_PLANES_BW) && !(chan_flag & IMA_CHAN_FLAG_BW)) ||
|
||||||
|
((imf->planes == R_IMF_PLANES_RGBA) && !(chan_flag & IMA_CHAN_FLAG_ALPHA)))
|
||||||
|
{
|
||||||
imf->planes= R_IMF_PLANES_RGB;
|
imf->planes= R_IMF_PLANES_RGB;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -675,16 +684,30 @@ static EnumPropertyItem *rna_ImageFormatSettings_color_mode_itemf(bContext *C, P
|
|||||||
PropertyRNA *UNUSED(prop), int *free)
|
PropertyRNA *UNUSED(prop), int *free)
|
||||||
{
|
{
|
||||||
ImageFormatData *imf= (ImageFormatData *)ptr->data;
|
ImageFormatData *imf= (ImageFormatData *)ptr->data;
|
||||||
|
ID *id= ptr->id.data;
|
||||||
|
const char is_render= (id && GS(id->name) == ID_SCE);
|
||||||
|
|
||||||
if ((imf == NULL) || BKE_imtype_supports_alpha(imf->imtype)) {
|
/* note, we need to act differently for render
|
||||||
|
* where 'BW' will force greyscale even if the output format writes
|
||||||
|
* as RGBA, this is age old blender convention and not sure how useful
|
||||||
|
* it really is but keep it for now - campbell */
|
||||||
|
const char chan_flag= BKE_imtype_valid_channels(imf->imtype) | (is_render ? IMA_CHAN_FLAG_BW : 0);
|
||||||
|
|
||||||
|
if (chan_flag == (IMA_CHAN_FLAG_BW|IMA_CHAN_FLAG_RGB|IMA_CHAN_FLAG_ALPHA)) {
|
||||||
return image_color_mode_items;
|
return image_color_mode_items;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
static EnumPropertyItem color_mode_items[] ={
|
int totitem= 0;
|
||||||
{R_IMF_PLANES_BW, "BW", 0, "BW", "Images get saved in 8 bits grayscale (only PNG, JPEG, TGA, TIF)"},
|
EnumPropertyItem *item= NULL;
|
||||||
{R_IMF_PLANES_RGB, "RGB", 0, "RGB", "Images are saved with RGB (color) data"},
|
|
||||||
{0, NULL, 0, NULL, NULL}};
|
if (chan_flag & IMA_CHAN_FLAG_BW) RNA_enum_item_add(&item, &totitem, &IMAGE_COLOR_MODE_BW);
|
||||||
return color_mode_items;
|
if (chan_flag & IMA_CHAN_FLAG_RGB) RNA_enum_item_add(&item, &totitem, &IMAGE_COLOR_MODE_RGB);
|
||||||
|
if (chan_flag & IMA_CHAN_FLAG_ALPHA) RNA_enum_item_add(&item, &totitem, &IMAGE_COLOR_MODE_RGBA);
|
||||||
|
|
||||||
|
RNA_enum_item_end(&item, &totitem);
|
||||||
|
*free= 1;
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2727,18 +2750,6 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
|
|||||||
RNA_def_struct_path_func(srna, "rna_RenderSettings_path");
|
RNA_def_struct_path_func(srna, "rna_RenderSettings_path");
|
||||||
RNA_def_struct_ui_text(srna, "Render Data", "Rendering settings for a Scene datablock");
|
RNA_def_struct_ui_text(srna, "Render Data", "Rendering settings for a Scene datablock");
|
||||||
|
|
||||||
#if 0 /* moved */
|
|
||||||
|
|
||||||
prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
|
|
||||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "planes");
|
|
||||||
RNA_def_property_enum_items(prop, image_color_mode_items);
|
|
||||||
RNA_def_property_ui_text(prop, "Color Mode",
|
|
||||||
"Choose BW for saving greyscale images, RGB for saving red, green and blue channels, "
|
|
||||||
"and RGBA for saving red, green, blue and alpha channels");
|
|
||||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Render Data */
|
/* Render Data */
|
||||||
prop= RNA_def_property(srna, "image_settings", PROP_POINTER, PROP_NONE);
|
prop= RNA_def_property(srna, "image_settings", PROP_POINTER, PROP_NONE);
|
||||||
RNA_def_property_flag(prop, PROP_NEVER_NULL);
|
RNA_def_property_flag(prop, PROP_NEVER_NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user