2015-10-13 Fred Kiefer <FredKiefer@gmx.de>

* Source/NSBitmapImageRep.m: Correct bug in fast path for image
        premultiply/unpremultiply.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@39062 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fredkiefer 2015-10-13 22:04:35 +00:00
parent b182cbfc48
commit d9b3936fb5
2 changed files with 34 additions and 29 deletions

View file

@ -1,3 +1,8 @@
2015-10-13 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSBitmapImageRep.m: Correct bug in fast path for image
premultiply/unpremultiply.
2015-10-10 Gregory Casamento <greg.casamento@gmail.com> 2015-10-10 Gregory Casamento <greg.casamento@gmail.com>
* Headers/AppKit/NSAnimationContext.h * Headers/AppKit/NSAnimationContext.h

View file

@ -2088,29 +2088,30 @@ _set_bit_value(unsigned char *base, long msb_off, int bit_width,
for (y = 0; y < _pixelsHigh; y++) for (y = 0; y < _pixelsHigh; y++)
{ {
line_offset = _bytesPerRow * y + _bitsPerPixel / 8; line_offset = _bytesPerRow * y;
for (x = 0; x < _pixelsWide; x++) for (x = 0; x < _pixelsWide; x++)
{ {
offset = x + line_offset; offset = (_bitsPerPixel * x) / 8 + line_offset;
a = _imagePlanes[0][offset + ai]; a = _imagePlanes[0][offset + ai];
if ((a != 0) && (a != 255)) if (a != 255)
{ {
for (i = start; i < end; i++) if (a == 0)
{ {
NSUInteger v = _imagePlanes[0][offset + i]; for (i = start; i < end; i++)
NSUInteger c;
c = (v * 255) / a;
if (c >= 255)
{ {
v = 255; _imagePlanes[0][offset + i] = 0;
} }
else }
else
{
for (i = start; i < end; i++)
{ {
v = c; NSUInteger v = _imagePlanes[0][offset + i];
NSUInteger t = a * v + 0x80;
v = ((t >> 8) + t) >> 8;
_imagePlanes[0][offset + i] = v;
} }
_imagePlanes[0][offset + i] = v;
} }
} }
} }
@ -2205,30 +2206,29 @@ _set_bit_value(unsigned char *base, long msb_off, int bit_width,
for (y = 0; y < _pixelsHigh; y++) for (y = 0; y < _pixelsHigh; y++)
{ {
line_offset = _bytesPerRow * y + _bitsPerPixel / 8; line_offset = _bytesPerRow * y;
for (x = 0; x < _pixelsWide; x++) for (x = 0; x < _pixelsWide; x++)
{ {
offset = x + line_offset; offset = (_bitsPerPixel * x) / 8 + line_offset;
a = _imagePlanes[0][offset + ai]; a = _imagePlanes[0][offset + ai];
if (a != 255) if ((a != 0) && (a != 255))
{ {
if (a == 0) for (i = start; i < end; i++)
{ {
for (i = start; i < end; i++) NSUInteger v = _imagePlanes[0][offset + i];
NSUInteger c;
c = (v * 255) / a;
if (c >= 255)
{ {
_imagePlanes[0][offset + i] = 0; v = 255;
} }
} else
else
{
for (i = start; i < end; i++)
{ {
NSUInteger v = _imagePlanes[0][offset + i]; v = c;
NSUInteger t = a * v + 0x80;
v = ((t >> 8) + t) >> 8;
_imagePlanes[0][offset + i] = v;
} }
_imagePlanes[0][offset + i] = v;
} }
} }
} }