libheif
heif_regions.h
Go to the documentation of this file.
1 /*
2  * HEIF codec.
3  * Copyright (c) 2023 Dirk Farin <dirk.farin@gmail.com>
4  * Copyright (c) 2023 Brad Hards <bradh@frogmouth.net>
5  *
6  * This file is part of libheif.
7  *
8  * libheif is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as
10  * published by the Free Software Foundation, either version 3 of
11  * the License, or (at your option) any later version.
12  *
13  * libheif is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with libheif. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef LIBHEIF_HEIF_REGIONS_H
23 #define LIBHEIF_HEIF_REGIONS_H
24 
25 #include "heif_image_handle.h"
26 #include "heif_library.h"
27 #include "heif_error.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 // --- region items and annotations
34 
35 // See ISO/IEC 23008-12:2022 Section 6.10 "Region items and region annotations"
36 
37 typedef struct heif_region_item heif_region_item;
38 
45 typedef enum heif_region_type
46 {
53 
62 
71 
80 
106 
116 
125 
126 typedef struct heif_region heif_region;
127 
134 LIBHEIF_API
136 
155 LIBHEIF_API
157  heif_item_id* region_item_ids_array,
158  int max_count);
159 
170 LIBHEIF_API
171 heif_error heif_context_get_region_item(const heif_context* context,
172  heif_item_id region_item_id,
173  heif_region_item** out);
174 
181 LIBHEIF_API
183 
191 LIBHEIF_API
193 
204 LIBHEIF_API
205 void heif_region_item_get_reference_size(heif_region_item*, uint32_t* out_width, uint32_t* out_height);
206 
213 LIBHEIF_API
215 
238 LIBHEIF_API
240  heif_region** out_regions_array,
241  int max_count);
242 
252 LIBHEIF_API
253 void heif_region_release(const heif_region* region);
254 
265 LIBHEIF_API
266 void heif_region_release_many(const heif_region* const* regions_array, int num_items);
267 
274 LIBHEIF_API
276 
277 // When querying the region geometry, there is a version without and a version with "_transformed" suffix.
278 // The version without returns the coordinates in the reference coordinate space.
279 // The version with "_transformed" suffix give the coordinates in pixels after all transformative properties have been applied.
280 
293 LIBHEIF_API
294 heif_error heif_region_get_point(const heif_region* region, int32_t* out_x, int32_t* out_y);
295 
309 LIBHEIF_API
310 heif_error heif_region_get_point_transformed(const heif_region* region, heif_item_id image_id, double* out_x, double* out_y);
311 
329 LIBHEIF_API
330 heif_error heif_region_get_rectangle(const heif_region* region,
331  int32_t* out_x, int32_t* out_y,
332  uint32_t* out_width, uint32_t* out_height);
333 
352 LIBHEIF_API
354  heif_item_id image_id,
355  double* out_x, double* out_y,
356  double* out_width, double* out_height);
357 
375 LIBHEIF_API
376 heif_error heif_region_get_ellipse(const heif_region* region,
377  int32_t* out_x, int32_t* out_y,
378  uint32_t* out_radius_x, uint32_t* out_radius_y);
379 
380 
399 LIBHEIF_API
401  heif_item_id image_id,
402  double* out_x, double* out_y,
403  double* out_radius_x, double* out_radius_y);
404 
411 LIBHEIF_API
413 
432 LIBHEIF_API
434  int32_t* out_pts_array);
435 
455 LIBHEIF_API
457  heif_item_id image_id,
458  double* out_pts_array);
465 LIBHEIF_API
467 
496 LIBHEIF_API
498  int32_t* out_pts_array);
499 
519 LIBHEIF_API
521  heif_item_id image_id,
522  double* out_pts_array);
523 
558 LIBHEIF_API
560  int32_t* out_x, int32_t* out_y,
561  uint32_t* out_width, uint32_t* out_height,
562  heif_item_id* out_mask_item_id);
563 
570 LIBHEIF_API
572 
573 
603 LIBHEIF_API
605  int32_t* out_x, int32_t* out_y,
606  uint32_t* out_width, uint32_t* out_height,
607  uint8_t* out_mask_data);
608 
636 LIBHEIF_API
637 heif_error heif_region_get_mask_image(const heif_region* region,
638  int32_t* out_x, int32_t* out_y,
639  uint32_t* out_width, uint32_t* out_height,
640  heif_image** out_mask_image);
641 
642 // --- adding region items
643 
658 LIBHEIF_API
660  uint32_t reference_width, uint32_t reference_height,
661  heif_region_item** out_region_item);
662 
674 LIBHEIF_API
676  int32_t x, int32_t y,
677  heif_region** out_region);
678 
692 LIBHEIF_API
694  int32_t x, int32_t y,
695  uint32_t width, uint32_t height,
696  heif_region** out_region);
697 
711 LIBHEIF_API
713  int32_t x, int32_t y,
714  uint32_t radius_x, uint32_t radius_y,
715  heif_region** out_region);
716 
740 LIBHEIF_API
742  const int32_t* pts_array, int nPoints,
743  heif_region** out_region);
744 
769 LIBHEIF_API
771  const int32_t* pts_array, int nPoints,
772  heif_region** out_region);
773 
774 
810 LIBHEIF_API
812  int32_t x, int32_t y,
813  uint32_t width, uint32_t height,
814  heif_item_id mask_item_id,
815  heif_region** out_region);
816 
817 
843 LIBHEIF_API
845  int32_t x, int32_t y,
846  uint32_t width, uint32_t height,
847  const uint8_t* mask_data,
848  size_t mask_data_len,
849  heif_region** out_region);
850 
874 LIBHEIF_API
876  int32_t x, int32_t y,
877  uint32_t width, uint32_t height,
878  heif_image* image,
879  heif_region** out_region);
880 #ifdef __cplusplus
881 }
882 #endif
883 
884 #endif
struct heif_image_handle heif_image_handle
Definition: heif_library.h:90
uint32_t heif_item_id
Definition: heif_library.h:92
struct heif_context heif_context
Definition: heif_library.h:89
int heif_region_get_polyline_num_points(const heif_region *region)
Get the number of points in a polyline.
heif_error heif_region_item_add_region_inline_mask(heif_region_item *region_item, int32_t x, int32_t y, uint32_t width, uint32_t height, heif_image *image, heif_region **out_region)
Add an inline mask region image to the region item.
size_t heif_region_get_inline_mask_data_len(const heif_region *region)
Get the length of the data in an inline mask region.
heif_error heif_region_get_point_transformed(const heif_region *region, heif_item_id image_id, double *out_x, double *out_y)
Get the transformed values for a point region.
void heif_region_release(const heif_region *region)
Release a region.
enum heif_region_type heif_region_get_type(const heif_region *region)
Get the region type for a specified region.
heif_error heif_region_item_add_region_polyline(heif_region_item *region_item, const int32_t *pts_array, int nPoints, heif_region **out_region)
Add a polyline region to the region item.
heif_error heif_region_item_add_region_point(heif_region_item *region_item, int32_t x, int32_t y, heif_region **out_region)
Add a point region to the region item.
heif_error heif_region_get_rectangle(const heif_region *region, int32_t *out_x, int32_t *out_y, uint32_t *out_width, uint32_t *out_height)
Get the values for a rectangle region.
heif_error heif_region_get_polyline_points_transformed(const heif_region *region, heif_item_id image_id, double *out_pts_array)
Get the transformed points in a polyline region.
int heif_region_item_get_list_of_regions(const heif_region_item *region_item, heif_region **out_regions_array, int max_count)
Get the regions that are part of a region item.
struct heif_region_item heif_region_item
Definition: heif_regions.h:37
heif_error heif_region_get_polyline_points(const heif_region *region, int32_t *out_pts_array)
Get the points in a polyline region.
heif_error heif_region_get_polygon_points_transformed(const heif_region *region, heif_item_id image_id, double *out_pts_array)
Get the transformed points in a polygon region.
heif_error heif_region_item_add_region_referenced_mask(heif_region_item *region_item, int32_t x, int32_t y, uint32_t width, uint32_t height, heif_item_id mask_item_id, heif_region **out_region)
Add a referenced mask region to the region item.
heif_error heif_region_get_polygon_points(const heif_region *region, int32_t *out_pts_array)
Get the points in a polygon region.
void heif_region_item_get_reference_size(heif_region_item *, uint32_t *out_width, uint32_t *out_height)
Get the reference size for a region item.
heif_error heif_region_item_add_region_inline_mask_data(heif_region_item *region_item, int32_t x, int32_t y, uint32_t width, uint32_t height, const uint8_t *mask_data, size_t mask_data_len, heif_region **out_region)
Add an inline mask region to the region item.
heif_error heif_region_get_referenced_mask_ID(const heif_region *region, int32_t *out_x, int32_t *out_y, uint32_t *out_width, uint32_t *out_height, heif_item_id *out_mask_item_id)
Get a referenced item mask region.
int heif_image_handle_get_list_of_region_item_ids(const heif_image_handle *image_handle, heif_item_id *region_item_ids_array, int max_count)
Get the region item identifiers for the region items attached to an image.
heif_error heif_region_item_add_region_ellipse(heif_region_item *region_item, int32_t x, int32_t y, uint32_t radius_x, uint32_t radius_y, heif_region **out_region)
Add a ellipse region to the region item.
void heif_region_item_release(heif_region_item *region_item)
Release a region item.
heif_region_type
Region type.
Definition: heif_regions.h:46
@ heif_region_type_polygon
Polygon geometry.
Definition: heif_regions.h:79
@ heif_region_type_ellipse
Ellipse geometry.
Definition: heif_regions.h:70
@ heif_region_type_inline_mask
Inline mask.
Definition: heif_regions.h:115
@ heif_region_type_point
Point geometry.
Definition: heif_regions.h:52
@ heif_region_type_polyline
Polyline geometry.
Definition: heif_regions.h:123
@ heif_region_type_rectangle
Rectangle geometry.
Definition: heif_regions.h:61
@ heif_region_type_referenced_mask
Reference mask.
Definition: heif_regions.h:105
heif_error heif_region_item_add_region_polygon(heif_region_item *region_item, const int32_t *pts_array, int nPoints, heif_region **out_region)
Add a polygon region to the region item.
heif_error heif_context_get_region_item(const heif_context *context, heif_item_id region_item_id, heif_region_item **out)
Get the region item.
void heif_region_release_many(const heif_region *const *regions_array, int num_items)
Release a list of regions.
struct heif_region heif_region
Definition: heif_regions.h:126
int heif_image_handle_get_number_of_region_items(const heif_image_handle *image_handle)
Get the number of region items that are attached to an image.
heif_error heif_region_get_point(const heif_region *region, int32_t *out_x, int32_t *out_y)
Get the values for a point region.
heif_error heif_region_get_ellipse_transformed(const heif_region *region, heif_item_id image_id, double *out_x, double *out_y, double *out_radius_x, double *out_radius_y)
Get the transformed values for an ellipse region.
heif_error heif_region_get_inline_mask_data(const heif_region *region, int32_t *out_x, int32_t *out_y, uint32_t *out_width, uint32_t *out_height, uint8_t *out_mask_data)
Get data for an inline mask region.
heif_error heif_region_get_rectangle_transformed(const heif_region *region, heif_item_id image_id, double *out_x, double *out_y, double *out_width, double *out_height)
Get the transformed values for a rectangle region.
int heif_region_item_get_number_of_regions(const heif_region_item *region_item)
Get the number of regions within a region item.
heif_error heif_region_item_add_region_rectangle(heif_region_item *region_item, int32_t x, int32_t y, uint32_t width, uint32_t height, heif_region **out_region)
Add a rectangle region to the region item.
heif_error heif_region_get_mask_image(const heif_region *region, int32_t *out_x, int32_t *out_y, uint32_t *out_width, uint32_t *out_height, heif_image **out_mask_image)
Get a mask region image.
int heif_region_get_polygon_num_points(const heif_region *region)
Get the number of points in a polygon.
heif_item_id heif_region_item_get_id(heif_region_item *region_item)
Get the item identifier for a region item.
heif_error heif_region_get_ellipse(const heif_region *region, int32_t *out_x, int32_t *out_y, uint32_t *out_radius_x, uint32_t *out_radius_y)
Get the values for an ellipse region.
heif_error heif_image_handle_add_region_item(heif_image_handle *image_handle, uint32_t reference_width, uint32_t reference_height, heif_region_item **out_region_item)
Add a region item to an image.