Blender  V3.3
Classes | Macros | Variables
source/blender/blenkernel/intern/image.cc File Reference
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <fcntl.h>
#include <unistd.h>
#include <regex>
#include <string>
#include "BLI_array.hh"
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "IMB_metadata.h"
#include "IMB_moviecache.h"
#include "IMB_openexr.h"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_defaults.h"
#include "DNA_light_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "DNA_simulation_types.h"
#include "DNA_world_types.h"
#include "BLI_blenlib.h"
#include "BLI_math_vector.h"
#include "BLI_mempool.h"
#include "BLI_system.h"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_timecode.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_bpath.h"
#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_icons.h"
#include "BKE_idtype.h"
#include "BKE_image.h"
#include "BKE_image_format.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_node_tree_update.h"
#include "BKE_packedFile.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_workspace.h"
#include "BLF_api.h"
#include "PIL_time.h"
#include "RE_pipeline.h"
#include "SEQ_utils.h"
#include "GPU_material.h"
#include "GPU_texture.h"
#include "BLI_sys_types.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "BLO_read_write.h"
#include "DNA_node_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"

Go to the source code of this file.

Classes

struct  ImageCacheKey
 
struct  ImageFillData
 
struct  StampDataCustomField
 
struct  StampData
 
struct  ImagePoolItem
 
struct  ImagePool
 

Macros

#define DNA_DEPRECATED_ALLOW
 
#define TEXT_SIZE_CHECK(str, w, h)    ((str[0]) && ((void)(h = h_fixed), (w = (int)BLF_width(mono, str, sizeof(str)))))
 
#define TEXT_SIZE_CHECK_WORD_WRAP(str, w, h)
 
#define BUFF_MARGIN_X   2
 
#define BUFF_MARGIN_Y   1
 
#define CALL(member, value_str)
 

Functions

Allocate & Free, Data Managing
static void image_init (Image *ima, short source, short type)
 
static void image_free_packedfiles (Image *ima)
 
static void copy_image_packedfiles (ListBase *lb_dst, const ListBase *lb_src)
 
static void image_free_cached_frames (Image *image)
 
void BKE_image_free_packedfiles (Image *ima)
 
void BKE_image_free_views (Image *image)
 
static void image_free_anims (Image *ima)
 
void BKE_image_free_buffers_ex (Image *ima, bool do_lock)
 
void BKE_image_free_buffers (Image *ima)
 
void BKE_image_free_data (Image *ima)
 
static Image * image_alloc (Main *bmain, const char *name, short source, short type)
 
static ImBuf * image_get_cached_ibuf_for_index_entry (Image *ima, int index, int entry, bool *r_is_cached_empty)
 
static void image_assign_ibuf (Image *ima, ImBuf *ibuf, int index, int entry)
 
static void image_remove_ibuf (Image *ima, int index, int entry)
 
void BKE_image_merge (Main *bmain, Image *dest, Image *source)
 
bool BKE_image_scale (Image *image, int width, int height)
 
bool BKE_image_has_opengl_texture (Image *ima)
 
static int image_get_tile_number_from_iuser (const Image *ima, const ImageUser *iuser)
 
ImageTile * BKE_image_get_tile (Image *ima, int tile_number)
 
ImageTile * BKE_image_get_tile_from_iuser (Image *ima, const ImageUser *iuser)
 
int BKE_image_get_tile_from_pos (Image *ima, const float uv[2], float r_uv[2], float r_ofs[2])
 
void BKE_image_get_tile_uv (const Image *ima, const int tile_number, float r_uv[2])
 
int BKE_image_find_nearest_tile_with_offset (const Image *image, const float co[2], float r_uv_offset[2])
 
int BKE_image_find_nearest_tile (const struct Image *image, const float co[2])
 
static void image_init_color_management (Image *ima)
 
char BKE_image_alpha_mode_from_extension_ex (const char *filepath)
 
void BKE_image_alpha_mode_from_extension (Image *image)
 
Image * BKE_image_load (Main *bmain, const char *filepath)
 
Image * BKE_image_load_exists_ex (Main *bmain, const char *filepath, bool *r_exists)
 
Image * BKE_image_load_exists (Main *bmain, const char *filepath)
 
static void image_buf_fill_isolated (void *usersata_v)
 
static ImBuf * add_ibuf_size (unsigned int width, unsigned int height, const char *name, int depth, int floatbuf, short gen_type, const float color[4], ColorManagedColorspaceSettings *colorspace_settings)
 
Image * BKE_image_add_generated (Main *bmain, unsigned int width, unsigned int height, const char *name, int depth, int floatbuf, short gen_type, const float color[4], const bool stereo3d, const bool is_data, const bool tiled)
 
static void image_colorspace_from_imbuf (Image *image, const ImBuf *ibuf)
 
Image * BKE_image_add_from_imbuf (Main *bmain, ImBuf *ibuf, const char *name)
 
void BKE_image_replace_imbuf (Image *image, ImBuf *ibuf)
 
static bool image_memorypack_imbuf (Image *ima, ImBuf *ibuf, int view, int tile_number, const char *filepath)
 
bool BKE_image_memorypack (Image *ima)
 
void BKE_image_packfiles (ReportList *reports, Image *ima, const char *basepath)
 
void BKE_image_packfiles_from_mem (ReportList *reports, Image *ima, char *data, const size_t data_len)
 
void BKE_image_tag_time (Image *ima)
 
static uintptr_t image_mem_size (Image *image)
 
void BKE_image_print_memlist (Main *bmain)
 
static bool imagecache_check_dirty (ImBuf *ibuf, void *UNUSED(userkey), void *UNUSED(userdata))
 
void BKE_image_free_all_textures (Main *bmain)
 
static bool imagecache_check_free_anim (ImBuf *ibuf, void *UNUSED(userkey), void *userdata)
 
void BKE_image_free_anim_ibufs (Image *ima, int except_frame)
 
void BKE_image_all_free_anim_ibufs (Main *bmain, int cfra)
 
Image Cache
static unsigned int imagecache_hashhash (const void *key_v)
 
static bool imagecache_hashcmp (const void *a_v, const void *b_v)
 
static void imagecache_keydata (void *userkey, int *framenr, int *proxy, int *render_flags)
 
static void imagecache_put (Image *image, int index, ImBuf *ibuf)
 
static void imagecache_remove (Image *image, int index)
 
static struct ImBuf * imagecache_get (Image *image, int index, bool *r_is_cached_empty)
 
New Image API
Image * BKE_image_ensure_viewer (Main *bmain, int type, const char *name)
 
static void image_viewer_create_views (const RenderData *rd, Image *ima)
 
void BKE_image_ensure_viewer_views (const RenderData *rd, Image *ima, ImageUser *iuser)
 
static void image_walk_ntree_all_users (bNodeTree *ntree, ID *id, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
 
static void image_walk_gpu_materials (ID *id, ListBase *gpu_materials, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
 
static void image_walk_id_all_users (ID *id, bool skip_nested_nodes, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
 
void BKE_image_walk_all_users (const Main *mainp, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
 
static void image_tag_frame_recalc (Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata)
 
static void image_tag_reload (Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata)
 
void BKE_imageuser_default (ImageUser *iuser)
 
void BKE_image_init_imageuser (Image *ima, ImageUser *iuser)
 
static void image_free_tile (Image *ima, ImageTile *tile)
 
void BKE_image_signal (Main *bmain, Image *ima, ImageUser *iuser, int signal)
 
static RenderPass * image_render_pass_get (RenderLayer *rl, const int pass, const int view, int *r_passindex)
 
void BKE_image_get_tile_label (Image *ima, ImageTile *tile, char *label, int len_label)
 
bool BKE_image_get_tile_info (char *filepath, ListBase *tiles, int *r_tile_start, int *r_tile_range)
 
ImageTile * BKE_image_add_tile (struct Image *ima, int tile_number, const char *label)
 
bool BKE_image_remove_tile (struct Image *ima, ImageTile *tile)
 
void BKE_image_reassign_tile (struct Image *ima, ImageTile *tile, int new_tile_number)
 
static int tile_sort_cb (const void *a, const void *b)
 
void BKE_image_sort_tiles (struct Image *ima)
 
bool BKE_image_fill_tile (struct Image *ima, ImageTile *tile, int width, int height, const float color[4], int gen_type, int planes, bool is_float)
 
bool BKE_image_is_filename_tokenized (char *filepath)
 
void BKE_image_ensure_tile_token (char *filename)
 
bool BKE_image_tile_filepath_exists (const char *filepath)
 
char * BKE_image_get_tile_strformat (const char *filepath, eUDIM_TILE_FORMAT *r_tile_format)
 
bool BKE_image_get_tile_number_from_filepath (const char *filepath, const char *pattern, eUDIM_TILE_FORMAT tile_format, int *r_tile_number)
 
void BKE_image_set_filepath_from_tile_number (char *filepath, const char *pattern, eUDIM_TILE_FORMAT tile_format, int tile_number)
 
RenderPass * BKE_image_multilayer_index (RenderResult *rr, ImageUser *iuser)
 
void BKE_image_multiview_index (const Image *ima, ImageUser *iuser)
 
bool BKE_image_is_multilayer (const Image *ima)
 
bool BKE_image_is_multiview (const Image *ima)
 
bool BKE_image_is_stereo (const Image *ima)
 
static void image_init_multilayer_multiview (Image *ima, RenderResult *rr)
 
RenderResult * BKE_image_acquire_renderresult (Scene *scene, Image *ima)
 
void BKE_image_release_renderresult (Scene *scene, Image *ima)
 
bool BKE_image_is_openexr (struct Image *ima)
 
void BKE_image_backup_render (Scene *scene, Image *ima, bool free_current_slot)
 
Multiview Load OpenEXR
static void image_init_after_load (Image *ima, ImageUser *iuser, ImBuf *UNUSED(ibuf))
 
static int imbuf_alpha_flags_for_image (Image *ima)
 
static ImBuf * image_load_sequence_multilayer (Image *ima, ImageUser *iuser, int entry, int frame)
 
static ImBuf * load_movie_single (Image *ima, ImageUser *iuser, int frame, const int view_id)
 
static ImBuf * image_load_movie_file (Image *ima, ImageUser *iuser, int frame)
 
static ImBuf * load_image_single (Image *ima, ImageUser *iuser, int cfra, const int view_id, const bool has_packed, const bool is_sequence, bool *r_cache_ibuf)
 
static ImBuf * image_get_ibuf_multilayer (Image *ima, ImageUser *iuser)
 
static ImBuf * image_get_render_result (Image *ima, ImageUser *iuser, void **r_lock)
 
static int image_get_multiview_index (Image *ima, ImageUser *iuser)
 
static void image_get_entry_and_index (Image *ima, ImageUser *iuser, int *r_entry, int *r_index)
 
static ImBuf * image_get_cached_ibuf (Image *ima, ImageUser *iuser, int *r_entry, int *r_index, bool *r_is_cached_empty)
 
BLI_INLINE bool image_quick_test (Image *ima, const ImageUser *iuser)
 
ImBuf * BKE_image_acquire_ibuf (Image *ima, ImageUser *iuser, void **r_lock)
 
void BKE_image_release_ibuf (Image *ima, ImBuf *ibuf, void *lock)
 
bool BKE_image_has_ibuf (Image *ima, ImageUser *iuser)
 
Pool for Image Buffers
ImagePool * BKE_image_pool_new (void)
 
void BKE_image_pool_free (ImagePool *pool)
 
BLI_INLINE ImBuf * image_pool_find_item (ImagePool *pool, Image *image, int entry, int index, bool *found)
 
ImBuf * BKE_image_pool_acquire_ibuf (Image *ima, ImageUser *iuser, ImagePool *pool)
 
void BKE_image_pool_release_ibuf (Image *ima, ImBuf *ibuf, ImagePool *pool)
 
int BKE_image_user_frame_get (const ImageUser *iuser, int cfra, bool *r_is_in_range)
 
void BKE_image_user_frame_calc (Image *ima, ImageUser *iuser, int cfra)
 
static void image_editors_update_frame (Image *ima, ID *UNUSED(iuser_id), ImageUser *iuser, void *customdata)
 
void BKE_image_editors_update_frame (const Main *bmain, int cfra)
 
static void image_user_id_has_animation (Image *ima, ID *UNUSED(iuser_id), ImageUser *UNUSED(iuser), void *customdata)
 
bool BKE_image_user_id_has_animation (ID *id)
 
static void image_user_id_eval_animation (Image *ima, ID *UNUSED(iduser_id), ImageUser *iuser, void *customdata)
 
void BKE_image_user_id_eval_animation (Depsgraph *depsgraph, ID *id)
 
void BKE_image_user_file_path (const ImageUser *iuser, const Image *ima, char *filepath)
 
void BKE_image_user_file_path_ex (const Main *bmain, const ImageUser *iuser, const Image *ima, char *filepath, const bool resolve_udim, const bool resolve_multiview)
 
bool BKE_image_has_alpha (Image *image)
 
void BKE_image_get_size (Image *image, ImageUser *iuser, int *r_width, int *r_height)
 
void BKE_image_get_size_fl (Image *image, ImageUser *iuser, float r_size[2])
 
void BKE_image_get_aspect (Image *image, float *r_aspx, float *r_aspy)
 
unsigned char * BKE_image_get_pixels_for_frame (struct Image *image, int frame, int tile)
 
float * BKE_image_get_float_pixels_for_frame (struct Image *image, int frame, int tile)
 
int BKE_image_sequence_guess_offset (Image *image)
 
bool BKE_image_has_anim (Image *ima)
 
bool BKE_image_has_packedfile (const Image *ima)
 
bool BKE_image_has_filepath (const Image *ima)
 
bool BKE_image_is_animated (Image *image)
 
bool BKE_image_has_multiple_ibufs (Image *image)
 
bool BKE_image_is_dirty_writable (Image *image, bool *r_is_writable)
 
bool BKE_image_is_dirty (Image *image)
 
void BKE_image_mark_dirty (Image *UNUSED(image), ImBuf *ibuf)
 
bool BKE_image_buffer_format_writable (ImBuf *ibuf)
 
void BKE_image_file_format_set (Image *image, int ftype, const ImbFormatOptions *options)
 
bool BKE_image_has_loaded_ibuf (Image *image)
 
ImBuf * BKE_image_get_ibuf_with_name (Image *image, const char *name)
 
ImBuf * BKE_image_get_first_ibuf (Image *image)
 
Render Slots
RenderSlot * BKE_image_add_renderslot (Image *ima, const char *name)
 
bool BKE_image_remove_renderslot (Image *ima, ImageUser *iuser, int slot)
 
bool BKE_image_clear_renderslot (Image *ima, ImageUser *iuser, int slot)
 
RenderSlot * BKE_image_get_renderslot (Image *ima, int index)
 

Variables

static CLG_LogRef LOG = {"bke.image"}
 

Image #IDTypeInfo API

#define IMA_NO_INDEX   0x7FEFEFEF
 
#define IMA_MAKE_INDEX(entry, index)   (((entry) << 10) + (index))
 
#define IMA_INDEX_ENTRY(index)   ((index) >> 10)
 
IDTypeInfo IDType_ID_IM = get_type_info()
 
static void image_runtime_reset (struct Image *image)
 
static void image_runtime_reset_on_copy (struct Image *image)
 
static void image_runtime_free_data (struct Image *image)
 
static void image_init_data (ID *id)
 
static void image_copy_data (Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int flag)
 
static void image_free_data (ID *id)
 
static void image_foreach_cache (ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
 
static void image_foreach_path (ID *id, BPathForeachPathData *bpath_data)
 
static void image_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
static void image_blend_read_data (BlendDataReader *reader, ID *id)
 
static void image_blend_read_lib (BlendLibReader *UNUSED(reader), ID *id)
 
constexpr IDTypeInfo get_type_info ()
 
static int image_num_viewfiles (Image *ima)
 
static ImBuf * image_load_image_file (Image *ima, ImageUser *iuser, int entry, int cfra, bool is_sequence)
 
static ImBuf * image_acquire_ibuf (Image *ima, ImageUser *iuser, void **r_lock)
 
static void image_update_views_format (Image *ima, ImageUser *iuser)
 
static void image_add_view (Image *ima, const char *viewname, const char *filepath)
 

Read and Write

#define STAMP_NAME_SIZE   ((MAX_ID_NAME - 2) + 16)
 
static const char * stamp_metadata_fields []
 
static void stampdata (const Scene *scene, Object *camera, StampData *stamp_data, int do_prefix, bool use_dynamic)
 
static void stampdata_from_template (StampData *stamp_data, const Scene *scene, const StampData *stamp_data_template, bool do_prefix)
 
void BKE_image_stamp_buf (Scene *scene, Object *camera, const StampData *stamp_data_template, unsigned char *rect, float *rectf, int width, int height, int channels)
 
void BKE_render_result_stamp_info (Scene *scene, Object *camera, struct RenderResult *rr, bool allocate_only)
 
struct StampData * BKE_stamp_info_from_scene_static (const Scene *scene)
 
bool BKE_stamp_is_known_field (const char *field_name)
 
void BKE_stamp_info_callback (void *data, struct StampData *stamp_data, StampCallback callback, bool noskip)
 
void BKE_render_result_stamp_data (RenderResult *rr, const char *key, const char *value)
 
StampData * BKE_stamp_data_copy (const StampData *stamp_data)
 
void BKE_stamp_data_free (StampData *stamp_data)
 
static void metadata_set_field (void *data, const char *propname, char *propvalue, int UNUSED(len))
 
static void metadata_get_field (void *data, const char *propname, char *propvalue, int len)
 
void BKE_imbuf_stamp_info (const RenderResult *rr, ImBuf *ibuf)
 
static void metadata_copy_custom_fields (const char *field, const char *value, void *rr_v)
 
void BKE_stamp_info_from_imbuf (RenderResult *rr, ImBuf *ibuf)
 
bool BKE_imbuf_alpha_test (ImBuf *ibuf)
 
int BKE_imbuf_write (ImBuf *ibuf, const char *name, const ImageFormatData *imf)
 
int BKE_imbuf_write_as (ImBuf *ibuf, const char *name, const ImageFormatData *imf, const bool save_copy)
 
int BKE_imbuf_write_stamp (const Scene *scene, const struct RenderResult *rr, ImBuf *ibuf, const char *name, const struct ImageFormatData *imf)
 
struct anim * openanim_noload (const char *name, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
 
struct anim * openanim (const char *name, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
 

Macro Definition Documentation

◆ BUFF_MARGIN_X

#define BUFF_MARGIN_X   2

◆ BUFF_MARGIN_Y

#define BUFF_MARGIN_Y   1

◆ CALL

#define CALL (   member,
  value_str 
)
Value:
if (noskip || stamp_data->member[0]) { \
callback(data, value_str, stamp_data->member, sizeof(stamp_data->member)); \
} \
((void)0)
SyclQueue void void size_t num_bytes void

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 37 of file source/blender/blenkernel/intern/image.cc.

◆ IMA_INDEX_ENTRY

#define IMA_INDEX_ENTRY (   index)    ((index) >> 10)

Definition at line 472 of file source/blender/blenkernel/intern/image.cc.

◆ IMA_MAKE_INDEX

#define IMA_MAKE_INDEX (   entry,
  index 
)    (((entry) << 10) + (index))

Definition at line 471 of file source/blender/blenkernel/intern/image.cc.

◆ IMA_NO_INDEX

#define IMA_NO_INDEX   0x7FEFEFEF

Definition at line 468 of file source/blender/blenkernel/intern/image.cc.

◆ STAMP_NAME_SIZE

#define STAMP_NAME_SIZE   ((MAX_ID_NAME - 2) + 16)

Definition at line 1574 of file source/blender/blenkernel/intern/image.cc.

◆ TEXT_SIZE_CHECK

#define TEXT_SIZE_CHECK (   str,
  w,
  h 
)     ((str[0]) && ((void)(h = h_fixed), (w = (int)BLF_width(mono, str, sizeof(str)))))

◆ TEXT_SIZE_CHECK_WORD_WRAP

#define TEXT_SIZE_CHECK_WORD_WRAP (   str,
  w,
  h 
)
Value:
((str[0]) && (BLF_boundbox_ex(mono, str, sizeof(str), &wrap.rect, &wrap.info), \
(void)(h = h_fixed * wrap.info.lines), \
(w = BLI_rcti_size_x(&wrap.rect))))
void BLF_boundbox_ex(int fontid, const char *str, size_t str_len, struct rcti *box, struct ResultBLF *r_info) ATTR_NONNULL(2)
Definition: blf.c:640
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
Definition: BLI_rect.h:186
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btQuadWord.h:119
#define str(s)
static struct PartialUpdateUser * wrap(PartialUpdateUserImpl *user)

Function Documentation

◆ add_ibuf_size()

static ImBuf* add_ibuf_size ( unsigned int  width,
unsigned int  height,
const char *  name,
int  depth,
int  floatbuf,
short  gen_type,
const float  color[4],
ColorManagedColorspaceSettings *  colorspace_settings 
)
static

◆ BKE_image_acquire_ibuf()

ImBuf* BKE_image_acquire_ibuf ( struct Image *  ima,
struct ImageUser *  iuser,
void **  r_lock 
)

Return image buffer for given image and user:

  • will lock render result if image type is render result and lock is not NULL
  • will return NULL if image is NULL or image type is render or composite result and lock is NULL

References the result, BKE_image_release_ibuf should be used to de-reference.

Definition at line 4668 of file source/blender/blenkernel/intern/image.cc.

References BLI_mutex_lock(), BLI_mutex_unlock(), Image_Runtime::cache_mutex, image_acquire_ibuf(), and Image::runtime.

Referenced by blender::draw::image_engine::SpaceNodeAccessor::acquire_image_buffer(), blender::bke::pbvh::pixels::apply_watertight_check(), blender::ed::space_node::backimage_fit_exec(), bake_images(), bake_object_check(), bake_targets_init_internal(), BKE_gpencil_from_image(), BKE_image_get_float_pixels_for_frame(), BKE_image_get_pixels_for_frame(), BKE_image_get_size(), BKE_image_has_alpha(), BKE_image_pool_acquire_ibuf(), BKE_image_save_options_init(), BKE_image_scale(), BKE_image_update_gputexture(), BKE_paint_canvas_key_get(), blender::bke::pbvh::pixels::BKE_pbvh_pixels_mark_image_dirty(), clear_single_image(), cmp_node_image_create_outputs(), colorfn(), blender::compositor::ImageNode::convert_to_operations(), cryptomatte_init_from_node_image(), blender::bke::pbvh::pixels::do_encode_pixels(), blender::ed::sculpt_paint::paint::image::do_paint_pixels(), blender::ed::sculpt_paint::paint::image::do_push_undo_tile(), blender::ed::space_node::draw_nodespace_back_pix(), draw_plane_marker_image(), ED_space_image_acquire_buffer(), ED_space_node_color_sample(), ED_space_node_get_position(), blender::io::usd::export_in_memory_texture(), eyedropper_cryptomatte_sample_image_fl(), finish_images(), blender::compositor::BaseImageOperation::get_im_buf(), blender::io::usd::get_in_memory_texture_filename(), gpencil_boundaryfill_area(), gpencil_erase_processed_area(), gpencil_find_and_mark_empty_areas(), gpencil_get_outline_points(), gpencil_image_texture_get(), gpencil_invert_image(), gpencil_set_borders(), gpu_texture_create_tile_array(), icon_preview_startjob(), image_camera_background_texture_get(), image_file_format_writable(), image_flip_exec(), image_from_context_has_data_poll(), image_get_gpu_texture(), image_invert_exec(), image_rect_update(), image_save_single(), image_scale_exec(), image_scale_invoke(), image_undosys_step_encode(), blender::nodes::node_geo_image_texture_cc::ImageFieldsFunction::ImageFieldsFunction(), blender::bke::image::partial_update::ImageTileData::init_data(), metadata_panel_context_draw(), multiresbake_check(), OVERLAY_edit_uv_cache_init(), paint_2d_bucket_fill(), paint_2d_canvas_set(), paint_2d_ensure_tile_canvas(), paint_2d_gradient_fill(), paint_2d_new_stroke(), paint_2d_redraw(), paint_sample_color(), palette_extract_img_exec(), project_paint_build_proj_ima(), project_paint_PickColor(), project_paint_uvpixel_init(), project_paint_uvpixel_mask(), ptile_restore_runtime_map(), RE_bake_ibuf_clear(), render_endjob(), blender::ed::space_node::sample_apply(), screen_opengl_render_apply(), blender::bke::image::partial_update::ImagePartialUpdateTest::SetUp(), blender::ed::space_node::snode_bg_viewmove_invoke(), texture_paint_camera_project_exec(), tile_fill_init(), trace_start_job(), uhandle_restore_list(), uiTemplateImage(), uiTemplateImageInfo(), blender::ed::space_node::viewer_border_exec(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_refresh(), blender::ed::space_node::WIDGETGROUP_node_crop_refresh(), blender::ed::space_node::WIDGETGROUP_node_sbeam_refresh(), blender::ed::space_node::WIDGETGROUP_node_transform_refresh(), and write_internal_bake_pixels().

◆ BKE_image_acquire_renderresult()

RenderResult* BKE_image_acquire_renderresult ( Scene *  scene,
Image *  ima 
)

◆ BKE_image_add_from_imbuf()

Image* BKE_image_add_from_imbuf ( struct Main *  bmain,
struct ImBuf *  ibuf,
const char *  name 
)

Create an image from ibuf. The reference-count of ibuf is increased, caller should take care to drop its reference by calling IMB_freeImBuf if needed.

Definition at line 1215 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_replace_imbuf(), BLI_path_basename(), IMA_SRC_FILE, IMA_SRC_GENERATED, IMA_TYPE_IMAGE, image_alloc(), and ImBuf::name.

Referenced by gpencil_render_offscreen(), new_image_from_plane_marker_exec(), and texture_paint_image_from_view_exec().

◆ BKE_image_add_generated()

Image* BKE_image_add_generated ( struct Main *  bmain,
unsigned int  width,
unsigned int  height,
const char *  name,
int  depth,
int  floatbuf,
short  gen_type,
const float  color[4],
bool  stereo3d,
bool  is_data,
bool  tiled 
)

◆ BKE_image_add_renderslot()

RenderSlot* BKE_image_add_renderslot ( Image *  ima,
const char *  name 
)

◆ BKE_image_add_tile()

ImageTile* BKE_image_add_tile ( struct Image *  ima,
int  tile_number,
const char *  label 
)

◆ BKE_image_all_free_anim_ibufs()

void BKE_image_all_free_anim_ibufs ( struct Main *  bmain,
int  cfra 
)

Does all images with type MOVIE or SEQUENCE.

Definition at line 1556 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_free_anim_ibufs(), BKE_image_is_animated(), ListBase::first, Image::id, Main::images, and ID::next.

Referenced by do_render_full_pipeline().

◆ BKE_image_alpha_mode_from_extension()

void BKE_image_alpha_mode_from_extension ( Image *  image)

◆ BKE_image_alpha_mode_from_extension_ex()

char BKE_image_alpha_mode_from_extension_ex ( const char *  filepath)

◆ BKE_image_backup_render()

void BKE_image_backup_render ( struct Scene *  scene,
struct Image *  ima,
bool  free_current_slot 
)

◆ BKE_image_buffer_format_writable()

bool BKE_image_buffer_format_writable ( ImBuf *  ibuf)

◆ BKE_image_clear_renderslot()

bool BKE_image_clear_renderslot ( Image *  ima,
ImageUser *  iuser,
int  slot 
)

◆ BKE_image_editors_update_frame()

void BKE_image_editors_update_frame ( const Main *  bmain,
int  cfra 
)

◆ BKE_image_ensure_tile_token()

void BKE_image_ensure_tile_token ( char *  filename)

Ensures that filename contains a UDIM token if we find a supported format pattern.

Note
This must only be the name component (without slashes).

Definition at line 3429 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_is_filename_tokenized(), BLI_assert_msg, BLI_path_slash_find(), BLI_strncpy(), FILE_MAX, and direntry::path.

Referenced by BKE_image_get_tile_info(), BKE_packedfile_unpack_image(), do_versions_after_linking_300(), image_file_browse_exec(), and blender::bke::tests::TEST().

◆ BKE_image_ensure_viewer()

Image* BKE_image_ensure_viewer ( struct Main *  bmain,
int  type,
const char *  name 
)

◆ BKE_image_ensure_viewer_views()

void BKE_image_ensure_viewer_views ( const RenderData *  rd,
Image *  ima,
ImageUser *  iuser 
)

◆ BKE_image_file_format_set()

void BKE_image_file_format_set ( Image *  image,
int  ftype,
const ImbFormatOptions *  options 
)

◆ BKE_image_fill_tile()

bool BKE_image_fill_tile ( struct Image *  ima,
ImageTile *  tile,
int  width,
int  height,
const float  color[4],
int  gen_type,
int  planes,
bool  is_float 
)

◆ BKE_image_find_nearest_tile()

int BKE_image_find_nearest_tile ( const struct Image *  image,
const float  co[2] 
)

◆ BKE_image_find_nearest_tile_with_offset()

int BKE_image_find_nearest_tile_with_offset ( const Image *  image,
const float  co[2],
float  r_uv_offset[2] 
)

◆ BKE_image_free_all_textures()

void BKE_image_free_all_textures ( struct Main *  bmain)

◆ BKE_image_free_anim_ibufs()

void BKE_image_free_anim_ibufs ( struct Image *  ima,
int  except_frame 
)

Operates on one image only!

Parameters
except_frameThis is weak, only works for sequences without offset.

Definition at line 1547 of file source/blender/blenkernel/intern/image.cc.

References BLI_mutex_lock(), BLI_mutex_unlock(), Image::cache, Image_Runtime::cache_mutex, imagecache_check_free_anim(), IMB_moviecache_cleanup(), and Image::runtime.

Referenced by BKE_image_all_free_anim_ibufs().

◆ BKE_image_free_buffers()

void BKE_image_free_buffers ( Image *  ima)

◆ BKE_image_free_buffers_ex()

void BKE_image_free_buffers_ex ( struct Image *  image,
bool  do_lock 
)

Simply free the image data from memory, on display the image can load again (except for render buffers).

Definition at line 599 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_free_gputextures(), BLI_mutex_lock(), BLI_mutex_unlock(), Image_Runtime::cache_mutex, image_free_anims(), image_free_cached_frames(), RE_FreeRenderResult(), Image::rr, and Image::runtime.

Referenced by BKE_image_free_buffers().

◆ BKE_image_free_data()

void BKE_image_free_data ( struct Image *  image)

Free (or release) any data used by this image (does not free the image itself).

Note
Call from library.

Definition at line 625 of file source/blender/blenkernel/intern/image.cc.

References Image::id, and image_free_data().

◆ BKE_image_free_packedfiles()

void BKE_image_free_packedfiles ( Image *  ima)

Definition at line 576 of file source/blender/blenkernel/intern/image.cc.

References image_free_packedfiles().

Referenced by image_save_as_exec().

◆ BKE_image_free_views()

void BKE_image_free_views ( Image *  image)

◆ BKE_image_get_aspect()

void BKE_image_get_aspect ( Image *  image,
float *  r_aspx,
float *  r_aspy 
)

◆ BKE_image_get_first_ibuf()

ImBuf* BKE_image_get_first_ibuf ( struct Image *  image)

References the result, BKE_image_release_ibuf is to be called to de-reference. Use lock=NULL when calling BKE_image_release_ibuf().

TODO(sergey): This is actually "get first item from the cache", which is not so much predictable. But using first loaded image buffer was also malicious logic and all the areas which uses this function are to be re-considered.

Definition at line 5351 of file source/blender/blenkernel/intern/image.cc.

References BLI_mutex_lock(), BLI_mutex_unlock(), image(), IMB_moviecacheIter_done(), IMB_moviecacheIter_free(), IMB_moviecacheIter_getImBuf(), IMB_moviecacheIter_new(), and IMB_refImBuf().

◆ BKE_image_get_float_pixels_for_frame()

float* BKE_image_get_float_pixels_for_frame ( struct Image *  image,
int  frame,
int  tile 
)

◆ BKE_image_get_ibuf_with_name()

ImBuf* BKE_image_get_ibuf_with_name ( struct Image *  image,
const char *  name 
)

◆ BKE_image_get_pixels_for_frame()

unsigned char* BKE_image_get_pixels_for_frame ( struct Image *  image,
int  frame,
int  tile 
)

◆ BKE_image_get_renderslot()

RenderSlot* BKE_image_get_renderslot ( Image *  ima,
int  index 
)

◆ BKE_image_get_size()

void BKE_image_get_size ( Image *  image,
ImageUser *  iuser,
int *  r_width,
int *  r_height 
)

◆ BKE_image_get_size_fl()

void BKE_image_get_size_fl ( Image *  image,
ImageUser *  iuser,
float  r_size[2] 
)

◆ BKE_image_get_tile()

ImageTile* BKE_image_get_tile ( Image *  ima,
int  tile_number 
)

◆ BKE_image_get_tile_from_iuser()

ImageTile* BKE_image_get_tile_from_iuser ( Image *  ima,
const ImageUser *  iuser 
)

◆ BKE_image_get_tile_from_pos()

int BKE_image_get_tile_from_pos ( Image *  ima,
const float  uv[2],
float  r_uv[2],
float  r_ofs[2] 
)

◆ BKE_image_get_tile_info()

bool BKE_image_get_tile_info ( char *  filepath,
struct ListBase *  tiles,
int *  r_tile_start,
int *  r_tile_range 
)

Checks whether the given filepath refers to a UDIM tiled texture. If yes, the range from the lowest to the highest tile is returned.

Parameters
filepathmay be modified to ensure a UDIM token is present.
tilesmay be filled even if the result ultimately is false!

Definition at line 3215 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_ensure_tile_token(), BKE_image_get_tile_number_from_filepath(), BKE_image_get_tile_strformat(), BKE_image_is_filename_tokenized(), BLI_addtail(), BLI_filelist_dir_contents(), BLI_filelist_free(), BLI_genericNodeN(), BLI_join_dirfile(), BLI_split_dirfile(), dirname(), FILE_MAX, FILE_MAXDIR, FILE_MAXFILE, id, IMA_UDIM_MAX, max_ii(), MEM_SAFE_FREE, min_ii(), POINTER_FROM_INT, direntry::relname, tiles, and type.

Referenced by BKE_image_signal(), and image_detect_frame_range().

◆ BKE_image_get_tile_label()

void BKE_image_get_tile_label ( struct Image *  ima,
struct ImageTile *  tile,
char *  label,
int  len_label 
)

Get tile index for tiled images.

Definition at line 3200 of file source/blender/blenkernel/intern/image.cc.

References BLI_snprintf(), BLI_strncpy(), label, and tile.

◆ BKE_image_get_tile_number_from_filepath()

bool BKE_image_get_tile_number_from_filepath ( const char *  filepath,
const char *  pattern,
eUDIM_TILE_FORMAT  tile_format,
int *  r_tile_number 
)

◆ BKE_image_get_tile_strformat()

char* BKE_image_get_tile_strformat ( const char *  filepath,
eUDIM_TILE_FORMAT *  r_tile_format 
)

◆ BKE_image_get_tile_uv()

void BKE_image_get_tile_uv ( const Image *  ima,
const int  tile_number,
float  r_uv[2] 
)

◆ BKE_image_has_alpha()

bool BKE_image_has_alpha ( struct Image *  image)

Check if texture has alpha planes == 32 || planes == 16.

Definition at line 5083 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_acquire_ibuf(), BKE_image_release_ibuf(), image(), lock, and ImBuf::planes.

Referenced by uiTemplateImage().

◆ BKE_image_has_anim()

bool BKE_image_has_anim ( Image *  ima)

◆ BKE_image_has_filepath()

bool BKE_image_has_filepath ( const Image *  ima)

Definition at line 5221 of file source/blender/blenkernel/intern/image.cc.

References Image::filepath.

◆ BKE_image_has_ibuf()

bool BKE_image_has_ibuf ( struct Image *  ima,
struct ImageUser *  iuser 
)

◆ BKE_image_has_loaded_ibuf()

bool BKE_image_has_loaded_ibuf ( Image *  image)

◆ BKE_image_has_multiple_ibufs()

bool BKE_image_has_multiple_ibufs ( struct Image *  image)

Checks whether the image consists of multiple buffers.

Definition at line 5233 of file source/blender/blenkernel/intern/image.cc.

References ELEM, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE, IMA_SRC_TILED, and image().

Referenced by image_get_multiview_index().

◆ BKE_image_has_opengl_texture()

bool BKE_image_has_opengl_texture ( struct Image *  ima)

Check if texture has GPU texture code.

Definition at line 776 of file source/blender/blenkernel/intern/image.cc.

References Image::gputexture, and TEXTARGET_COUNT.

Referenced by BKE_image_free_old_gputextures(), and BKE_image_paint_set_mipmap().

◆ BKE_image_has_packedfile()

bool BKE_image_has_packedfile ( const Image *  ima)

◆ BKE_image_init_imageuser()

void BKE_image_init_imageuser ( Image *  ima,
ImageUser *  iuser 
)

◆ BKE_image_is_animated()

bool BKE_image_is_animated ( struct Image *  image)

◆ BKE_image_is_dirty()

bool BKE_image_is_dirty ( Image *  image)

◆ BKE_image_is_dirty_writable()

bool BKE_image_is_dirty_writable ( Image *  image,
bool *  r_is_writable 
)

◆ BKE_image_is_filename_tokenized()

bool BKE_image_is_filename_tokenized ( char *  filepath)

Checks if the filename portion of the path contains a UDIM token.

Definition at line 3423 of file source/blender/blenkernel/intern/image.cc.

References BLI_path_basename().

Referenced by BKE_image_ensure_tile_token(), and BKE_image_get_tile_info().

◆ BKE_image_is_multilayer()

bool BKE_image_is_multilayer ( const Image *  ima)

◆ BKE_image_is_multiview()

bool BKE_image_is_multiview ( const Image *  ima)

◆ BKE_image_is_openexr()

bool BKE_image_is_openexr ( struct Image *  ima)

For multi-layer images as well as for single-layer.

Definition at line 3707 of file source/blender/blenkernel/intern/image.cc.

References BLI_path_extension_check(), ELEM, Image::filepath, IMA_SRC_FILE, IMA_SRC_SEQUENCE, IMA_SRC_TILED, Image::source, and UNUSED_VARS.

◆ BKE_image_is_stereo()

bool BKE_image_is_stereo ( const Image *  ima)

◆ BKE_image_load()

Image* BKE_image_load ( struct Main *  bmain,
const char *  filepath 
)

◆ BKE_image_load_exists()

Image* BKE_image_load_exists ( Main *  bmain,
const char *  filepath 
)

◆ BKE_image_load_exists_ex()

Image* BKE_image_load_exists_ex ( struct Main *  bmain,
const char *  filepath,
bool *  r_exists 
)

Returns existing Image when filename/type is same.

Checks if image was already loaded, then returns same image otherwise creates new (does not load ibuf itself).

Definition at line 980 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_has_anim(), BKE_image_load(), BLI_path_abs(), BLI_path_cmp, ELEM, FILE_MAX, Main::filepath, Image::filepath, ListBase::first, Image::id, ID_BLEND_PATH, id_us_plus(), IMA_SRC_GENERATED, IMA_SRC_VIEWER, Main::images, ID::next, Image::source, str, STRNCPY, and ID::us.

Referenced by BKE_image_load_exists(), image_open_single(), and WM_operator_drop_load_path().

◆ BKE_image_mark_dirty()

void BKE_image_mark_dirty ( Image *  UNUSEDimage,
ImBuf *  ibuf 
)

◆ BKE_image_memorypack()

bool BKE_image_memorypack ( struct Image *  ima)

◆ BKE_image_merge()

void BKE_image_merge ( struct Main *  bmain,
struct Image *  dest,
struct Image *  source 
)

◆ BKE_image_multilayer_index()

RenderPass* BKE_image_multilayer_index ( struct RenderResult *  rr,
struct ImageUser *  iuser 
)

◆ BKE_image_multiview_index()

void BKE_image_multiview_index ( const Image *  ima,
ImageUser *  iuser 
)

◆ BKE_image_packfiles()

void BKE_image_packfiles ( ReportList *  reports,
Image *  ima,
const char *  basepath 
)

◆ BKE_image_packfiles_from_mem()

void BKE_image_packfiles_from_mem ( ReportList *  reports,
Image *  ima,
char *  data,
const size_t  data_len 
)

◆ BKE_image_pool_acquire_ibuf()

ImBuf* BKE_image_pool_acquire_ibuf ( Image *  ima,
ImageUser *  iuser,
ImagePool *  pool 
)

◆ BKE_image_pool_free()

void BKE_image_pool_free ( ImagePool *  pool)

◆ BKE_image_pool_new()

ImagePool* BKE_image_pool_new ( void  )

◆ BKE_image_pool_release_ibuf()

void BKE_image_pool_release_ibuf ( Image *  ima,
ImBuf *  ibuf,
ImagePool *  pool 
)

◆ BKE_image_print_memlist()

void BKE_image_print_memlist ( struct Main *  bmain)

Prints memory statistics for images.

Definition at line 1466 of file source/blender/blenkernel/intern/image.cc.

References ListBase::first, Image::id, image_mem_size(), Main::images, ID::name, ID::next, and size().

◆ BKE_image_reassign_tile()

void BKE_image_reassign_tile ( struct Image *  ima,
ImageTile *  tile,
int  new_tile_number 
)

◆ BKE_image_release_ibuf()

void BKE_image_release_ibuf ( Image *  ima,
ImBuf *  ibuf,
void *  lock 
)

Definition at line 4688 of file source/blender/blenkernel/intern/image.cc.

References BLI_mutex_lock(), BLI_mutex_unlock(), BLI_thread_unlock(), Image_Runtime::cache_mutex, IMB_freeImBuf(), lock, LOCK_VIEWER, RE_ReleaseResultImage(), and Image::runtime.

Referenced by blender::bke::pbvh::pixels::apply_watertight_check(), blender::ed::space_node::backimage_fit_exec(), bake_images(), bake_object_check(), bake_targets_init_internal(), BKE_gpencil_from_image(), BKE_image_fill_tile(), BKE_image_get_float_pixels_for_frame(), BKE_image_get_pixels_for_frame(), BKE_image_get_size(), BKE_image_has_alpha(), BKE_image_pool_release_ibuf(), BKE_image_save_options_init(), BKE_image_scale(), BKE_image_update_gputexture(), BKE_paint_canvas_key_get(), blender::bke::pbvh::pixels::BKE_pbvh_pixels_mark_image_dirty(), clear_single_image(), cmp_node_image_create_outputs(), colorfn(), blender::compositor::ImageNode::convert_to_operations(), cryptomatte_init_from_node_image(), blender::compositor::BaseImageOperation::deinit_execution(), blender::compositor::BaseImageOperation::determine_canvas(), blender::bke::pbvh::pixels::do_encode_pixels(), blender::ed::sculpt_paint::paint::image::do_paint_pixels(), blender::ed::sculpt_paint::paint::image::do_push_undo_tile(), blender::ed::space_node::draw_nodespace_back_pix(), draw_plane_marker_image(), ED_space_image_acquire_buffer(), ED_space_image_release_buffer(), ED_space_node_color_sample(), ED_space_node_get_position(), eyedropper_cryptomatte_sample_image_fl(), finish_images(), blender::bke::image::partial_update::ImageTileData::free_data(), blender::compositor::BaseImageOperation::get_im_buf(), gpencil_boundaryfill_area(), gpencil_erase_processed_area(), gpencil_find_and_mark_empty_areas(), gpencil_get_outline_points(), gpencil_image_texture_get(), gpencil_invert_image(), gpencil_render_offscreen(), gpencil_set_borders(), gpu_texture_create_tile_array(), icon_preview_startjob(), image_camera_background_texture_get(), image_file_format_writable(), image_flip_exec(), image_from_context_has_data_poll(), image_get_gpu_texture(), image_invert_exec(), image_rect_update(), image_save_single(), image_scale_exec(), image_scale_invoke(), image_undosys_step_encode(), blender::nodes::node_geo_image_texture_cc::ImageFieldsFunction::ImageFieldsFunction(), metadata_panel_context_draw(), multiresbake_check(), OVERLAY_edit_uv_draw_finish(), paint_2d_bucket_fill(), paint_2d_canvas_free(), paint_2d_canvas_set(), paint_2d_ensure_tile_canvas(), paint_2d_gradient_fill(), paint_2d_new_stroke(), paint_2d_redraw(), paint_sample_color(), palette_extract_img_exec(), project_paint_end(), project_paint_PickColor(), project_paint_uvpixel_init(), project_paint_uvpixel_mask(), ptile_restore_runtime_map(), RE_bake_ibuf_clear(), blender::draw::image_engine::SpaceNodeAccessor::release_buffer(), render_endjob(), blender::ed::space_node::sample_apply(), screen_opengl_render_apply(), blender::ed::space_node::snode_bg_viewmove_invoke(), blender::bke::image::partial_update::ImagePartialUpdateTest::TearDown(), tile_fill_init(), trace_start_job(), uhandle_restore_list(), uiTemplateImage(), uiTemplateImageInfo(), blender::ed::space_node::viewer_border_exec(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_refresh(), blender::ed::space_node::WIDGETGROUP_node_crop_refresh(), blender::ed::space_node::WIDGETGROUP_node_sbeam_refresh(), blender::ed::space_node::WIDGETGROUP_node_transform_refresh(), write_internal_bake_pixels(), and blender::nodes::node_geo_image_texture_cc::ImageFieldsFunction::~ImageFieldsFunction().

◆ BKE_image_release_renderresult()

void BKE_image_release_renderresult ( Scene *  scene,
Image *  ima 
)

◆ BKE_image_remove_renderslot()

bool BKE_image_remove_renderslot ( Image *  ima,
ImageUser *  iuser,
int  slot 
)

◆ BKE_image_remove_tile()

bool BKE_image_remove_tile ( struct Image *  ima,
ImageTile *  tile 
)

◆ BKE_image_replace_imbuf()

void BKE_image_replace_imbuf ( struct Image *  image,
struct ImBuf *  ibuf 
)

For a non-viewer single-buffer image (single frame file, or generated image) replace its image buffer with the given one. If an unsupported image type (multi-layer, image sequence, ...) the function will assert in the debug mode and will have an undefined behavior in the release mode.

Definition at line 1237 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_free_buffers(), BKE_image_mark_dirty(), BLI_assert, ELEM, IMA_GEN_FLOAT, IMA_NO_INDEX, IMA_SRC_FILE, IMA_SRC_GENERATED, IMA_TYPE_IMAGE, image(), image_assign_ibuf(), image_colorspace_from_imbuf(), ImBuf::rect_float, ImBuf::x, and ImBuf::y.

Referenced by BKE_image_add_from_imbuf(), and update_image_from_plane_marker_exec().

◆ BKE_image_scale()

bool BKE_image_scale ( struct Image *  image,
int  width,
int  height 
)

◆ BKE_image_sequence_guess_offset()

int BKE_image_sequence_guess_offset ( struct Image *  image)

Guess offset for the first frame in the sequence.

Definition at line 5206 of file source/blender/blenkernel/intern/image.cc.

References BLI_path_sequence_decode(), and image().

Referenced by cmp_node_image_create_outputs().

◆ BKE_image_set_filepath_from_tile_number()

void BKE_image_set_filepath_from_tile_number ( char *  filepath,
const char *  pattern,
eUDIM_TILE_FORMAT  tile_format,
int  tile_number 
)

◆ BKE_image_signal()

void BKE_image_signal ( Main *  bmain,
Image *  ima,
ImageUser *  iuser,
int  signal 
)

Definition at line 2982 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_add_tile(), BKE_image_free_buffers(), BKE_image_get_tile(), BKE_image_get_tile_info(), BKE_image_has_packedfile(), BKE_image_init_imageuser(), BKE_image_packfiles(), BKE_image_remove_tile(), BKE_image_walk_all_users(), BKE_ntree_update_main(), BKE_ntree_update_tag_id_changed(), BKE_packedfile_free(), BKE_packedfile_new(), BLI_assert, BLI_freelistN(), BLI_listbase_count(), BLI_listbase_count_at_most(), BLI_mutex_lock(), BLI_mutex_unlock(), BLI_path_abs(), BLI_strncpy(), Image_Runtime::cache_mutex, ELEM, FILE_MAX, ImagePackedFile::filepath, Image::filepath, ListBase::first, Image::gen_x, Image::gen_y, Image::id, ID_BLEND_PATH, ID_BLEND_PATH_FROM_GLOBAL, IMA_NO_INDEX, IMA_SIGNAL_COLORMANAGE, IMA_SIGNAL_FREE, IMA_SIGNAL_RELOAD, IMA_SIGNAL_SRC_CHANGE, IMA_SIGNAL_USER_NEW_IMAGE, IMA_SRC_FILE, IMA_SRC_GENERATED, IMA_SRC_SEQUENCE, IMA_SRC_TILED, IMA_TYPE_IMAGE, IMA_TYPE_MULTILAYER, IMA_TYPE_UV_TEST, image_free_packedfiles(), image_free_tile(), image_get_cached_ibuf_for_index_entry(), image_num_viewfiles(), image_tag_frame_recalc(), image_tag_reload(), image_update_views_format(), IMB_freeImBuf(), ListBase::last, LISTBASE_FOREACH, MEM_freeN, ImagePackedFile::next, ImageTile::next, ImagePackedFile::packedfile, Image::packedfiles, pf, POINTER_AS_INT, result, Image::runtime, ImageUser::scene, Image::source, tile, ImageTile::tile_number, Image::tiles, Image::type, ImBuf::x, and ImBuf::y.

Referenced by BKE_image_save(), BKE_packedfile_unpack_image(), blender::compositor::CompositorOperation::deinit_execution(), ED_space_image_auto_set(), ED_space_image_set(), image_foreach_path(), image_new_exec(), image_open_exec(), image_reload_exec(), image_replace_exec(), blender::ed::space_node::node_add_file_exec(), proj_paint_add_slot(), screen_opengl_render_init(), screen_render_exec(), and screen_render_invoke().

◆ BKE_image_sort_tiles()

void BKE_image_sort_tiles ( struct Image *  ima)

◆ BKE_image_stamp_buf()

void BKE_image_stamp_buf ( Scene *  scene,
Object *  camera,
const StampData *  stamp_data_template,
unsigned char *  rect,
float *  rectf,
int  width,
int  height,
int  channels 
)

◆ BKE_image_tag_time()

void BKE_image_tag_time ( Image *  ima)

◆ BKE_image_tile_filepath_exists()

bool BKE_image_tile_filepath_exists ( const char *  filepath)

When provided with an absolute virtual filepath, check to see if at least one concrete file exists. NOTE: This function requires directory traversal and may be inefficient in time-critical, or iterative, code paths.

Definition at line 3458 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_get_tile_number_from_filepath(), BKE_image_get_tile_strformat(), BLI_assert, BLI_filelist_dir_contents(), BLI_filelist_free(), BLI_path_is_rel(), BLI_split_dir_part(), dirname(), FILE_MAXDIR, id, IMA_UDIM_MAX, MEM_SAFE_FREE, direntry::path, and type.

Referenced by BKE_image_load().

◆ BKE_image_user_file_path()

void BKE_image_user_file_path ( const ImageUser *  iuser,
const Image *  ima,
char *  filepath 
)

◆ BKE_image_user_file_path_ex()

void BKE_image_user_file_path_ex ( const Main *  bmain,
const ImageUser *  iuser,
const Image *  ima,
char *  filepath,
const bool  resolve_udim,
const bool  resolve_multiview 
)

◆ BKE_image_user_frame_calc()

void BKE_image_user_frame_calc ( struct Image *  ima,
struct ImageUser *  iuser,
int  cfra 
)

◆ BKE_image_user_frame_get()

int BKE_image_user_frame_get ( const ImageUser *  iuser,
int  cfra,
bool *  r_is_in_range 
)

◆ BKE_image_user_id_eval_animation()

void BKE_image_user_id_eval_animation ( Depsgraph *  depsgraph,
ID *  id 
)

◆ BKE_image_user_id_has_animation()

bool BKE_image_user_id_has_animation ( struct ID *  id)

◆ BKE_image_walk_all_users()

void BKE_image_walk_all_users ( const Main *  mainp,
void *  customdata,
void   callbackImage *ima, ID *iuser_id, ImageUser *iuser, void *customdata 
)

◆ BKE_imageuser_default()

void BKE_imageuser_default ( struct ImageUser *  iuser)

◆ BKE_imbuf_alpha_test()

bool BKE_imbuf_alpha_test ( ImBuf *  ibuf)

◆ BKE_imbuf_stamp_info()

void BKE_imbuf_stamp_info ( const RenderResult *  rr,
ImBuf *  ibuf 
)

◆ BKE_imbuf_write()

int BKE_imbuf_write ( ImBuf *  ibuf,
const char *  name,
const ImageFormatData *  imf 
)

◆ BKE_imbuf_write_as()

int BKE_imbuf_write_as ( ImBuf *  ibuf,
const char *  name,
const ImageFormatData *  imf,
const bool  save_copy 
)

◆ BKE_imbuf_write_stamp()

int BKE_imbuf_write_stamp ( const Scene *  scene,
const struct RenderResult *  rr,
ImBuf *  ibuf,
const char *  name,
const struct ImageFormatData *  imf 
)

◆ BKE_render_result_stamp_data()

void BKE_render_result_stamp_data ( RenderResult *  rr,
const char *  key,
const char *  value 
)

◆ BKE_render_result_stamp_info()

void BKE_render_result_stamp_info ( Scene *  scene,
Object *  camera,
struct RenderResult *  rr,
bool  allocate_only 
)

◆ BKE_stamp_data_copy()

StampData* BKE_stamp_data_copy ( const StampData *  stamp_data)

◆ BKE_stamp_data_free()

void BKE_stamp_data_free ( StampData *  stamp_data)

◆ BKE_stamp_info_callback()

void BKE_stamp_info_callback ( void *  data,
struct StampData *  stamp_data,
StampCallback  callback,
bool  noskip 
)

◆ BKE_stamp_info_from_imbuf()

void BKE_stamp_info_from_imbuf ( RenderResult *  rr,
ImBuf *  ibuf 
)

◆ BKE_stamp_info_from_scene_static()

struct StampData* BKE_stamp_info_from_scene_static ( const Scene *  scene)

◆ BKE_stamp_is_known_field()

bool BKE_stamp_is_known_field ( const char *  field_name)

Check whether the given metadata field name translates to a known field of a stamp.

Definition at line 2346 of file source/blender/blenkernel/intern/image.cc.

References stamp_metadata_fields, and STREQ.

Referenced by metadata_copy_custom_fields(), and metadata_is_custom_drawable().

◆ copy_image_packedfiles()

static void copy_image_packedfiles ( ListBase *  lb_dst,
const ListBase *  lb_src 
)
static

◆ get_type_info()

constexpr IDTypeInfo get_type_info ( )
constexpr

◆ image_acquire_ibuf()

static ImBuf * image_acquire_ibuf ( Image *  ima,
ImageUser *  iuser,
void **  r_lock 
)
static

◆ image_add_view()

static void image_add_view ( Image *  ima,
const char *  viewname,
const char *  filepath 
)
static

◆ image_alloc()

static Image* image_alloc ( Main *  bmain,
const char *  name,
short  source,
short  type 
)
static

◆ image_assign_ibuf()

static void image_assign_ibuf ( Image *  ima,
ImBuf *  ibuf,
int  index,
int  entry 
)
static

◆ image_blend_read_data()

static void image_blend_read_data ( BlendDataReader *  reader,
ID *  id 
)
static

◆ image_blend_read_lib()

static void image_blend_read_lib ( BlendLibReader *  UNUSEDreader,
ID *  id 
)
static

Definition at line 413 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_free_buffers(), and Image::cache.

Referenced by get_type_info().

◆ image_blend_write()

static void image_blend_write ( BlendWriter *  writer,
ID *  id,
const void *  id_address 
)
static

◆ image_buf_fill_isolated()

static void image_buf_fill_isolated ( void *  usersata_v)
static

◆ image_colorspace_from_imbuf()

static void image_colorspace_from_imbuf ( Image *  image,
const ImBuf *  ibuf 
)
static

◆ image_copy_data()

static void image_copy_data ( Main *  UNUSEDbmain,
ID *  id_dst,
const ID *  id_src,
const int  flag 
)
static

◆ image_editors_update_frame()

static void image_editors_update_frame ( Image *  ima,
ID *  UNUSEDiuser_id,
ImageUser *  iuser,
void *  customdata 
)
static

◆ image_foreach_cache()

static void image_foreach_cache ( ID *  id,
IDTypeForeachCacheFunctionCallback  function_callback,
void *  user_data 
)
static

◆ image_foreach_path()

static void image_foreach_path ( ID *  id,
BPathForeachPathData *  bpath_data 
)
static

◆ image_free_anims()

static void image_free_anims ( Image *  ima)
static

◆ image_free_cached_frames()

static void image_free_cached_frames ( Image *  image)
static

◆ image_free_data()

static void image_free_data ( ID *  id)
static

◆ image_free_packedfiles()

static void image_free_packedfiles ( Image *  ima)
static

◆ image_free_tile()

static void image_free_tile ( Image *  ima,
ImageTile *  tile 
)
static

◆ image_get_cached_ibuf()

static ImBuf* image_get_cached_ibuf ( Image *  ima,
ImageUser *  iuser,
int *  r_entry,
int *  r_index,
bool *  r_is_cached_empty 
)
static

◆ image_get_cached_ibuf_for_index_entry()

static ImBuf* image_get_cached_ibuf_for_index_entry ( Image *  ima,
int  index,
int  entry,
bool *  r_is_cached_empty 
)
static

Get the ibuf from an image cache by its index and entry. Local use here only.

Returns
referenced image buffer if it exists, callee is to call IMB_freeImBuf to de-reference the image buffer after it's done handling it.

Definition at line 679 of file source/blender/blenkernel/intern/image.cc.

References IMA_MAKE_INDEX, IMA_NO_INDEX, imagecache_get(), and ImBuf::index.

Referenced by BKE_image_memorypack(), BKE_image_reassign_tile(), BKE_image_signal(), image_acquire_ibuf(), image_get_cached_ibuf(), and image_get_render_result().

◆ image_get_entry_and_index()

static void image_get_entry_and_index ( Image *  ima,
ImageUser *  iuser,
int *  r_entry,
int *  r_index 
)
static

◆ image_get_ibuf_multilayer()

static ImBuf* image_get_ibuf_multilayer ( Image *  ima,
ImageUser *  iuser 
)
static

◆ image_get_multiview_index()

static int image_get_multiview_index ( Image *  ima,
ImageUser *  iuser 
)
static

◆ image_get_render_result()

static ImBuf* image_get_render_result ( Image *  ima,
ImageUser *  iuser,
void **  r_lock 
)
static

◆ image_get_tile_number_from_iuser()

static int image_get_tile_number_from_iuser ( const Image *  ima,
const ImageUser *  iuser 
)
static

◆ image_init()

static void image_init ( Image *  ima,
short  source,
short  type 
)
static

◆ image_init_after_load()

static void image_init_after_load ( Image *  ima,
ImageUser *  iuser,
ImBuf *  UNUSEDibuf 
)
static

◆ image_init_color_management()

static void image_init_color_management ( Image *  ima)
static

◆ image_init_data()

static void image_init_data ( ID *  id)
static

◆ image_init_multilayer_multiview()

static void image_init_multilayer_multiview ( Image *  ima,
RenderResult *  rr 
)
static

◆ image_load_image_file()

static ImBuf * image_load_image_file ( Image *  ima,
ImageUser *  iuser,
int  entry,
int  cfra,
bool  is_sequence 
)
static

◆ image_load_movie_file()

static ImBuf* image_load_movie_file ( Image *  ima,
ImageUser *  iuser,
int  frame 
)
static

◆ image_load_sequence_multilayer()

static ImBuf* image_load_sequence_multilayer ( Image *  ima,
ImageUser *  iuser,
int  entry,
int  frame 
)
static

◆ image_mem_size()

static uintptr_t image_mem_size ( Image *  image)
static

◆ image_memorypack_imbuf()

static bool image_memorypack_imbuf ( Image *  ima,
ImBuf *  ibuf,
int  view,
int  tile_number,
const char *  filepath 
)
static

◆ image_num_viewfiles()

static int image_num_viewfiles ( Image *  ima)
static

◆ image_pool_find_item()

BLI_INLINE ImBuf* image_pool_find_item ( ImagePool *  pool,
Image *  image,
int  entry,
int  index,
bool *  found 
)

◆ image_quick_test()

BLI_INLINE bool image_quick_test ( Image *  ima,
const ImageUser *  iuser 
)

◆ image_remove_ibuf()

static void image_remove_ibuf ( Image *  ima,
int  index,
int  entry 
)
static

◆ image_render_pass_get()

static RenderPass* image_render_pass_get ( RenderLayer *  rl,
const int  pass,
const int  view,
int *  r_passindex 
)
static
Returns
render-pass for a given pass index and active view. fallback to available if there are missing passes for active view.

Definition at line 3158 of file source/blender/blenkernel/intern/image.cc.

References ListBase::first, RenderPass::name, RenderPass::next, RenderLayer::passes, STREQ, view, and RenderPass::view_id.

Referenced by BKE_image_multilayer_index(), and image_get_render_result().

◆ image_runtime_free_data()

static void image_runtime_free_data ( struct Image *  image)
static

◆ image_runtime_reset()

static void image_runtime_reset ( struct Image *  image)
static

Reset runtime image fields when data-block is being initialized.

Definition at line 117 of file source/blender/blenkernel/intern/image.cc.

References BLI_mutex_init(), image(), and MEM_mallocN.

Referenced by image_blend_read_data(), and image_init().

◆ image_runtime_reset_on_copy()

static void image_runtime_reset_on_copy ( struct Image *  image)
static

Reset runtime image fields when data-block is being copied.

Definition at line 125 of file source/blender/blenkernel/intern/image.cc.

References BLI_mutex_init(), image(), and MEM_mallocN.

Referenced by image_copy_data().

◆ image_tag_frame_recalc()

static void image_tag_frame_recalc ( Image *  ima,
ID *  iuser_id,
ImageUser *  iuser,
void *  customdata 
)
static

◆ image_tag_reload()

static void image_tag_reload ( Image *  ima,
ID *  iuser_id,
ImageUser *  iuser,
void *  customdata 
)
static

◆ image_update_views_format()

static void image_update_views_format ( Image *  ima,
ImageUser *  iuser 
)
static

◆ image_user_id_eval_animation()

static void image_user_id_eval_animation ( Image *  ima,
ID *  UNUSEDiduser_id,
ImageUser *  iuser,
void *  customdata 
)
static

◆ image_user_id_has_animation()

static void image_user_id_has_animation ( Image *  ima,
ID *  UNUSEDiuser_id,
ImageUser *  UNUSEDiuser,
void *  customdata 
)
static

◆ image_viewer_create_views()

static void image_viewer_create_views ( const RenderData *  rd,
Image *  ima 
)
static

◆ image_walk_gpu_materials()

static void image_walk_gpu_materials ( ID *  id,
ListBase *  gpu_materials,
void *  customdata,
void   callbackImage *ima, ID *iuser_id, ImageUser *iuser, void *customdata 
)
static

◆ image_walk_id_all_users()

static void image_walk_id_all_users ( ID *  id,
bool  skip_nested_nodes,
void *  customdata,
void   callbackImage *ima, ID *iuser_id, ImageUser *iuser, void *customdata 
)
static

◆ image_walk_ntree_all_users()

static void image_walk_ntree_all_users ( bNodeTree *  ntree,
ID *  id,
void *  customdata,
void   callbackImage *ima, ID *iuser_id, ImageUser *iuser, void *customdata 
)
static

◆ imagecache_check_dirty()

static bool imagecache_check_dirty ( ImBuf *  ibuf,
void *  UNUSEDuserkey,
void *  UNUSEDuserdata 
)
static

◆ imagecache_check_free_anim()

static bool imagecache_check_free_anim ( ImBuf *  ibuf,
void *  UNUSEDuserkey,
void *  userdata 
)
static

◆ imagecache_get()

static struct ImBuf* imagecache_get ( Image *  image,
int  index,
bool *  r_is_cached_empty 
)
static

◆ imagecache_hashcmp()

static bool imagecache_hashcmp ( const void *  a_v,
const void *  b_v 
)
static

Definition at line 493 of file source/blender/blenkernel/intern/image.cc.

References Freestyle::a, and usdtokens::b().

Referenced by imagecache_put().

◆ imagecache_hashhash()

static unsigned int imagecache_hashhash ( const void *  key_v)
static

Definition at line 487 of file source/blender/blenkernel/intern/image.cc.

References ImageCacheKey::index.

Referenced by imagecache_put().

◆ imagecache_keydata()

static void imagecache_keydata ( void *  userkey,
int *  framenr,
int *  proxy,
int *  render_flags 
)
static

◆ imagecache_put()

static void imagecache_put ( Image *  image,
int  index,
ImBuf *  ibuf 
)
static

◆ imagecache_remove()

static void imagecache_remove ( Image *  image,
int  index 
)
static

◆ imbuf_alpha_flags_for_image()

static int imbuf_alpha_flags_for_image ( Image *  ima)
static

◆ load_image_single()

static ImBuf* load_image_single ( Image *  ima,
ImageUser *  iuser,
int  cfra,
const int  view_id,
const bool  has_packed,
const bool  is_sequence,
bool *  r_cache_ibuf 
)
static

◆ load_movie_single()

static ImBuf* load_movie_single ( Image *  ima,
ImageUser *  iuser,
int  frame,
const int  view_id 
)
static

◆ metadata_copy_custom_fields()

static void metadata_copy_custom_fields ( const char *  field,
const char *  value,
void *  rr_v 
)
static

◆ metadata_get_field()

static void metadata_get_field ( void *  data,
const char *  propname,
char *  propvalue,
int  len 
)
static

◆ metadata_set_field()

static void metadata_set_field ( void *  data,
const char *  propname,
char *  propvalue,
int   UNUSEDlen 
)
static

◆ openanim()

struct anim* openanim ( const char *  name,
int  flags,
int  streamindex,
char  colorspace[IMA_MAX_SPACE] 
)

◆ openanim_noload()

struct anim* openanim_noload ( const char *  name,
int  flags,
int  streamindex,
char  colorspace[IMA_MAX_SPACE] 
)

◆ stampdata()

static void stampdata ( const Scene *  scene,
Object *  camera,
StampData *  stamp_data,
int  do_prefix,
bool  use_dynamic 
)
static

◆ stampdata_from_template()

static void stampdata_from_template ( StampData *  stamp_data,
const Scene *  scene,
const StampData *  stamp_data_template,
bool  do_prefix 
)
static

◆ tile_sort_cb()

static int tile_sort_cb ( const void *  a,
const void *  b 
)
static

Variable Documentation

◆ IDType_ID_IM

IDTypeInfo IDType_ID_IM = get_type_info()

Definition at line 457 of file source/blender/blenkernel/intern/image.cc.

◆ LOG

CLG_LogRef LOG = {"bke.image"}
static

Definition at line 106 of file source/blender/blenkernel/intern/image.cc.

Referenced by image_memorypack_imbuf().

◆ stamp_metadata_fields

const char* stamp_metadata_fields[]
static
Initial value:
= {
"File",
"Note",
"Date",
"Marker",
"Time",
"Frame",
"FrameRange",
"Camera",
"Lens",
"Scene",
"Strip",
"RenderTime",
"Memory",
"Hostname",
nullptr,
}

Definition at line 2328 of file source/blender/blenkernel/intern/image.cc.

Referenced by BKE_stamp_is_known_field().