LMMS
Loading...
Searching...
No Matches
juce_Image.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29class ImageType;
30class ImagePixelData;
31
32
33//==============================================================================
58{
59public:
60 //==============================================================================
70
71 //==============================================================================
74
91 Image (PixelFormat format, int imageWidth, int imageHeight, bool clearImage);
92
108 Image (PixelFormat format, int imageWidth, int imageHeight, bool clearImage, const ImageType& type);
109
117
124 Image& operator= (const Image&);
125
127 Image (Image&&) noexcept;
128
130 Image& operator= (Image&&) noexcept;
131
133 ~Image();
134
136 bool operator== (const Image& other) const noexcept { return image == other.image; }
137
139 bool operator!= (const Image& other) const noexcept { return image != other.image; }
140
147 inline bool isValid() const noexcept { return image != nullptr; }
148
155 inline bool isNull() const noexcept { return image == nullptr; }
156
157 //==============================================================================
159 int getWidth() const noexcept;
160
162 int getHeight() const noexcept;
163
167 Rectangle<int> getBounds() const noexcept;
168
170 PixelFormat getFormat() const noexcept;
171
173 bool isARGB() const noexcept;
174
176 bool isRGB() const noexcept;
177
179 bool isSingleChannel() const noexcept;
180
182 bool hasAlphaChannel() const noexcept;
183
184 //==============================================================================
190 void clear (const Rectangle<int>& area, Colour colourToClearTo = Colour (0x00000000));
191
199 Image rescaled (int newWidth, int newHeight,
200 Graphics::ResamplingQuality quality = Graphics::mediumResamplingQuality) const;
201
207 Image createCopy() const;
208
216 Image convertedToFormat (PixelFormat newFormat) const;
217
229 void duplicateIfShared();
230
242 Image getClippedImage (const Rectangle<int>& area) const;
243
244 //==============================================================================
252 Colour getPixelAt (int x, int y) const;
253
264 void setPixelAt (int x, int y, Colour colour);
265
276 void multiplyAlphaAt (int x, int y, float multiplier);
277
286 void multiplyAllAlphas (float amountToMultiplyBy);
287
290 void desaturate();
291
292 //==============================================================================
310 {
311 public:
318
319 BitmapData (Image& image, int x, int y, int w, int h, ReadWriteMode mode);
320 BitmapData (const Image& image, int x, int y, int w, int h);
321 BitmapData (const Image& image, ReadWriteMode mode);
322 ~BitmapData();
323
328 inline uint8* getLinePointer (int y) const noexcept { return data + (size_t) y * (size_t) lineStride; }
329
334 inline uint8* getPixelPointer (int x, int y) const noexcept { return data + (size_t) y * (size_t) lineStride + (size_t) x * (size_t) pixelStride; }
335
340 Colour getPixelColour (int x, int y) const noexcept;
341
346 void setPixelColour (int x, int y, Colour colour) const noexcept;
347
350
352 size_t size;
357
358 //==============================================================================
361 {
362 protected:
364 public:
365 virtual ~BitmapDataReleaser() = default;
366 };
367
368 std::unique_ptr<BitmapDataReleaser> dataReleaser;
369
370 private:
372 };
373
374 //==============================================================================
376 void moveImageSection (int destX, int destY,
377 int sourceX, int sourceY,
378 int width, int height);
379
387 void createSolidAreaMask (RectangleList<int>& result, float alphaThreshold) const;
388
389 //==============================================================================
396
397 //==============================================================================
401 std::unique_ptr<LowLevelGraphicsContext> createLowLevelContext() const;
402
409
410 //==============================================================================
413
416
417 //==============================================================================
418 #if JUCE_ALLOW_STATIC_NULL_VARIABLES && ! defined (DOXYGEN)
419 /* A null Image object that can be used when you need to return an invalid image. */
420 [[deprecated ("If you need a default-constructed var, just use Image() or {}.")]]
421 static const Image null;
422 #endif
423
424private:
425 //==============================================================================
427
429};
430
431
432//==============================================================================
446{
447public:
449 ~ImagePixelData() override;
450
452
454 virtual std::unique_ptr<LowLevelGraphicsContext> createLowLevelContext() = 0;
456 virtual Ptr clone() = 0;
458 virtual std::unique_ptr<ImageType> createType() const = 0;
464 virtual int getSharedCount() const noexcept;
465
466
468 const Image::PixelFormat pixelFormat;
470
475
476 //==============================================================================
478 struct Listener
479 {
480 virtual ~Listener() = default;
481
482 virtual void imageDataChanged (ImagePixelData*) = 0;
484 };
485
487
489
490private:
492};
493
494//==============================================================================
504{
505public:
506 ImageType();
507 virtual ~ImageType();
508
510 virtual ImagePixelData::Ptr create (Image::PixelFormat, int width, int height, bool shouldClearImage) const = 0;
511
513 virtual int getTypeID() const = 0;
514
519 virtual Image convert (const Image& source) const;
520};
521
522//==============================================================================
530{
531public:
533 ~SoftwareImageType() override;
534
535 ImagePixelData::Ptr create (Image::PixelFormat, int width, int height, bool clearImage) const override;
536 int getTypeID() const override;
537};
538
539//==============================================================================
548{
549public:
551 ~NativeImageType() override;
552
553 ImagePixelData::Ptr create (Image::PixelFormat, int width, int height, bool clearImage) const override;
554 int getTypeID() const override;
555};
556
557} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
#define final
Definition DistrhoDefines.h:74
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Colour.h:38
Definition juce_GraphicsContext.h:45
Definition juce_Image.h:310
int pixelStride
Definition juce_Image.h:355
int height
Definition juce_Image.h:356
ReadWriteMode
Definition juce_Image.h:313
@ writeOnly
Definition juce_Image.h:315
@ readOnly
Definition juce_Image.h:314
@ readWrite
Definition juce_Image.h:316
uint8 * getPixelPointer(int x, int y) const noexcept
Definition juce_Image.h:334
int lineStride
Definition juce_Image.h:354
uint8 * getLinePointer(int y) const noexcept
Definition juce_Image.h:328
std::unique_ptr< BitmapDataReleaser > dataReleaser
Definition juce_Image.h:368
BitmapData(Image &image, int x, int y, int w, int h, ReadWriteMode mode)
Definition juce_Image.cpp:380
int width
Definition juce_Image.h:356
PixelFormat pixelFormat
Definition juce_Image.h:353
uint8 * data
Definition juce_Image.h:351
Rectangle< int > getBounds() const noexcept
Definition juce_Image.h:349
size_t size
Definition juce_Image.h:352
Definition juce_Image.h:58
std::unique_ptr< LowLevelGraphicsContext > createLowLevelContext() const
Definition juce_Image.cpp:280
Image() noexcept
Definition juce_Image.cpp:225
void moveImageSection(int destX, int destY, int sourceX, int sourceY, int width, int height)
Definition juce_Image.cpp:617
ReferenceCountedObjectPtr< ImagePixelData > image
Definition juce_Image.h:426
void createSolidAreaMask(RectangleList< int > &result, float alphaThreshold) const
Definition juce_Image.cpp:567
ImagePixelData * getPixelData() const noexcept
Definition juce_Image.h:412
bool isNull() const noexcept
Definition juce_Image.h:155
bool isValid() const noexcept
Definition juce_Image.h:147
NamedValueSet * getProperties() const
Definition juce_Image.cpp:374
PixelFormat
Definition juce_Image.h:64
@ SingleChannel
Definition juce_Image.h:68
@ UnknownFormat
Definition juce_Image.h:65
@ ARGB
Definition juce_Image.h:67
@ RGB
Definition juce_Image.h:66
int getReferenceCount() const noexcept
Definition juce_Image.cpp:270
Definition juce_Image.h:446
ListenerList< Listener > listeners
Definition juce_Image.h:486
virtual std::unique_ptr< LowLevelGraphicsContext > createLowLevelContext()=0
const int width
Definition juce_Image.h:469
NamedValueSet userData
Definition juce_Image.h:474
virtual void initialiseBitmapData(Image::BitmapData &, int x, int y, Image::BitmapData::ReadWriteMode)=0
ImagePixelData(Image::PixelFormat, int width, int height)
Definition juce_Image.cpp:29
virtual std::unique_ptr< ImageType > createType() const =0
void sendDataChangeMessage()
Definition juce_Image.cpp:41
ReferenceCountedObjectPtr< ImagePixelData > Ptr
Definition juce_Image.h:451
virtual Ptr clone()=0
virtual int getSharedCount() const noexcept
Definition juce_Image.cpp:46
const int height
Definition juce_Image.h:469
const Image::PixelFormat pixelFormat
Definition juce_Image.h:468
Definition juce_Image.h:504
virtual ImagePixelData::Ptr create(Image::PixelFormat, int width, int height, bool shouldClearImage) const =0
ImageType()
Definition juce_Image.cpp:52
virtual Image convert(const Image &source) const
Definition juce_Image.cpp:55
virtual int getTypeID() const =0
Definition juce_ListenerList.h:70
Definition juce_NamedValueSet.h:35
ImagePixelData::Ptr create(Image::PixelFormat, int width, int height, bool clearImage) const override
NativeImageType()
Definition juce_Image.cpp:141
int getTypeID() const override
Definition juce_Image.cpp:144
Definition juce_Rectangle.h:67
Definition juce_RectangleList.h:43
Definition juce_ReferenceCountedObject.h:247
ImagePixelData::Ptr create(Image::PixelFormat, int width, int height, bool clearImage) const override
Definition juce_Image.cpp:130
int getTypeID() const override
Definition juce_Image.cpp:135
SoftwareImageType()
Definition juce_Image.cpp:127
UINT_D64 w
Definition inflate.c:942
int y
Definition inflate.c:1588
unsigned x[BMAX+1]
Definition inflate.c:1586
static int int height
Definition pugl.h:1594
static int width
Definition pugl.h:1593
int quality
Definition jpeglib.h:919
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition juce_LeakedObjectDetector.h:138
#define JUCE_DECLARE_NON_COPYABLE(className)
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
unsigned char uint8
Definition juce_MathsFunctions.h:37
png_structrp int mode
Definition png.h:1139
Definition juce_Image.h:479
virtual void imageDataChanged(ImagePixelData *)=0
virtual void imageDataBeingDeleted(ImagePixelData *)=0
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
int result
Definition process.c:1455
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263
#define const
Definition zconf.h:137