--- parser3/src/classes/image.C 2004/03/01 13:22:25 1.108 +++ parser3/src/classes/image.C 2005/07/28 11:23:01 1.112 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_IMAGE_C="$Date: 2004/03/01 13:22:25 $"; +static const char * const IDENT_IMAGE_C="$Date: 2005/07/28 11:23:01 $"; /* jpegsize: gets the width and height (in pixels) of a jpeg file @@ -33,7 +33,7 @@ static const char * const IDENT_IMAGE_C= class MImage: public Methoded { public: // VStateless_class - Value* create_new_value(Pool&) { return new VImage(); } + Value* create_new_value(Pool&, HashStringValue&) { return new VImage(); } public: MImage(); @@ -402,7 +402,7 @@ static Value* parse_IFD_entry_formatted_ size_t length=components_count; // Data format is "YYYY:MM:DD HH:MM:SS"+0x00, total 20bytes if(length==JPEG_EXIF_DATE_CHARS - && isdigit(cstr[0]) + && isdigit((unsigned char)cstr[0]) && cstr[length-1]==0) { char cstr_writable[JPEG_EXIF_DATE_CHARS]; strcpy(cstr_writable, cstr); @@ -876,6 +876,10 @@ static void _bar(Request& r, MethodParam #ifndef DOXYGEN static void add_point(Table::element_type row, gdImage::Point **p) { + if(row->count()!=2) + throw Exception(0, + 0, + "coordinates table must contain two columns: x and y values"); (**p).x=row->get(0)->as_int(); (**p).y=row->get(1)->as_int(); (*p)++; @@ -1136,10 +1140,14 @@ static void _copy(Request& r, MethodPara static void _pixel(Request& r, MethodParams& params) { gdImage& image=GET_SELF(r, VImage).image(); - image.Fill( - params.as_int(0, "x must be int", r), - params.as_int(1, "y must be int", r), - image.Color(params.as_int(2, "color must be int", r))); + int x=params.as_int(0, "x must be int", r); + int y=params.as_int(1, "y must be int", r); + + if(params.count()>2) { + image.SetPixel(x, y, + image.Color(params.as_int(2, "color must be int", r))); + } else + r.write_no_lang(*new VInt(image.DecodeColor(image.GetPixel(x, y)))); } @@ -1210,5 +1218,5 @@ MImage::MImage(): Methoded("image") { add_native_method("copy", Method::CT_DYNAMIC, _copy, 1+2+2+2, (1+2+2+2)+2+1); // ^image.pixel(x;y)[(color)] - add_native_method("copy", Method::CT_DYNAMIC, _pixel, 2, 3); + add_native_method("pixel", Method::CT_DYNAMIC, _pixel, 2, 3); }