Цитата:
Сообщение от zwitter
каша полнейшая. не торт совершенно
проповедники ООП плачут крокодильими слезами.
нафига все было сбивать в 1 класс ?
в том же VCL есть три разных понятия - TBitmap, TPicture, TImage
вынесите все функции нафиг из класса, ООП тут нет.
|
как по мне наоборот, в данном случае есть только один объект - изображение и делить тут нечего, и расскажите плз:
1. смысл разделения на TBitmap, TPicture, TImage( особенно для того кто пользуется ими - так удобнее? )
2. как вырезать из картинки в VCL подкартинку( ее произвольную часть ) , как отразить изображение, повернуть, размыть и т.д., т.е. те действия которые я добавил в класс
насчет методов - да, есть смысл убрать операции которые возвращают новые изображения, и оставить только ...Self, ес-но переименовав, так и сделаю - будет компактнее и выглядеть опрятнее
Lester добавил 25.01.2009 в 04:29
сейчас выглядит как:
PHP код:
/**********************************************************************************************/
class LTAPI Bitmap
{
public://////////////////////////////////////////////////////////////////////////
// TODO: AUTO register/unregister in repository
Bitmap( void );
Bitmap( const Bitmap& bmp );
Bitmap( const Bitmap& bmp, const Rect& rect );
Bitmap( size_t width, size_t height );
Bitmap( const String& path, BitmapType type = AUTO );
Bitmap( void* data, size_t size, BitmapType type = AUTO );
Bitmap( const char* const* xpm );
virtual ~Bitmap( void );
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Information
size_t GetWidth( void ) const;
size_t GetHeight( void ) const;
bool IsOk( void ) const;
//////////////////////////////////////////////////////////////////////////
// Load and save
bool LoadData( void* data, size_t size, BitmapType type = AUTO );
bool LoadFile( const String& path, BitmapType type = AUTO );
bool SaveData( void*& data, size_t& size, BitmapType type = PNG ) const;
bool SaveFile( const String& path, BitmapType type = AUTO ) const;
//////////////////////////////////////////////////////////////////////////
// Filters
Bitmap& Blur( size_t radius );
Bitmap& ColourReduction( size_t colours = 236 );
Bitmap& ConvertToGreyscale( void );
Bitmap& ConvertToMono( void );
Bitmap GetSubBitmap( const Rect& rect ) const;
Bitmap& MirrorHorizontal( void );
Bitmap& MirrorVertical( void );
Bitmap& Scale(
size_t width,
size_t height,
bool highQuality = true );
Bitmap& Resize(
size_t width,
size_t height,
Colour cl = BLACK );
Bitmap& Rotate(
size_t angle,
size_t x,
size_t y,
bool highQuality = true );
Bitmap& Rotate90( bool clockwise = true );
Bitmap& RotateHue( size_t angle );
//////////////////////////////////////////////////////////////////////////
// Transparency and mask
void CreateMaskFromBitmap( const Bitmap& mask, Colour maskColour );
void CreateMaskFromColour( Colour mask );
void DeleteMask( void );
bool HasAlpha( void ) const;
bool HasMask( void ) const;
bool IsTransparent(
size_t x,
size_t y,
uchar threshold = 128 ) const;
void ConvertAlphaToMask( uchar threshold = 128 );
void InitAlpha( void );
Colour GetMaskColour( void ) const;
//////////////////////////////////////////////////////////////////////////
// Pixels
uchar GetAlpha( size_t x, size_t y ) const;
Colour GetColour( size_t x, size_t y ) const;
void Replace( Colour c1, Colour c2 );
void SetAlpha(
size_t x,
size_t y,
uchar value );
void SetColour(
size_t x,
size_t y,
Colour value );
const uchar* GetData( void ) const;
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Operators
Bitmap& operator=( const Bitmap& value );
bool operator==( const Bitmap& value ) const;
protected://////////////////////////////////////////////////////////////////////////
BitmapData* mpData;
};
Lester добавил 25.01.2009 в 13:10
кстати разделение таки будет, но разумное - будет BitmapEx( туда будут вынесены ColourReduction
, RotateHue и Rotate ), в котором будут реализованы изменения яркости/контрастности, дополнительные фильтры( скопирую алгоритмы из gimp ) и т.п., то что надо редко, но может пригодится, например для создания анимаций
Lester добавил 25.01.2009 в 13:41
ну и забыл добавить - пути в именах файлов для загрузки могут быть относительными. По умолчанию от папки программы, но базовый путь может быть выставлен через SetResourcesPath:
PHP код:
// Show splash
SetResourcesPath( "resources" ); // так-же может быть относительным, ес-но от папки программы
Splash splash( Bitmap( "splash.png" ) );
...
Bitmap bmp( "sample/sample.gif" ); // будет читать из resources/sample/sample.gif
Lester добавил 25.01.2009 в 13:56
добавил еще операторы "+" и "+=", может пригодится, например есть набор иконок для объектов( БД, таблица и т.п. ), надо еще для тех же объектов иконки - добавить/удалить/флушить/заблокировать/разблокировать и т.п., чтоб не иметь зоопарк иконок в папке ресурсов создаем только иконки самих объектов + отдельные( с маской ) иконки - добавить/удалить/флушить/заблокировать/разблокировать, а потом накладываем одни на другие, например так:
PHP код:
Bitmap dbIcon( "db.png" );
Bitmap tableIcon( "table.png" );
...
Bitmap addIcon( "add.png" );
Bitmap deleteIcon( "delete.png" );
...
Bitmap addDbIcon = dbIcon + addIcon;
Bitmap addTableIcon = tableIcon + addIcon;
...