[Bug 421] Implement a DIB engine
http://bugs.winehq.org/show_bug.cgi?id=421 --- Comment #373 from Ed Kolis <edkolis(a)gmail.com> 2010-05-26 10:17:09 --- (In reply to comment #372)
(In reply to comment #370)
Ok, I have take a look at your screen shots. The 1pixel error must come from center/radius calculation but I simply do : LONG a = (right - left) / 2.0; LONG b = (bottom - top) / 2.0; LONG cx = (right + left) / 2.0; LONG cy = (bottom + top) / 2.0;
So maybe, I have to use a cast somewhere because right, left, bottom and top are integer...
Pardon me if I'm wrong but wouldn't 2.0 be a float? That would cause two implicit casts which could cause the rounding issue.
Assuming type conversion and order of operations work similarly in C/C++ as it does in C#, then if right and left are ints, long a = (right - left) / 2.0; would be equivalent to long a = (long)((double)(right - left) / 2.0); So first you subtract left from right, then cast that to a double, divide by 2.0, and finally cast THAT to a long. There would be two implicit casts (int=>double and double=>long), but only the latter would potentially cause rounding error. Actually, it would not cause rounding error; it would cause truncation error, unless your LONG type's implicit cast operator from double is set up to call a rounding function, since IIRC the default behavior of downcasting like that is to truncate... perhaps the issue is actually the fact that you're not calling a rounding function? -- Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email Do not reply to this email, post in Bugzilla using the above URL to reply. ------- You are receiving this mail because: ------- You are watching all bug changes.
participants (1)
-
wine-bugs@winehq.org