void Image::Serialize(Stream& s) { int version = 0; s / version; Size sz = GetSize(); Point p = GetHotSpot(); Size dots = GetDots(); s % sz % p % dots; int64 len = (int64)sz.cx * (int64)sz.cy * (int64)sizeof(RGBA); if(s.IsLoading()) if(len) { ImageBuffer b(sz); int64 offset = 0; const byte* ptr = (byte*)~b; while(len>INT_MAX) { if(!s.GetAll((void*)(ptr+offset), INT_MAX)) { s.SetError(); return; } len -= INT_MAX; offset += INT_MAX; } if(!s.GetAll((void*)(ptr+offset), len)) s.SetError(); b.SetDots(dots); b.SetHotSpot(p); *this = b; } else Clear(); else { int64 offset = 0; const byte* ptr = (byte*)~*this; while(len>INT_MAX) { s.Put(ptr+offset, INT_MAX); len -= INT_MAX; offset += INT_MAX; } s.Put(ptr+offset, len); } }
Report message to a moderator