ROOT logo
ROOT » GRAF2D » GRAF » TImage

class TImage: public TNamed, public TAttImage


Image class

TImage is an abstract interface to image processing library. It allows for the reading and writing of images in different formats, several image manipulations (scaling, tiling, merging, etc.) and displaying in pads.

The concrete implementation of this class is done by the TASImage class. The methods are documented in that class.

 

Function Members (Methods)

public:
TImage(const TImage& img)
TImage(UInt_t, UInt_t)
virtual~TImage()
voidTObject::AbstractMethod(const char* method) const
virtual voidAppend(const TImage*, const char* = "+", const char* = "#00000000")
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidBeginPaint(Bool_t = kTRUE)
virtual voidBevel(Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0, const char* = "#ffdddddd", const char* = "#ff555555", UShort_t = 1, Bool_t = kFALSE)
virtual voidBlur(Double_t = 3, Double_t = 3)
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTNamed::Clear(Option_t* option = "")
virtual TObject*Clone(const char*) const
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual voidTNamed::Copy(TObject& named) const
virtual voidCopyArea(TImage*, Int_t, Int_t, UInt_t, UInt_t, Int_t = 0, Int_t = 0, Int_t = 3, TImage::EColorChan = kAllChan)
static TImage*Create()
virtual voidCrop(Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual voidCropPolygon(UInt_t, TPoint*)
virtual voidCropSpans(UInt_t, TPoint*, UInt_t*)
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidDrawBox(Int_t, Int_t, Int_t, Int_t, const char* = "#000000", UInt_t = 1, Int_t = 0)
virtual voidDrawCellArray(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, UInt_t*)
virtual voidDrawCircle(Int_t, Int_t, Int_t, const char* = "#000000", Int_t = 1)
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidDrawCubeBezier(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, const char* = "#000000", UInt_t = 1)
virtual voidDrawDashLine(UInt_t, UInt_t, UInt_t, UInt_t, UInt_t, const char*, const char* = "#000000", UInt_t = 1)
virtual voidDrawEllips(Int_t, Int_t, Int_t, Int_t, Int_t, const char* = "#000000", Int_t = 1)
virtual voidDrawEllips2(Int_t, Int_t, Int_t, Int_t, Int_t, const char* = "#000000", Int_t = 1)
virtual voidDrawFillArea(UInt_t, TPoint*, TImage*)
virtual voidDrawFillArea(UInt_t, TPoint*, const char* = "#000000", const char* = 0, UInt_t = 16, UInt_t = 16)
virtual voidDrawLine(UInt_t, UInt_t, UInt_t, UInt_t, const char* = "#000000", UInt_t = 1)
virtual voidDrawPolyLine(UInt_t, TPoint*, const char* = "#000000", UInt_t = 1, TImage::ECoordMode = kCoordModeOrigin)
virtual voidDrawRectangle(UInt_t, UInt_t, UInt_t, UInt_t, const char* = "#000000", UInt_t = 1)
virtual voidDrawSegments(UInt_t, Segment_t*, const char* = "#000000", UInt_t = 1)
virtual voidDrawStraightEllips(Int_t, Int_t, Int_t, Int_t, const char* = "#000000", Int_t = 1)
virtual voidDrawText(TText*, Int_t = 0, Int_t = 0)
virtual voidDrawText(Int_t = 0, Int_t = 0, const char* = "", Int_t = 12, const char* = 0, const char* = "fixed", TImage::EText3DType = TImage::kPlain, const char* = 0, Float_t = 0)
virtual voidTObject::Dump() constMENU
virtual voidTAttImage::EditorClosed()
virtual voidEndPaint()
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidTNamed::FillBuffer(char*& buffer)
virtual voidFillPolygon(UInt_t, TPoint*, TImage*)
virtual voidFillPolygon(UInt_t, TPoint*, const char* = "#000000", const char* = 0, UInt_t = 16, UInt_t = 16)
virtual voidFillRectangle(const char* = 0, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual voidFillSpans(UInt_t, TPoint*, UInt_t*, TImage*)
virtual voidFillSpans(UInt_t, TPoint*, UInt_t*, const char* = "#000000", const char* = 0, UInt_t = 16, UInt_t = 16)
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
virtual voidFlip(Int_t = 180)
virtual voidFloodFill(Int_t, Int_t, const char*, const char*, const char* = 0)
virtual voidFromGLBuffer(UChar_t*, UInt_t, UInt_t)
virtual voidFromPad(TVirtualPad*, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual voidFromWindow(Drawable_t, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual UInt_t*GetArgbArray()
virtual TArrayD*GetArray(UInt_t = 0, UInt_t = 0, TImagePalette* = gWebImagePalette)
Bool_tTAttImage::GetConstRatio() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual UInt_tGetHeight() const
virtual const char*TObject::GetIconName() const
virtual voidGetImageBuffer(char**, int*, TImage::EImageFileTypes = TImage::kPng)
UInt_tTAttImage::GetImageCompression() const
static TImage::EImageFileTypesGetImageFileTypeFromFilename(const char* opt)
TAttImage::EImageQualityTAttImage::GetImageQuality() const
virtual Pixmap_tGetMask()
virtual const char*TNamed::GetName() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
virtual const TImagePalette&TAttImage::GetPalette() const
virtual TArrayL*GetPixels(Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual Pixmap_tGetPixmap()
virtual UInt_t*GetRgbaArray()
virtual TImage*GetScaledImage() const
virtual UInt_t*GetScanline(UInt_t)
virtual const char*TNamed::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Double_t*GetVecArray()
virtual UInt_tGetWidth() const
virtual voidGradient(UInt_t = 0, const char* = "#FFFFFF #000000", const char* = 0, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual voidGray(Bool_t = kTRUE)
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
virtual voidHSV(UInt_t = 0, UInt_t = 360, Int_t = 0, Int_t = 0, Int_t = 0, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tIsEditable() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
virtual Bool_tIsGray() const
Bool_tTObject::IsOnHeap() const
Bool_tTAttImage::IsPaletteEnabled() const
virtual Bool_tTNamed::IsSortable() const
virtual Bool_tIsValid() const
Bool_tTObject::IsZombie() const
virtual voidTNamed::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual voidMerge(const TImage*, const char* = "alphablend", Int_t = 0, Int_t = 0)
virtual voidMirror(Bool_t = kTRUE)
virtual Bool_tTObject::Notify()
static TImage*Open(char** data)
static TImage*Open(const char* file, TImage::EImageFileTypes type = kUnknown)
static TImage*Open(const char* name, const TArrayD& imageData, UInt_t width, TImagePalette* palette = 0)
static TImage*Open(const char* name, const TVectorD& imageData, UInt_t width, TImagePalette* palette = 0)
static TImage*Open(const char* name, const Double_t* imageData, UInt_t width, UInt_t height, TImagePalette* palette)
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
TImage&operator+=(const TImage& i)
TImage&operator/=(const TImage& i)
TImage&operator=(const TImage& img)
virtual voidPad(const char* = "#FFFFFFFF", UInt_t = 0, UInt_t = 0, UInt_t = 0, UInt_t = 0)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidPaintImage(Drawable_t, Int_t, Int_t, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0, Option_t* = "")
virtual voidPolyPoint(UInt_t, TPoint*, const char* = "#000000", TImage::ECoordMode = kCoordModeOrigin)
virtual voidTObject::Pop()
virtual voidTNamed::Print(Option_t* option = "") const
virtual voidPutPixel(Int_t, Int_t, const char* = "#000000")
virtual Int_tTObject::Read(const char* name)
virtual voidReadImage(const char*, TImage::EImageFileTypes = TImage::kUnknown)
virtual voidTObject::RecursiveRemove(TObject* obj)
virtual voidTAttImage::ResetAttImage(Option_t* option = "")
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTAttImage::SaveImageAttributes(ostream& out, const char* name, TAttImage::EImageQuality qualdef = kImgDefault, UInt_t comprdef = 0, Bool_t constRatiodef = kTRUE)
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
virtual voidScale(UInt_t, UInt_t)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTAttImage::SetConstRatio(Bool_t constRatio = kTRUE)TOGGLE
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidSetEditable(Bool_t = kTRUE)
virtual voidSetImage(Pixmap_t, Pixmap_t = 0)
virtual voidSetImage(const TArrayD&, UInt_t, TImagePalette* = 0)
virtual voidSetImage(const TVectorD&, UInt_t, TImagePalette* = 0)
virtual voidSetImage(const Double_t*, UInt_t, UInt_t, TImagePalette* = 0)
virtual Bool_tSetImageBuffer(char**, TImage::EImageFileTypes = TImage::kPng)
virtual voidTAttImage::SetImageCompression(UInt_t lcompression)MENU
virtual voidTAttImage::SetImageQuality(TAttImage::EImageQuality lquality)
virtual voidTNamed::SetName(const char* name)MENU
virtual voidTNamed::SetNameTitle(const char* name, const char* title)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTAttImage::SetPalette(const TImagePalette* palette)
virtual voidTAttImage::SetPaletteEnabled(Bool_t on = kTRUE)
virtual voidTNamed::SetTitle(const char* title = "")MENU
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp, char* parent)
virtual Int_tTNamed::Sizeof() const
virtual voidSlice(UInt_t, UInt_t, UInt_t, UInt_t, UInt_t, UInt_t)
virtual voidTAttImage::StartPaletteEditor()MENU
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTile(UInt_t, UInt_t)
virtual voidUnZoom()
virtual voidTObject::UseCurrentStyle()
virtual Double_t*Vectorize(UInt_t = 256, UInt_t = 4, Int_t = 0)
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
virtual voidWriteImage(const char*, TImage::EImageFileTypes = TImage::kUnknown)
virtual voidZoom(UInt_t, UInt_t, UInt_t, UInt_t)
protected:
TImage()
TImage(const char* file)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
voidTObject::MakeZombie()

Data Members

public:
enum EImageFileTypes { kXpm
kZCompressedXpm
kGZCompressedXpm
kPng
kJpeg
kXcf
kPpm
kPnm
kBmp
kIco
kCur
kGif
kTiff
kXbm
kFits
kTga
kXml
kUnknown
kAnimGif
};
enum EText3DType { kPlain
kEmbossed
kSunken
kShadeAbove
kShadeBelow
kEmbossedThick
kSunkenThick
kOutlineAbove
kOutlineBelow
kOutlineFull
k3DTypes
};
enum ECharType { kUTF8
kChar
kUnicode
};
enum ETileType { kStretch
kTile
kStretchY
kStretchX
};
enum ECoordMode { kCoordModeOrigin
kCoordModePrevious
};
enum EColorChan { kRedChan
kGreenChan
kBlueChan
kAlphaChan
kAllChan
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
enum TAttImage::EImageQuality { kImgDefault
kImgPoor
kImgFast
kImgGood
kImgBest
};
protected:
Bool_tTAttImage::fConstRatiokeep aspect ratio of image on the screen
UInt_tTAttImage::fImageCompressioncompression [0 .. 100] 0: no compression
TAttImage::EImageQualityTAttImage::fImageQuality*OPTION={GetMethod="GetImageQuality";SetMethod="SetImageQuality";Items=(kImgDefault="Default",kImgPoor="Poor",kImgFast="Fast",kImgGood="Good",kImgBest="Best")}*
TStringTNamed::fNameobject identifier
TImagePaletteTAttImage::fPalettecolor palette for value -> color conversion
TPaletteEditor*TAttImage::fPaletteEditor! GUI to edit the color palette
Bool_tTAttImage::fPaletteEnabled! kTRUE - palette is drawn on the image
TStringTNamed::fTitleobject title

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

TImage * Create()
 Create an image.
 Use ReadImage() or SetImage() to initialize the image.
TImage * Open(const char* file, TImage::EImageFileTypes type = kUnknown)
 Open a specified image file.
TImage * Open(const char* name, const Double_t* imageData, UInt_t width, UInt_t height, TImagePalette* palette)
 Open an image with the specified data in a Double_t array.
TImage * Open(const char *name, const TArrayD &imageData, UInt_t width, TImagePalette *palette)
 Open an image with the specified data in a TArrayD.
TImage * Open(const char *name, const TVectorD &imageData, UInt_t width, TImagePalette *palette)
 Open an image with the specified data in a TVectorD.
TImage * Open(char** data)
 Create image from XPM data array.
TImage(const char *file)
{ }
TImage()
{ }
TImage(const TImage &img)
{ }
TImage & operator=(const TImage& img)
{ TNamed::operator=(img); TAttImage::operator=(img); return *this; }
TImage(UInt_t , UInt_t )
{ }
virtual ~TImage()
{ }
TObject * Clone(const char* ) const
 Cloning
{ return 0; }
void ReadImage(const char* , TImage::EImageFileTypes = TImage::kUnknown)
 Input / output
{}
void WriteImage(const char* , TImage::EImageFileTypes = TImage::kUnknown)
{}
void SetImage(const Double_t* , UInt_t , UInt_t , TImagePalette* = 0)
{}
void SetImage(const TArrayD & /*imageData*/, UInt_t /*width*/, TImagePalette * /*palette*/ = 0)
{}
void SetImage(const TVectorD & /*imageData*/, UInt_t /*width*/, TImagePalette * /*palette*/ = 0)
{}
void SetImage(Pixmap_t , Pixmap_t = 0)
{}
void FromPad(TVirtualPad* , Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
 Create an image from the given pad. (See TASImage::FromPad)
{}
void UnZoom()
 Restore the image original size. (See TASImage::UnZoom)
{}
void Zoom(UInt_t , UInt_t , UInt_t , UInt_t )
 Zoom the image. (See TASImage::Zoom)
{}
void Flip(Int_t = 180)
 Flip the image by a multiple of 90 degrees. (See TASImage::Flip)
{}
void Gray(Bool_t = kTRUE)
 Converts image to Gray. (See TASImage::Gray)
{}
Bool_t IsGray() const
{ return kFALSE; }
void Mirror(Bool_t = kTRUE)
 Mirror the image. (See TASImage::Mirror)
{}
void Scale(UInt_t , UInt_t )
 Scale the image. (See TASImage::Scale)
{}
void Slice(UInt_t , UInt_t , UInt_t , UInt_t , UInt_t , UInt_t )
 Slice the image. (See TASImage::Slice)
{}
void Crop(Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
 Tile the image. (See TASImage::Tile)
 Crop the image. (See TASImage::Crop)
{}
void Pad(const char* = "#FFFFFFFF", UInt_t = 0, UInt_t = 0, UInt_t = 0, UInt_t = 0)
 Enlarge image. (See TASImage::Pad)
{ }
Double_t * Vectorize(UInt_t = 256, UInt_t = 4, Int_t = 0)
 Gaussian blurr. (See TASImage::Blur)
 Reduces colordepth of an image. (See TASImage::Vectorize)
{ return 0; }
void HSV(UInt_t = 0, UInt_t = 360, Int_t = 0, Int_t = 0, Int_t = 0, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
 (See TASImage::HSV)
{}
void Merge(const TImage* , const char* = "alphablend", Int_t = 0, Int_t = 0)
 Render multipoint gradient inside a rectangle. (See TASImage::Gradient)
 Merge two images. (See TASImage::Merge)
{}
void Append(const TImage* , const char* = "+", const char* = "#00000000")
 Append image. (See TASImage::Append)
{}
void Bevel(Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0, const char* = "#ffdddddd", const char* = "#ff555555", UShort_t = 1, Bool_t = kFALSE)
 Bevel effect. (See TASImage::Bevel)
{}
void EndPaint()
{}
void DrawLine(UInt_t , UInt_t , UInt_t , UInt_t , const char* = "#000000", UInt_t = 1)
{}
void DrawBox(Int_t , Int_t , Int_t , Int_t , const char* = "#000000", UInt_t = 1, Int_t = 0)
{}
void FillRectangle(const char* = 0, Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
{}
void PutPixel(Int_t , Int_t , const char* = "#000000")
{}
void PolyPoint(UInt_t , TPoint* , const char* = "#000000", TImage::ECoordMode = kCoordModeOrigin)
{}
void DrawText(Int_t = 0, Int_t = 0, const char* = "", Int_t = 12, const char* = 0, const char* = "fixed", TImage::EText3DType = TImage::kPlain, const char* = 0, Float_t = 0)
{ }
void FillPolygon(UInt_t , TPoint* , const char* = "#000000", const char* = 0, UInt_t = 16, UInt_t = 16)
{}
void CropPolygon(UInt_t , TPoint* )
{}
void DrawFillArea(UInt_t , TPoint* , const char* = "#000000", const char* = 0, UInt_t = 16, UInt_t = 16)
{}
void FillSpans(UInt_t , TPoint* , UInt_t* , const char* = "#000000", const char* = 0, UInt_t = 16, UInt_t = 16)
{}
void CropSpans(UInt_t , TPoint* , UInt_t* )
{}
void CopyArea(TImage* , Int_t , Int_t , UInt_t , UInt_t , Int_t = 0, Int_t = 0, Int_t = 3, TImage::EColorChan = kAllChan)
{}
void FloodFill(Int_t , Int_t , const char* , const char* , const char* = 0)
{}
void DrawCubeBezier(Int_t , Int_t , Int_t , Int_t , Int_t , Int_t , const char* = "#000000", UInt_t = 1)
{}
void DrawStraightEllips(Int_t , Int_t , Int_t , Int_t , const char* = "#000000", Int_t = 1)
{}
void DrawCircle(Int_t , Int_t , Int_t , const char* = "#000000", Int_t = 1)
{}
void DrawEllips(Int_t , Int_t , Int_t , Int_t , Int_t , const char* = "#000000", Int_t = 1)
{}
void DrawEllips2(Int_t , Int_t , Int_t , Int_t , Int_t , const char* = "#000000", Int_t = 1)
{}
void SetEditable(Bool_t = kTRUE)
{}
Bool_t IsEditable() const
{ return kFALSE; }
UInt_t GetWidth() const
{ return 0; }
UInt_t GetHeight() const
{ return 0; }
Bool_t IsValid() const
{ return kTRUE; }
TImage * GetScaledImage() const
{ return 0; }
TArrayL * GetPixels(Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
{ return 0; }
TArrayD * GetArray(UInt_t = 0, UInt_t = 0, TImagePalette* = gWebImagePalette)
{ return 0; }
Pixmap_t GetPixmap()
{ return 0; }
Pixmap_t GetMask()
{ return 0; }
UInt_t * GetArgbArray()
{ return 0; }
UInt_t * GetRgbaArray()
{ return 0; }
Double_t * GetVecArray()
{ return 0; }
UInt_t * GetScanline(UInt_t )
{ return 0; }
void GetImageBuffer(char** , int* , TImage::EImageFileTypes = TImage::kPng)
{}
Bool_t SetImageBuffer(char** , TImage::EImageFileTypes = TImage::kPng)
{ return kFALSE; }
void PaintImage(Drawable_t , Int_t , Int_t , Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0, Option_t* = "")
{ }
void FromWindow(Drawable_t , Int_t = 0, Int_t = 0, UInt_t = 0, UInt_t = 0)
{}
void FromGLBuffer(UChar_t* , UInt_t , UInt_t )
{}
EImageFileTypes GetImageFileTypeFromFilename(const char* opt)
TImage & operator+=(const TImage& i)
{ Append(&i, "+"); return *this; }
TImage & operator/=(const TImage& i)
{ Append(&i, "/"); return *this; }