Commit Graph

103 Commits

Author SHA1 Message Date
Terseus
dbe3db6fc5 Oops, fixed typo in comments 2014-04-03 11:15:21 +02:00
Terseus
be09da6507 Rewrite of the ImagingDrawWideLine function
The previous version of the function didn't generate correct wide lines
of even width.

The most notable changes are:
  * Make variable names far more descriptive about the process.
  * Corrected the width calculation; we should deduct one pixel from the
    width because the pixels at the center of the line doesn't count for
    the triangles.
  * Now we calculate *two* ratios, one for left/top displacement (dxmin)
    and one for right/bottom (dxmax), this fix the behavior with lines
    of even width.

It can probably be optimized.
2014-04-02 21:30:42 +02:00
Terseus
cd332fc38a Rewrite of the polygon_generic function
The (previously refactored) polygon_generic function didn't draw
consistent polygons (equilateral polygons were not equilateral nor
symmetrical).

The most notable changes are:
  * The horizontal edges are searched for when finding the polygon
    boundaries, drawn and discarded from the edge list used to detect
    intersections.
  * The intersections are now checked and calculated from the current value
    of the scan line (ymin) instead of in the middle (ymin + 0.5).
  * Because the change in the scan line behavior, we should duplicate
    the intersections in the maximum Y value of an edge or there will be
    draw errors with concave and complex polygons.
  * The rounds of the X coordinates in the hline function calls are
    switched to draw the inner pixels.
  * Removed the ugly micro-optimization of qsort at the end.

This implementation of the scan line algorithm may not be technically
correct, it's not optimized and it have problems with some edge cases,
like a wide line from (x0, y) to (x1, y + 1), therefore it should be
reviewed in the future.
2014-04-02 21:05:13 +02:00
Terseus
8739613cfb Implementation of rounds around zero
The rounds used in the library are towards positive/negative infinity.
Since we're in a cartesian plane, rounds around zero are much more
convenient, so we can use positive and negative values with consistent
results.
2014-04-01 13:08:15 +02:00
Terseus
deecd8a137 Refactored polygon functions to unify logic
The functions `polygon8`, `polygon32` and `polygon32rgba` all have exactly
the same logic in code, only changes the hline function called inside.

Now all the logic is contained in `polygon_generic` which gets a
function pointer to the hline handler, so there is no duplicated code
anymore.
2014-04-01 13:01:03 +02:00
wiredfool
a2800ba9a1 Additional commits from pr 2014-03-27 20:00:10 -07:00
Alastair Houghton
18d6432036 Fixed some problems with the reduce option, as well as a number of warnings from GCC. 2014-03-27 08:35:38 +00:00
wiredfool
2b81156619 merge to master 2014-03-26 18:46:35 -07:00
Alastair Houghton
831216f609 Fixed a Python 3 specific crash. 2014-03-25 16:58:44 +00:00
Alastair Houghton
fea6811af0 Merged wiredfool's changes. 2014-03-19 14:58:47 +00:00
Alastair Houghton
ac8ebccfa6 Added tests and fixed a few bugs that the tests threw up. 2014-03-19 12:16:14 +00:00
wiredfool
dfe6fff10f Eliminating warning for possibly uninitialized variable use 2014-03-14 14:23:44 -07:00
wiredfool
ac52886da1 Fixed compilation errors on linux, ref #547 2014-03-14 11:35:23 -07:00
Alastair Houghton
5853d2aed0 Add a couple of unpackers. 2014-03-14 16:38:30 +00:00
Alastair Houghton
168acabcb0 Fixed some warnings. 2014-03-14 16:38:07 +00:00
Alastair Houghton
9a1b6966b5 Added precinct size option. Also added the jp2klib_version symbol on the _imaging module. 2014-03-14 15:40:30 +00:00
Alastair Houghton
5cb73c94e9 Fixed some Windows issues. 2014-03-14 14:35:09 +00:00
Alastair Houghton
cb1f990a92 Added seek support to make writing jp2 files work. Also added support for directly using an fd rather than relying on the Python loop, if we have a real fd. 2014-03-14 11:21:08 +00:00
Alastair Houghton
61fb89ec54 Added a JPEG 2000 encoder. 2014-03-13 18:27:16 +00:00
Alastair Houghton
aea0ec56b2 Fixed a small bug. 2014-03-13 13:48:15 +00:00
Alastair Houghton
9a4bff722f Decode tile-by-tile; saves memory and means we don't need to buffer the entire image in the OpenJPEG opj_image. 2014-03-13 13:44:26 +00:00
Alastair Houghton
5b22b715ce Fixed some bugs. 2014-03-13 12:29:03 +00:00
Alastair Houghton
d6b8f0f666 Added a JPEG 2000 decoder based on OpenJPEG. 2014-03-13 11:46:47 +00:00
wiredfool
89cb3c7e85 Use even stride when saving odd sized .pcx files 2014-03-03 23:05:50 -08:00
wiredfool
05cd72f4f0 mixed 4/8 tabs+spaces -> 4 spaces, additional bracing 2014-03-03 20:28:34 -08:00
wiredfool
5ecec7db10 Move image to first xsize*bands bytes, rather than including padding if stride > xsize*bands, fixes #523 2014-02-15 22:41:02 -08:00
wiredfool
e87e0333fb Merge branch 'i16-pixelaccess' into cffi-pixelaccess 2014-01-06 23:22:35 -08:00
wiredfool
1dd80b2625 reverted int32 changes 2013-12-30 21:00:32 -08:00
Alex Clark ☺
243160ee78 Merge pull request #448 from wiredfool/2gigapix-redux
2gigapix redux
2013-12-28 06:06:42 -08:00
Alex Clark ☺
d48f301d57 Merge pull request #423 from wiredfool/trns-png
Support for PNG tRNS header when converting from RGB->RGBA
2013-12-28 05:56:03 -08:00
wiredfool
77c36d6edc Using uint* for pixel access in mode I;16 and I;32, fixes #452 2013-12-19 21:39:18 -08:00
Eric Soroos
ec6fd4d672 mixed 8ch tabs + spaces -> 4 space indent 2013-12-13 15:17:43 -08:00
Eric Soroos
1060a59de9 int->py_ssize_t for potentially large numbers 2013-12-13 15:16:14 -08:00
wiredfool
0356741a29 Now using the rgbT2rgba conversion for L+transparency to RGBA, dropping the palette hack 2013-11-26 13:04:10 -08:00
wiredfool
c546c5a4c0 Added conversion for RGB+Transparency to RGBA that adds an alpha mask corresponding to the transparency value, fixes #421 2013-11-26 12:24:19 -08:00
wiredfool
42c17c5947 Removing unused, redundant compression variable. Actual compression setting is in the imagefiledirectory 2013-11-21 20:37:52 -08:00
wiredfool
cc5e8f0f6d Comments
Fixes #414
2013-11-20 17:03:46 -08:00
wiredfool
e4fe6ae7a3 Read only implementation of 12bit tiffs 2013-11-20 16:56:23 -08:00
Eric Soroos
3128a76495 MM and II 16 bit integer tiffs pack/write properly using libtiff on bigendian platform 2013-10-21 22:37:20 +00:00
Eric Soroos
6f8d968cbb MM and II 16 bit integer tiffs unpack properly using libtiff on bigendian platform 2013-10-21 22:17:33 +00:00
Alex Clark ☺
55a0792815 Merge pull request #380 from wiredfool/lcms2
LCMS1 replaced with LCMS2
2013-10-16 09:09:15 -07:00
wiredfool
1865a5c438 Shifting the midpoint of the ab channels to 128. unshifting back to signed int on pack 2013-10-15 22:06:30 -07:00
Seth VanHeulen
fc474a7b6f Added more raw decoder 16 bit pixel formats 2013-10-15 11:35:53 -04:00
wiredfool
4458787f5e Back to RGBx format, 3 bands in 4 bytes. Tests for internal consistency 2013-10-14 22:47:27 -07:00
wiredfool
cb9440a2f5 packing into 24bit 2013-10-11 23:31:26 -07:00
wiredfool
13d62c9f91 Added LAB to Unpack 2013-10-11 22:40:37 -07:00
wiredfool
eca93101de B->A, spacing 2013-10-11 22:40:14 -07:00
wiredfool
1111fca8c6 Solved Segfault 2013-10-11 22:29:19 -07:00
wiredfool
1c3932e89f Added LAB mode, core dumped 2013-10-10 23:27:34 -07:00
wiredfool
b9f94b7632 adding RGBa->RGBA conversion 2013-10-04 13:24:47 -07:00