Blender V4.5
image.cc File Reference
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <fcntl.h>
#include <optional>
#include <unistd.h>
#include <regex>
#include <string>
#include "BLI_array.hh"
#include "BLI_fileops.h"
#include "BLI_listbase.h"
#include "BLI_path_utils.hh"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_string_utils.hh"
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "IMB_colormanagement.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "IMB_metadata.hh"
#include "IMB_moviecache.hh"
#include "IMB_openexr.hh"
#include "MOV_read.hh"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_defaults.h"
#include "DNA_image_types.h"
#include "DNA_light_types.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "DNA_userdef_types.h"
#include "DNA_world_types.h"
#include "BLI_math_vector.h"
#include "BLI_mempool.h"
#include "BLI_string_utf8.h"
#include "BLI_system.h"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_time.h"
#include "BLI_timecode.h"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "BKE_bpath.hh"
#include "BKE_colortools.hh"
#include "BKE_global.hh"
#include "BKE_icons.h"
#include "BKE_idtype.hh"
#include "BKE_image.hh"
#include "BKE_image_format.hh"
#include "BKE_lib_id.hh"
#include "BKE_library.hh"
#include "BKE_main.hh"
#include "BKE_node.hh"
#include "BKE_node_legacy_types.hh"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.hh"
#include "BKE_packedFile.hh"
#include "BKE_preview_image.hh"
#include "BKE_report.hh"
#include "BKE_scene.hh"
#include "BKE_workspace.hh"
#include "BLF_api.hh"
#include "RE_pipeline.h"
#include "SEQ_utils.hh"
#include "GPU_material.hh"
#include "GPU_texture.hh"
#include "BLI_sys_types.h"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "DRW_engine.hh"
#include "BLO_read_write.hh"
#include "DNA_node_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_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)
#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 ImageTileimagetile_alloc (int tile_number)
static Imageimage_alloc (Main *bmain, std::optional< Library * > owner_library, const char *name, short source, short type)
static ImBufimage_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, ImageUser *iuser)
bool BKE_image_has_opengl_texture (Image *ima)
static int image_get_tile_number_from_iuser (const Image *ima, const ImageUser *iuser)
ImageTileBKE_image_get_tile (Image *ima, int tile_number)
ImageTileBKE_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])
static float distance_to_unit_interval (float x)
static float distance_squared_to_udim (const float co[2], const float udim[2])
static bool nearest_udim_tile_tie_break (const float best_dist_sq, const float best_uv[2], const float dist_sq, const float 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 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)
static void image_abs_path (Main *bmain, Library *owner_library, const char *filepath, char *r_filepath_abs)
ImageBKE_image_load (Main *bmain, const char *filepath)
ImageBKE_image_load_in_lib (Main *bmain, std::optional< Library * > owner_library, const char *filepath)
ImageBKE_image_load_exists (Main *bmain, const char *filepath, bool *r_exists)
ImageBKE_image_load_exists_in_lib (Main *bmain, std::optional< Library * > owner_library, const char *filepath, bool *r_exists)
static void image_buf_fill_isolated (void *usersata_v)
static ImBufadd_ibuf_for_tile (Image *ima, ImageTile *tile)
ImageBKE_image_add_generated (Main *bmain, uint width, uint 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)
ImageBKE_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 *, void *)
void BKE_image_free_all_textures (Main *bmain)
static bool imagecache_check_free_anim (ImBuf *ibuf, void *, 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 uint 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 ImBufimagecache_get (Image *image, int index, bool *r_is_cached_empty)
New Image API
ImageBKE_image_ensure_viewer (Main *bmain, int type, const char *name)
static void image_viewer_create_views (const RenderData *rd, Image *ima)
static bool image_views_match_render_views (const Image *image, const RenderData *render_data)
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)
static bool image_remove_tile (Image *ima, ImageTile *tile)
static void image_remove_all_tiles (Image *ima)
void BKE_image_signal (Main *bmain, Image *ima, ImageUser *iuser, int signal)
static RenderPassimage_render_pass_get (RenderLayer *rl, const int pass, const int view, int *r_passindex)
int BKE_image_get_tile_label (const Image *ima, const ImageTile *tile, char *label, const int label_maxncpy)
bool BKE_image_get_tile_info (char *filepath, ListBase *tiles, int *r_tile_start, int *r_tile_range)
ImageTileBKE_image_add_tile (Image *ima, int tile_number, const char *label)
bool BKE_image_remove_tile (Image *ima, ImageTile *tile)
void BKE_image_reassign_tile (Image *ima, ImageTile *tile, int new_tile_number)
static int tile_sort_cb (const void *a, const void *b)
void BKE_image_sort_tiles (Image *ima)
bool BKE_image_fill_tile (Image *ima, ImageTile *tile)
bool BKE_image_is_filename_tokenized (char *filepath)
void BKE_image_ensure_tile_token_filename_only (char *filename, size_t filename_maxncpy)
void BKE_image_ensure_tile_token (char *filepath, size_t filepath_maxncpy)
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)
RenderPassBKE_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)
RenderResultBKE_image_acquire_renderresult (Scene *scene, Image *ima)
void BKE_image_release_renderresult (Scene *scene, Image *ima, RenderResult *render_result)
bool BKE_image_is_openexr (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 *)
static int imbuf_alpha_flags_for_image (Image *ima)
static ImBufimage_load_sequence_multilayer (Image *ima, ImageUser *iuser, int entry, int frame)
static ImBufload_movie_single (Image *ima, ImageUser *iuser, int frame, const int view_id)
static ImBufimage_load_movie_file (Image *ima, ImageUser *iuser, int frame)
static ImBufload_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 ImBufimage_get_ibuf_multilayer (Image *ima, ImageUser *iuser)
static ImBufimage_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 ImBufimage_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)
ImBufBKE_image_acquire_ibuf (Image *ima, ImageUser *iuser, void **r_lock)
static int get_multilayer_view_index (const Image &image, const ImageUser &image_user, const char *view_name)
ImBufBKE_image_acquire_multilayer_view_ibuf (const RenderData &render_data, Image &image, const ImageUser &image_user, const char *pass_name, const char *view_name)
void BKE_image_release_ibuf (Image *ima, ImBuf *ibuf, void *lock)
bool BKE_image_has_ibuf (Image *ima, ImageUser *iuser)
ImBufBKE_image_preview (Image *ima, const short max_size, short *r_width, short *r_height)
Pool for Image Buffers
ImagePoolBKE_image_pool_new ()
void BKE_image_pool_free (ImagePool *pool)
BLI_INLINE ImBufimage_pool_find_item (ImagePool *pool, Image *image, int entry, int index, bool *r_found)
ImBufBKE_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 *, 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 *, ImageUser *, void *customdata)
bool BKE_image_user_id_has_animation (ID *id)
static void image_user_id_eval_animation (Image *ima, 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)
ucharBKE_image_get_pixels_for_frame (Image *image, int frame, int tile)
float * BKE_image_get_float_pixels_for_frame (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 *, 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)
ImBufBKE_image_get_ibuf_with_name (Image *image, const char *filepath)
ImBufBKE_image_get_first_ibuf (Image *image)
Render Slots
RenderSlotBKE_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)
RenderSlotBKE_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)
#define IMA_INDEX_ENTRY(index)
IDTypeInfo IDType_ID_IM = get_type_info()
static void image_runtime_free_data (Image *image)
static void image_gpu_runtime_reset (Image *ima)
static void image_init_data (ID *id)
static void image_copy_data (Main *, std::optional< Library * >, 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_after_liblink (BlendLibReader *, ID *id)
constexpr IDTypeInfo get_type_info ()
static int image_num_viewfiles (Image *ima)
static ImBufimage_load_image_file (Image *ima, ImageUser *iuser, int entry, int cfra, bool is_sequence)
static ImBufimage_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, uchar *rect, float *rectf, int width, int height)
void BKE_render_result_stamp_info (Scene *scene, Object *camera, RenderResult *rr, bool allocate_only)
StampDataBKE_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, StampData *stamp_data, StampCallback callback, bool noskip)
void BKE_image_multilayer_stamp_info_callback (void *data, const Image &image, StampCallback callback, bool noskip)
void BKE_render_result_stamp_data (RenderResult *rr, const char *key, const char *value)
StampDataBKE_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)
static void metadata_get_field (void *data, const char *propname, char *propvalue, int propvalue_maxncpy)
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)
bool BKE_imbuf_write (ImBuf *ibuf, const char *filepath, const ImageFormatData *imf)
bool BKE_imbuf_write_as (ImBuf *ibuf, const char *filepath, const ImageFormatData *imf, const bool save_copy)
bool BKE_imbuf_write_stamp (const Scene *scene, const RenderResult *rr, ImBuf *ibuf, const char *filepath, const ImageFormatData *imf)
MovieReaderopenanim_noload (const char *filepath, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
MovieReaderopenanim (const char *filepath, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])

Macro Definition Documentation

◆ BUFF_MARGIN_X

#define BUFF_MARGIN_X   2

Referenced by BKE_image_stamp_buf().

◆ BUFF_MARGIN_Y

#define BUFF_MARGIN_Y   1

Referenced by BKE_image_stamp_buf().

◆ 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)
BMesh const char void * data

Referenced by BKE_stamp_info_callback(), and is_opcode_secure().

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

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

◆ IMA_INDEX_ENTRY

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

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

Referenced by imagecache_check_free_anim(), and imagecache_keydata().

◆ IMA_MAKE_INDEX

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

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

Referenced by image_assign_ibuf(), image_get_cached_ibuf_for_index_entry(), and image_remove_ibuf().

◆ IMA_NO_INDEX

◆ STAMP_NAME_SIZE

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

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

◆ TEXT_SIZE_CHECK

#define TEXT_SIZE_CHECK ( str,
w,
h )
Value:
((str[0]) && ((void)(h = h_fixed), (w = int(BLF_width(mono, str, sizeof(str))))))
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
Definition blf.cc:805
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
#define str(s)

Referenced by BKE_image_stamp_buf().

◆ TEXT_SIZE_CHECK_WORD_WRAP

#define TEXT_SIZE_CHECK_WORD_WRAP ( str,
w,
h )
Value:
((str[0]) && (BLF_boundbox(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(int fontid, const char *str, size_t str_len, rcti *r_box, ResultBLF *r_info=nullptr) ATTR_NONNULL(2)
Definition blf.cc:775
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
Definition BLI_rect.h:194
float wrap(float value, float max, float min)
Definition node_math.h:71

Referenced by BKE_image_stamp_buf().

Function Documentation

◆ add_ibuf_for_tile()

◆ BKE_image_acquire_ibuf()

ImBuf * BKE_image_acquire_ibuf ( Image * ima,
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 4823 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_acquire_ibuf(), image_acquire_ibuf(), lock, and Image::runtime.

Referenced by blender::ed::greasepencil::ImageBufferAccessor::acquire(), blender::image_engine::SpaceNodeAccessor::acquire_image_buffer(), blender::io::fbx::add_image_texture(), blender::bke::pbvh::pixels::apply_watertight_check(), blender::ed::space_node::backimage_fit_exec(), bake_images(), blender::ed::object::bake_object_check(), blender::ed::object::bake_targets_init_internal(), BKE_image_acquire_ibuf(), 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_preview(), BKE_image_save_options_init(), BKE_image_scale(), BKE_image_update_gputexture(), BKE_paint_canvas_key_get(), blender::compositor::CachedImage::CachedImage(), blender::ed::object::clear_single_image(), cmp_node_image_create_outputs(), colorfn(), blender::nodes::node_composite_cryptomatte_cc::CryptoMatteOperation::compute_image_domain(), blender::bke::pbvh::pixels::copy_pixels(), blender::bke::pbvh::pixels::copy_update(), 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_image_undo_push_begin_with_image_all_udims(), 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::io::usd::get_in_memory_texture_filename(), blender::nodes::node_composite_cryptomatte_cc::CryptoMatteOperation::get_layers_from_image(), gpu_texture_create_tile_array(), icon_preview_startjob(), image_clipboard_copy_exec(), image_file_format_writable(), image_flip_exec(), image_from_context_has_data_poll(), image_get_gpu_texture(), image_invert_exec(), image_rect_update(), image_rotate_orthogonal_exec(), 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(), BlenderImageLoader::load_metadata(), BlenderImageLoader::load_pixels(), blender::bke::pbvh::pixels::mark_image_dirty(), metadata_panel_context_draw(), blender::ed::object::multiresbake_check(), blender::nodes::node_geo_image_info_cc::node_geo_exec(), 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(), uhandle_restore_list(), uiTemplateImage(), uiTemplateImageInfo(), blender::bke::pbvh::pixels::update_pixels(), blender::ed::space_node::viewer_border_exec(), blender::render::Context::viewer_output_to_viewer_image(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_refresh(), blender::ed::space_node::WIDGETGROUP_node_crop_refresh(), blender::ed::space_node::WIDGETGROUP_node_mask_refresh(), blender::ed::space_node::WIDGETGROUP_node_sbeam_refresh(), blender::ed::space_node::WIDGETGROUP_node_split_refresh(), blender::ed::space_node::WIDGETGROUP_node_transform_refresh(), and blender::ed::object::write_internal_bake_pixels().

◆ BKE_image_acquire_multilayer_view_ibuf()

ImBuf * BKE_image_acquire_multilayer_view_ibuf ( const RenderData & render_data,
Image & image,
const ImageUser & image_user,
const char * pass_name,
const char * view_name )

Return image buffer for given image, user, pass, and view. Is thread-safe, so another thread can be changing image while this function is executed.

If the image is single-layer then the pass name is completely ignored.

If the image is multi-layer then this function does all needed internal configurations to read the pass. There is no need to acquire a temporary ImBuf prior to this call (which is what some legacy code had to do to ensure proper type and RenderResult).

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

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

References BKE_image_acquire_multilayer_view_ibuf(), BKE_image_is_multilayer(), BKE_image_multilayer_index(), BKE_scene_multiview_view_id_get(), BLI_assert, BLI_findlink(), BLI_findstringindex(), get_multilayer_view_index(), image_acquire_ibuf(), IMB_freeImBuf(), ImageUser::layer, RenderResult::layers, lock, ImageUser::multi_index, offsetof, ImageUser::pass, RenderLayer::passes, Image::rr, Image::runtime, and ImageUser::view.

Referenced by BKE_image_acquire_multilayer_view_ibuf().

◆ BKE_image_acquire_renderresult()

◆ BKE_image_add_from_imbuf()

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

◆ BKE_image_add_generated()

◆ BKE_image_add_renderslot()

◆ BKE_image_add_tile()

◆ BKE_image_all_free_anim_ibufs()

void BKE_image_all_free_anim_ibufs ( Main * bmain,
int cfra )

◆ BKE_image_alpha_mode_from_extension()

◆ BKE_image_alpha_mode_from_extension_ex()

char BKE_image_alpha_mode_from_extension_ex ( const char * filepath)

◆ BKE_image_backup_render()

◆ BKE_image_buffer_format_writable()

◆ BKE_image_clear_renderslot()

◆ BKE_image_editors_update_frame()

◆ BKE_image_ensure_tile_token()

void BKE_image_ensure_tile_token ( char * filepath,
size_t filepath_maxncpy )

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 3659 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_ensure_tile_token(), BKE_image_ensure_tile_token_filename_only(), and BLI_path_basename().

Referenced by BKE_image_ensure_tile_token(), BKE_image_signal(), BKE_packedfile_unpack_image(), do_versions_after_linking_300(), and image_file_browse_exec().

◆ BKE_image_ensure_tile_token_filename_only()

◆ BKE_image_ensure_viewer()

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

Ensures an Image exists for viewing nodes or render forces existence of 1 Image for render-output or nodes, returns Image.

Parameters
nameOnly for default, when making new one.

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

References BKE_image_ensure_viewer(), ListBase::first, Image::id, id_us_ensure_real(), IMA_SRC_VIEWER, image_alloc(), Main::images, ID::next, Image::source, Image::type, and ID::us.

Referenced by blender::ed::space_node::backimage_fit_exec(), BKE_image_ensure_viewer(), blender::ed::space_node::draw_nodespace_back_pix(), blender::draw::color_management::drw_color_management_type_for_space_node(), ED_node_composite_job(), ED_node_set_active(), ED_space_node_color_sample(), ED_space_node_get_position(), blender::image_engine::SpaceNodeAccessor::get_image(), image_read_viewlayers_exec(), blender::nodes::node_composite_viewer_cc::node_composit_init_viewer(), blender::render::Context::output_to_render_result(), render_view_open(), blender::ed::space_node::sample_apply(), screen_opengl_render_init(), screen_render_exec(), screen_render_invoke(), blender::ed::space_node::snode_bg_viewmove_invoke(), blender::ed::space_node::viewer_border_exec(), blender::render::Context::viewer_output_to_viewer_image(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_refresh(), blender::ed::space_node::WIDGETGROUP_node_crop_refresh(), blender::ed::space_node::WIDGETGROUP_node_mask_refresh(), blender::ed::space_node::WIDGETGROUP_node_sbeam_refresh(), blender::ed::space_node::WIDGETGROUP_node_split_refresh(), blender::ed::space_node::WIDGETGROUP_node_transform_refresh(), and wm_draw_region_stereo_set().

◆ BKE_image_ensure_viewer_views()

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

◆ BKE_image_file_format_set()

◆ BKE_image_fill_tile()

◆ BKE_image_find_nearest_tile()

int BKE_image_find_nearest_tile ( const 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()

◆ BKE_image_free_anim_ibufs()

void BKE_image_free_anim_ibufs ( Image * ima,
int except_frame )

Operates on one image only!

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

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

References BKE_image_free_anim_ibufs(), Image::cache, imagecache_check_free_anim(), IMB_moviecache_cleanup(), lock, and Image::runtime.

Referenced by BKE_image_all_free_anim_ibufs(), and BKE_image_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 ( 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 613 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_free_buffers_ex(), BKE_image_free_gputextures(), image_free_anims(), image_free_cached_frames(), RE_FreeRenderResult(), Image::rr, and Image::runtime.

Referenced by BKE_image_free_buffers(), BKE_image_free_buffers_ex(), and BlenderImageLoader::load_pixels().

◆ BKE_image_free_data()

void BKE_image_free_data ( Image * image)

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

Note
Call from library.

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

References BKE_image_free_data(), Image::id, and image_free_data().

Referenced by BKE_image_free_data().

◆ BKE_image_free_packedfiles()

void BKE_image_free_packedfiles ( Image * ima)

◆ BKE_image_free_views()

◆ BKE_image_get_aspect()

◆ BKE_image_get_first_ibuf()

ImBuf * BKE_image_get_first_ibuf ( 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 5575 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_get_first_ibuf(), Image::cache, IMB_moviecacheIter_done(), IMB_moviecacheIter_free(), IMB_moviecacheIter_getImBuf(), IMB_moviecacheIter_new(), IMB_refImBuf(), lock, and Image::runtime.

Referenced by BKE_image_find_nearest_tile_with_offset(), and BKE_image_get_first_ibuf().

◆ BKE_image_get_float_pixels_for_frame()

◆ BKE_image_get_ibuf_with_name()

◆ BKE_image_get_pixels_for_frame()

◆ BKE_image_get_renderslot()

◆ BKE_image_get_size()

◆ BKE_image_get_size_fl()

◆ 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()

◆ BKE_image_get_tile_info()

bool BKE_image_get_tile_info ( char * filepath,
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 3433 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_ensure_tile_token_filename_only(), BKE_image_get_tile_info(), 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_path_join, BLI_path_split_dir_file(), dirname(), FILE_MAX, FILE_MAXDIR, FILE_MAXFILE, i, IMA_UDIM_MAX, max_ii(), MEM_SAFE_FREE, min_ii(), POINTER_FROM_INT, and tiles.

Referenced by BKE_image_get_tile_info(), BKE_image_signal(), get_udim_tiles(), and image_detect_frame_range().

◆ BKE_image_get_tile_label()

int BKE_image_get_tile_label ( const Image * ima,
const ImageTile * tile,
char * label,
int label_maxncpy )

Get tile index for tiled images.

Returns
The string length.

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

References BKE_image_get_tile_label(), BLI_snprintf_rlen(), BLI_strncpy_rlen(), and tile.

Referenced by BKE_image_get_tile_label().

◆ 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()

◆ BKE_image_get_tile_uv()

◆ BKE_image_has_alpha()

bool BKE_image_has_alpha ( Image * image)

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

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

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

Referenced by BKE_image_has_alpha(), and uiTemplateImage().

◆ BKE_image_has_anim()

◆ BKE_image_has_filepath()

◆ BKE_image_has_ibuf()

◆ BKE_image_has_loaded_ibuf()

◆ BKE_image_has_multiple_ibufs()

bool BKE_image_has_multiple_ibufs ( Image * image)

◆ BKE_image_has_opengl_texture()

bool BKE_image_has_opengl_texture ( Image * ima)

◆ BKE_image_has_packedfile()

◆ BKE_image_init_imageuser()

◆ BKE_image_is_animated()

◆ BKE_image_is_dirty()

◆ BKE_image_is_dirty_writable()

◆ BKE_image_is_filename_tokenized()

bool BKE_image_is_filename_tokenized ( char * filepath)

◆ BKE_image_is_multilayer()

bool BKE_image_is_multilayer ( const Image * ima)

For multi-layer images as well as for render-viewer and because rendered results use fake layer/passes, don't correct for wrong indices here.

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

References BKE_image_is_multilayer(), ELEM, IMA_SRC_FILE, IMA_SRC_SEQUENCE, IMA_SRC_TILED, IMA_SRC_VIEWER, IMA_TYPE_MULTILAYER, IMA_TYPE_R_RESULT, Image::source, and Image::type.

Referenced by BKE_image_acquire_multilayer_view_ibuf(), BKE_image_is_multilayer(), blender::compositor::compute_image_user_for_pass(), and image_get_multiview_index().

◆ BKE_image_is_multiview()

◆ BKE_image_is_openexr()

bool BKE_image_is_openexr ( Image * ima)

◆ BKE_image_is_stereo()

◆ BKE_image_load()

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

Returns a new image or NULL if it can't load.

Note
: The _in_lib version allows to add a new image in a given library. It also affects the root path used for relative filepaths. See also BKE_id_new and BKE_id_new_in_lib documentation for more details.

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

References BKE_image_load(), and BKE_image_load_in_lib().

Referenced by BKE_image_load(), blender::bke::tests::ImageTest::load_image(), and blender::io::usd::process_usdz_textures().

◆ BKE_image_load_exists()

Image * BKE_image_load_exists ( Main * bmain,
const char * filepath,
bool * r_exists = nullptr )

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).

Note
: The _in_lib version allows to find an existing (or add a new) image in a given library. It also affects the root path used for relative filepaths. See also BKE_id_new and BKE_id_new_in_lib documentation for more details.

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

References BKE_image_load_exists(), and BKE_image_load_exists_in_lib().

Referenced by BKE_image_load_exists(), blender::io::usd::load_image(), blender::io::obj::load_image_at_path(), blender::io::usd::USDMaterialReader::load_tex_image(), blender::io::fbx::load_texture_image(), WM_operator_drop_load_path(), and DocumentImporter::writeImage().

◆ BKE_image_load_exists_in_lib()

◆ BKE_image_load_in_lib()

◆ BKE_image_mark_dirty()

◆ BKE_image_memorypack()

◆ BKE_image_merge()

◆ BKE_image_multilayer_index()

◆ BKE_image_multilayer_stamp_info_callback()

void BKE_image_multilayer_stamp_info_callback ( void * data,
const Image & image,
StampCallback callback,
bool noskip )

◆ BKE_image_multiview_index()

◆ BKE_image_packfiles()

◆ BKE_image_packfiles_from_mem()

◆ BKE_image_pool_acquire_ibuf()

◆ BKE_image_pool_free()

◆ BKE_image_pool_new()

◆ BKE_image_pool_release_ibuf()

◆ BKE_image_preview()

ImBuf * BKE_image_preview ( Image * ima,
short max_size,
short * r_width,
short * r_height )

Return image buffer of preview for given image r_width & r_height are optional and return the original size of the image.

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

References BKE_image_acquire_ibuf(), BKE_image_preview(), BKE_image_release_ibuf(), Box, IMB_byte_from_float(), IMB_dupImBuf(), IMB_scale(), lock, ImBuf::x, and ImBuf::y.

Referenced by BKE_image_preview(), and ui_tooltip_from_image().

◆ BKE_image_print_memlist()

void BKE_image_print_memlist ( Main * bmain)

Prints memory statistics for images.

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

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

Referenced by BKE_image_print_memlist().

◆ BKE_image_reassign_tile()

◆ BKE_image_release_ibuf()

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

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

References BKE_image_release_ibuf(), BLI_thread_unlock(), IMB_freeImBuf(), lock, LOCK_VIEWER, RE_ReleaseResultImage(), and Image::runtime.

Referenced by blender::io::fbx::add_image_texture(), blender::bke::pbvh::pixels::apply_watertight_check(), blender::ed::space_node::backimage_fit_exec(), bake_images(), blender::ed::object::bake_object_check(), blender::ed::object::bake_targets_init_internal(), 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_preview(), BKE_image_release_ibuf(), BKE_image_save_options_init(), BKE_image_scale(), BKE_image_update_gputexture(), BKE_paint_canvas_key_get(), blender::compositor::CachedImage::CachedImage(), blender::ed::object::clear_single_image(), cmp_node_image_create_outputs(), colorfn(), blender::nodes::node_composite_cryptomatte_cc::CryptoMatteOperation::compute_image_domain(), blender::bke::pbvh::pixels::copy_pixels(), blender::bke::pbvh::pixels::copy_update(), 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_image_undo_push_begin_with_image_all_udims(), ED_space_image_acquire_buffer(), ED_space_image_release_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::bke::image::partial_update::ImageTileData::free_data(), blender::io::usd::get_in_memory_texture_filename(), blender::nodes::node_composite_cryptomatte_cc::CryptoMatteOperation::get_layers_from_image(), gpu_texture_create_tile_array(), icon_preview_startjob(), image_clipboard_copy_exec(), image_file_format_writable(), image_flip_exec(), image_from_context_has_data_poll(), image_get_gpu_texture(), image_invert_exec(), image_rect_update(), blender::ed::greasepencil::image_render::image_render_end(), image_rotate_orthogonal_exec(), image_save_single(), image_scale_exec(), image_scale_invoke(), image_undosys_step_encode(), blender::nodes::node_geo_image_texture_cc::ImageFieldsFunction::ImageFieldsFunction(), BlenderImageLoader::load_metadata(), BlenderImageLoader::load_pixels(), blender::bke::pbvh::pixels::mark_image_dirty(), metadata_panel_context_draw(), blender::ed::object::multiresbake_check(), blender::nodes::node_geo_image_info_cc::node_geo_exec(), 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::ed::greasepencil::ImageBufferAccessor::release(), blender::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(), uhandle_restore_list(), uiTemplateImage(), uiTemplateImageInfo(), blender::bke::pbvh::pixels::update_pixels(), blender::ed::space_node::viewer_border_exec(), blender::render::Context::viewer_output_to_viewer_image(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_refresh(), blender::ed::space_node::WIDGETGROUP_node_crop_refresh(), blender::ed::space_node::WIDGETGROUP_node_mask_refresh(), blender::ed::space_node::WIDGETGROUP_node_sbeam_refresh(), blender::ed::space_node::WIDGETGROUP_node_split_refresh(), blender::ed::space_node::WIDGETGROUP_node_transform_refresh(), blender::ed::object::write_internal_bake_pixels(), and blender::nodes::node_geo_image_texture_cc::ImageFieldsFunction::~ImageFieldsFunction().

◆ BKE_image_release_renderresult()

◆ BKE_image_remove_renderslot()

◆ BKE_image_remove_tile()

bool BKE_image_remove_tile ( Image * ima,
ImageTile * tile )

◆ BKE_image_replace_imbuf()

void BKE_image_replace_imbuf ( Image * image,
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 1354 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_free_buffers, BKE_image_mark_dirty(), BKE_image_replace_imbuf(), BLI_assert, ImBufFloatBuffer::data, ELEM, ImBuf::float_buffer, IMA_GEN_FLOAT, IMA_NO_INDEX, IMA_SRC_FILE, IMA_SRC_GENERATED, IMA_TYPE_IMAGE, image_assign_ibuf(), image_colorspace_from_imbuf(), Image::source, Image::type, ImBuf::x, and ImBuf::y.

Referenced by BKE_image_add_from_imbuf(), BKE_image_replace_imbuf(), and update_image_from_plane_marker_exec().

◆ BKE_image_scale()

bool BKE_image_scale ( Image * image,
int width,
int height,
ImageUser * iuser )

◆ BKE_image_sequence_guess_offset()

int BKE_image_sequence_guess_offset ( Image * image)

◆ BKE_image_set_filepath_from_tile_number()

◆ BKE_image_signal()

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

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

References BKE_image_add_tile(), BKE_image_ensure_tile_token(), BKE_image_free_buffers, BKE_image_get_tile, BKE_image_get_tile_info(), BKE_image_get_tile_strformat(), BKE_image_has_packedfile(), BKE_image_init_imageuser(), BKE_image_is_filename_tokenized(), BKE_image_packfiles(), BKE_image_partial_update_mark_full_update(), BKE_image_remove_tile(), BKE_image_set_filepath_from_tile_number(), BKE_image_signal(), BKE_image_walk_all_users(), BKE_ntree_update(), BKE_ntree_update_tag_id_changed(), BKE_packedfile_free(), BKE_packedfile_new(), BLI_freelistN(), BLI_listbase_count(), BLI_listbase_count_is_equal_to(), BLI_path_abs(), BLI_path_is_rel(), BLI_path_rel(), ELEM, FILE_MAX, Image::filepath, ImageTile::gen_flag, ImageTile::gen_x, ImageTile::gen_y, Image::id, ID_BLEND_PATH, ID_BLEND_PATH_FROM_GLOBAL, IMA_GEN_TILE, 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_get_cached_ibuf_for_index_entry(), image_num_viewfiles(), image_remove_all_tiles(), image_tag_frame_recalc(), image_tag_reload(), image_update_views_format(), IMB_freeImBuf(), LISTBASE_FOREACH, MEM_freeN(), Image::packedfiles, pf, POINTER_AS_INT, printf, result, Image::runtime, ImageUser::scene, Image::source, STRNCPY(), ImageTile::tile_number, Image::tiles, Image::type, ImBuf::x, and ImBuf::y.

Referenced by BKE_image_save(), BKE_image_signal(), BKE_packedfile_unpack_image(), ED_space_image_auto_set(), ED_space_image_set(), image_clipboard_paste_exec(), image_foreach_path(), image_new_exec(), image_open_exec(), image_reload_exec(), image_replace_exec(), blender::ed::space_node::node_add_image_exec(), blender::render::Context::output_to_render_result(), proj_paint_add_slot(), screen_opengl_render_init(), screen_render_exec(), and screen_render_invoke().

◆ BKE_image_sort_tiles()

◆ BKE_image_stamp_buf()

◆ BKE_image_tag_time()

◆ 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 3665 of file source/blender/blenkernel/intern/image.cc.

References BKE_image_get_tile_number_from_filepath(), BKE_image_get_tile_strformat(), BKE_image_tile_filepath_exists(), BLI_assert, BLI_filelist_dir_contents(), BLI_filelist_free(), BLI_path_is_rel(), BLI_path_split_dir_part(), dirname(), FILE_MAXDIR, i, IMA_UDIM_MAX, and MEM_SAFE_FREE.

Referenced by BKE_image_load_in_lib(), and BKE_image_tile_filepath_exists().

◆ BKE_image_user_file_path()

◆ BKE_image_user_file_path_ex()

◆ BKE_image_user_frame_calc()

◆ BKE_image_user_frame_get()

◆ BKE_image_user_id_eval_animation()

◆ BKE_image_user_id_has_animation()

◆ 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()

◆ BKE_imbuf_alpha_test()

◆ BKE_imbuf_stamp_info()

◆ BKE_imbuf_write()

bool BKE_imbuf_write ( ImBuf * ibuf,
const char * filepath,
const ImageFormatData * imf )

◆ BKE_imbuf_write_as()

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

Same as BKE_imbuf_write() but crappy workaround not to permanently modify some, values in the imbuf.

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

References BKE_imbuf_write(), BKE_imbuf_write_as(), ImBuf::foptions, ImBuf::ftype, ImageFormatData::planes, and ImBuf::planes.

Referenced by BKE_imbuf_write_as(), blender::io::usd::export_in_memory_imbuf(), and image_save_single().

◆ BKE_imbuf_write_stamp()

bool BKE_imbuf_write_stamp ( const Scene * scene,
const RenderResult * rr,
ImBuf * ibuf,
const char * filepath,
const ImageFormatData * imf )

◆ BKE_render_result_stamp_data()

◆ BKE_render_result_stamp_info()

◆ BKE_stamp_data_copy()

◆ BKE_stamp_data_free()

◆ BKE_stamp_info_callback()

◆ BKE_stamp_info_from_imbuf()

◆ BKE_stamp_info_from_scene_static()

StampData * BKE_stamp_info_from_scene_static ( const Scene * scene)

Fills in the static stamp data (i.e. everything except things that can change per frame). The caller is responsible for freeing the allocated memory.

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

References BKE_stamp_info_from_scene_static(), MEM_callocN(), Scene::r, R_STAMP_ALL, RenderData::stamp, and stampdata().

Referenced by BKE_stamp_info_from_scene_static().

◆ 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 2459 of file source/blender/blenkernel/intern/image.cc.

References BKE_stamp_is_known_field(), i, stamp_metadata_fields, and STREQ.

Referenced by BKE_stamp_is_known_field(), metadata_copy_custom_fields(), and metadata_is_custom_drawable().

◆ copy_image_packedfiles()

◆ distance_squared_to_udim()

float distance_squared_to_udim ( const float co[2],
const float udim[2] )
static

Distance squared between #co and the unit square with lower-left starting at #udim.

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

References distance_squared_to_udim(), distance_to_unit_interval(), len_squared_v2(), and sub_v2_v2v2().

Referenced by BKE_image_find_nearest_tile_with_offset(), and distance_squared_to_udim().

◆ distance_to_unit_interval()

float distance_to_unit_interval ( float x)
static

Linear distance between x and the unit interval.

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

References distance_to_unit_interval(), and x.

Referenced by distance_squared_to_udim(), and distance_to_unit_interval().

◆ get_multilayer_view_index()

int get_multilayer_view_index ( const Image & image,
const ImageUser & image_user,
const char * view_name )
static

◆ get_type_info()

◆ image_abs_path()

void image_abs_path ( Main * bmain,
Library * owner_library,
const char * filepath,
char * r_filepath_abs )
static

◆ image_acquire_ibuf()

◆ image_add_view()

◆ image_alloc()

Image * image_alloc ( Main * bmain,
std::optional< Library * > owner_library,
const char * name,
short source,
short type )
static

◆ image_assign_ibuf()

◆ image_blend_read_after_liblink()

void image_blend_read_after_liblink ( BlendLibReader * ,
ID * id )
static

◆ image_blend_read_data()

◆ image_blend_write()

◆ image_buf_fill_isolated()

◆ image_colorspace_from_imbuf()

◆ image_copy_data()

◆ image_editors_update_frame()

◆ image_foreach_cache()

◆ image_foreach_path()

◆ image_free_anims()

◆ image_free_cached_frames()

◆ image_free_data()

◆ image_free_packedfiles()

◆ image_free_tile()

◆ image_get_cached_ibuf()

◆ image_get_cached_ibuf_for_index_entry()

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 706 of file source/blender/blenkernel/intern/image.cc.

References IMA_MAKE_INDEX, IMA_NO_INDEX, image_get_cached_ibuf_for_index_entry(), and imagecache_get().

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

◆ image_get_entry_and_index()

◆ image_get_ibuf_multilayer()

◆ image_get_multiview_index()

◆ image_get_render_result()

◆ image_get_tile_number_from_iuser()

◆ image_gpu_runtime_reset()

◆ image_init()

◆ image_init_after_load()

◆ image_init_color_management()

◆ image_init_data()

void image_init_data ( ID * id)
static

◆ image_init_multilayer_multiview()

◆ image_load_image_file()

◆ image_load_movie_file()

◆ image_load_sequence_multilayer()

◆ image_mem_size()

◆ image_memorypack_imbuf()

◆ image_num_viewfiles()

◆ image_pool_find_item()

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

◆ image_quick_test()

◆ image_remove_all_tiles()

void image_remove_all_tiles ( Image * ima)
static

◆ image_remove_ibuf()

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

◆ image_remove_tile()

◆ image_render_pass_get()

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. fall back to available if there are missing passes for active view.

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

References ListBase::first, image_render_pass_get(), RenderPass::name, RenderPass::next, RenderLayer::passes, STREQ, and RenderPass::view_id.

Referenced by BKE_image_multilayer_index(), image_get_render_result(), and image_render_pass_get().

◆ image_runtime_free_data()

◆ image_tag_frame_recalc()

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

◆ image_tag_reload()

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

◆ image_update_views_format()

◆ image_user_id_eval_animation()

◆ image_user_id_has_animation()

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

◆ image_viewer_create_views()

◆ image_views_match_render_views()

◆ image_walk_gpu_materials()

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()

◆ image_walk_ntree_all_users()

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()

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

◆ imagecache_check_free_anim()

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

◆ imagecache_get()

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

◆ imagecache_hashcmp()

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

◆ imagecache_hashhash()

uint imagecache_hashhash ( const void * key_v)
static

◆ imagecache_keydata()

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

◆ imagecache_put()

◆ imagecache_remove()

void imagecache_remove ( Image * image,
int index )
static

◆ imagetile_alloc()

ImageTile * imagetile_alloc ( int tile_number)
static

◆ imbuf_alpha_flags_for_image()

◆ load_image_single()

◆ load_movie_single()

◆ metadata_copy_custom_fields()

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

◆ metadata_get_field()

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

◆ metadata_set_field()

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

◆ nearest_udim_tile_tie_break()

bool nearest_udim_tile_tie_break ( const float best_dist_sq,
const float best_uv[2],
const float dist_sq,
const float uv[2] )
static

◆ openanim()

◆ openanim_noload()

MovieReader * openanim_noload ( const char * filepath,
int flags,
int streamindex,
char colorspace[IMA_MAX_SPACE] )

◆ stampdata()

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

◆ stampdata_from_template()

◆ tile_sort_cb()

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 471 of file source/blender/blenkernel/intern/image.cc.

◆ LOG

CLG_LogRef LOG = {"bke.image"}
static

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

◆ 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 2441 of file source/blender/blenkernel/intern/image.cc.

Referenced by BKE_stamp_is_known_field().