wxWidgets/interface/wx/rawbmp.h
Vadim Zeitlin 3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00

214 lines
5.1 KiB
Objective-C

/////////////////////////////////////////////////////////////////////////////
// Name: rawbmp.h
// Purpose: interface of wxPixelData
// Author: wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/**
@class wxPixelData
A class template with ready to use implementations for getting
direct and efficient access to wxBitmap's internal data and
wxImage's internal data through a standard interface. It is
possible to extend this class (interface) to other types of
image content.
Implemented on Windows, GTK+ and OS X:
@li wxNativePixelData: Class to access to wxBitmap's internal data
without alpha channel (RGB).
@li wxAlphaPixelData: Class to access to wxBitmap's internal data with
alpha channel (RGBA).
Implemented everywhere:
@li wxImagePixelData: Class to access to wxImage's internal data with
alpha channel (RGBA).
Example:
@code
wxBitmap bmp;
wxNativePixelData data(bmp);
if ( !data )
{
// ... raw access to bitmap data unavailable, do something else ...
return;
}
if ( data.GetWidth() < 20 || data.GetHeight() < 20 )
{
// ... complain: the bitmap it too small ...
return;
}
wxNativePixelData::Iterator p(data);
// we draw a (10, 10)-(20, 20) rect manually using the given r, g, b
p.Offset(data, 10, 10);
for ( int y = 0; y < 10; ++y )
{
wxNativePixelData::Iterator rowStart = p;
for ( int x = 0; x < 10; ++x, ++p )
{
p.Red() = r;
p.Green() = g;
p.Blue() = b;
}
p = rowStart;
p.OffsetY(data, 1);
}
@endcode
@library{wxcore}
@category{gdi}
@see wxBitmap, wxImage
*/
template <class Image, class PixelFormat = wxPixelFormatFor<Image> >
class wxPixelData :
public wxPixelDataOut<Image>::template wxPixelDataIn<PixelFormat>
{
public:
/**
The type of the class we're working with.
*/
typedef Image ImageType;
/**
Create pixel data object representing the entire image.
*/
wxPixelData(Image& image);
/**
Create pixel data object representing the area of the image defined by
@a rect.
*/
wxPixelData(Image& i, const wxRect& rect);
/**
Create pixel data object representing the area of the image defined by
@a pt and @a sz.
*/
wxPixelData(Image& i, const wxPoint& pt, const wxSize& sz);
/**
Return @true of if we could get access to bitmap data successfully.
*/
operator bool() const;
/**
Return the iterator pointing to the origin of the image.
*/
Iterator GetPixels() const;
/**
Returns origin of the rectangular region this wxPixelData represents.
*/
wxPoint GetOrigin() const;
/**
Return width of the region this wxPixelData represents.
*/
int GetWidth() const;
/**
Return height of the region this wxPixelData represents.
*/
int GetHeight() const;
/**
Return the area which this wxPixelData represents in the image.
*/
wxSize GetSize() const;
/**
Return the distance between two rows.
*/
int GetRowStride() const;
/**
The iterator of class wxPixelData.
*/
class Iterator
{
public:
/**
Reset the iterator to point to (0, 0).
*/
void Reset(const PixelData& data);
/**
Initializes the iterator to point to the origin of the given pixel
data.
*/
Iterator(PixelData& data);
/**
Initializes the iterator to point to the origin of the given Bitmap.
*/
Iterator(wxBitmap& bmp, PixelData& data);
/**
Default constructor.
*/
Iterator();
/**
Return @true if this iterator is valid.
*/
bool IsOk() const;
/**
Advance the iterator to the next pixel, prefix version.
*/
Iterator& operator++();
/**
Advance the iterator to the next pixel, postfix (hence less
efficient -- don't use it unless you absolutely must) version.
*/
Iterator operator++(int);
/**
Move @a x pixels to the right and @a y down.
@note The rows won't wrap automatically.
*/
void Offset(const PixelData& data, int x, int y);
/**
Move @a x pixels to the right.
@note The rows won't wrap automatically.
*/
void OffsetX(const PixelData&data, int x);
/**
Move @a y rows to the bottom
*/
void OffsetY(const PixelData& data, int y);
/**
Go to the given position
*/
void MoveTo(const PixelData& data, int x, int y);
//@{
/**
Data Access: Access to individual colour components.
*/
ChannelType& Red();
ChannelType& Green();
ChannelType& Blue();
ChannelType& Alpha();
//@}
};
};