Floating point overflow
Using a large number of floating-point (datatypes (float)? and/or (double)?) in a single statement can cause problems wherein the result will be unpredictable. Code will continue to run, but all floating-point calculations after the first occurrence of the bug will be unreliable.
Generally this will not occur but when some floating-point intensive functions are used (such as iget, rgb2lab, lab2rgb, rgb2hsl and hsl2rgb), problems may appear more quickly. The order in which these functions appear in the statement heavily influences this bug.
As a rule of thumb, always put the functions before the other parts. As such...
double value = iget(100., 100., 0, 0, 3) * 0.5; // This works
Instead of the following...
double value = 0.5 * iget(100., 100., 0, 0, 3); // This DOES NOT work
Image width of 1 pixel
If the image width is only 1 pixel an error occurs:
unexpected NULL outData
Signed / Unsigned operands
No difference between signed and unsigned operands of /,%,>>
A:x+y?a:Info("0x8000000u/2u %x",0x8000000u/2u) // unsigned: 0x40000000 A:x+y?a:Info("0x8000000u%5u = %i",0x8000000u%5u) // unsigned: 3 A:x+y?a:Info("-2>>1 = %i",-2>>1) // signed: -1
Click Drag
setClickDrag(1): (right mouse key)
Preview flickering when pressing right mouse key and writing text.
Pressing Alt-Key once slows down update frequency.
%ffp ctl(0): statictext ctl(CTL_PREVIEW):preview (mousemove) OnFilterStart: { setClickDrag(1); return false; } OnCtl(n): { if (n==CTL_PREVIEW&&e==FME_MOUSEMOVE) setCtlTextv(0,"%i",getPreviewCoordX()); return false; }
requestRect()
Does not work with selections or zooms other than 1 (100%)
Variables not updated
In the OnFilterStart: handler system variables like scaleFactor, X, Y, x_start, ... are not yet updated after changes and have still old invalid values.
iget
(iget) correctly handles the 16-bit case when reading from the input or output image buffers, but it always accesses the 4 t-bufs as though they were 8-bit.