annotate foosdk/sdk/foobar2000/SDK/imageLoaderLite.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "commonObjects.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 namespace Gdiplus {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 class Image;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 typedef Gdiplus::Image * nativeImage_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 typedef void * nativeImage_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 struct imageInfo_t {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 uint32_t width, height, bitDepth;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 bool haveAlpha;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 const char * formatName; // MAY BE NULL IF UNKNOWN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 const char * mime; // MAY BE NULL IF UNKNOWN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 //! \since 1.6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 //! Interface to common image loader routines that turn a bytestream into a image that can be drawn in a window. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 //! Windows: Using imageLoaderLite methods initializes gdiplus if necessary, leaving gdiplus initialized for the rest of app lifetime. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 //! If your component supports running on foobar2000 older than 1.6, use tryGet() to gracefully fall back to your own image loader: \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 //! auto api = fb2k::imageLoaderLite::tryGet(); if (api.is_valid()) { do stuff with api; } else { use fallbacks; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 class imageLoaderLite : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 FB2K_MAKE_SERVICE_COREAPI(imageLoaderLite);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 //! Throws excpetions on failure, returns valid image otherwise.\n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 //! Caller takes ownership of the returned object. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 //! @param outInfo Optional struct to receive information about the loaded image.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 virtual nativeImage_t load(const void * data, size_t bytes, imageInfo_t * outInfo = nullptr, abort_callback & aborter = fb2k::noAbort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 //! Parses the image data just enough to hand over basic info about what's inside. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 //! Much faster than load(). \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 //! Throws exceptions on failure. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 //! Supports all formats recognized by load().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 virtual imageInfo_t getInfo(const void * data, size_t bytes, abort_callback & aborter = fb2k::noAbort) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! Helper - made virtual so it can be possibly specialized in the future
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 virtual nativeImage_t load(album_art_data_ptr data, imageInfo_t * outInfo = nullptr, abort_callback & aborter = fb2k::noAbort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 return load(data->get_ptr(), data->get_size(), outInfo, aborter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 //! Helper - made virtual so it can be possibly specialized in the future
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 virtual imageInfo_t getInfo(album_art_data_ptr data, abort_callback & aborter = fb2k::noAbort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 return getInfo(data->get_ptr(), data->get_size(), aborter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 #define FB2K_GETOPENFILENAME_PICTUREFILES "Picture files|*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.webp"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 #define FB2K_GETOPENFILENAME_PICTUREFILES_ALL FB2K_GETOPENFILENAME_PICTUREFILES "|All files|*.*"