forked from AcademySoftwareFoundation/OpenImageIO
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
1204 lines (1081 loc) · 59.2 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Changes:
Release 1.2 (in progress -- compared to 1.1.x)
----------------------------------------------
Major new features and improvements:
* Significant performance improvements when reading images with ImageBuf,
as well as with with ImageCache::get_pixels. This also translates to
improved performance and memory use for oiiotool and maketx.
* Significant performance improvements when using ImageBuf::Iterator
or ConstIterator to traverse the pixels in an ImageBuf.
API changes:
* ImageBuf has been changed to a "PIMPL" idiom, wherein all the
internals are no longer exposed in the public API. This allows us to
change ImageBuf internals in the future without breaking API or link
compatibility (and thus giving us more freedom to backport important
improvements to prior releases).
Fixes, minor enhancements, and performance improvements:
Build/test system improvements:
* Many fixes to improve builds and eliminate warnings on Windows and MinGW.
Developer goodies:
* Unit tests for Timer class.
* libOpenImageio/imagespeed_test benchmarks various methods of reading files
and iterating over their pixels (to help us know what to optimize).
Release 1.1.3 (9 Jan 2013)
---------------------------
* Build fix: incorrectly named OpenEXR 2.x files.
* Bug fix in oiiotool --croptofull on OSX
* Build fixes for MinGW on Windows.
* maketx --fullpixels option ignores any origin or display window in the
source image, pretending the pixel data is the entire 0-1 image range
starting at the origin (useful when the source image is created by an
application that incorrectly writes it out as if it were a crop window).
* maketx no longer will clobber existing ImageDescription metadata
when it adds SHA-1 hash or other info as it creates the texture.
* Many additional Exif and IPTC tags are correctly recognized.
* maketx and oiiotool recognize and take advantage of IPTC:ImageHistory
metadata.
Release 1.1.2 (5 Dec 2012)
--------------------------
* maketx fixes -- was botching creation of textures from source images that
were crop windows (pixel window smaller than display window).
* Minor bug fix to Timer when repeatedly starting and restopping (Apple only).
* Bug fix in ustring:find_last_not_of.
Release 1.1.1 (16 Nov 2012)
---------------------------
* Altered the ImageInput::read_scanlines, read_tiles, read_native_scanlines,
read_native_tiles, read_native_deep_scanlines, read_native_deep_tiles,
and the channel-subset version of ImageSpec::pixel_bytes, so that
instead of specifying channel subsets as (firstchan, nchans), they are
specified as [chbegin, chend), to match how spatial extents are done,
as well as how channel ranges already were specified in ROI and
ImageBuf. We hate changing API meanings, but we really think this is
better and more consistent. Note that the two common uses of channel
subsets were firstchan=0,nchans=nchannels (select all channels) and
firstchan=foo,nchans=1, and we have rigged it so that [chbegin,chend)
returns the same channels in both of these cases (in the latter case,
because we retrieve a minimum of 1 channel), so we believe this is
unlikely to break working code in the vast majority of cases.
* OpenEXR: support reading and writing V2f attributes.
* OIIO::getattribute("extension_list") returns a list of all formats
supported, and all extensions for each format, in the form:
"formatA:ext1,ext2,ext3;formatB:ext4,ext5;..."
* The new ImageCache per-file stats that list numbers of tiles read per
MIPmap level have been reformatted slightly, and now print only for
files that are actually MIP-mapped.
* New ImageCache::get_pixels() variety that can retrieve a subset of
channels.
* Substantial speedup of ImageCache::get_pixels, used to be about 50%
more expensive to call IC::get_pixels compared to a direct call to
ImageInput::read_image; now is only about 15% more expensive to use
the cache.
Release 1.1 (9 Nov 2012)
------------------------
Major new features and improvements:
* Support for reading and writing "deep" images (including OpenEXR 2.0).
* Big ImageCache/TextureSystem improvements:
- Improved accuracy of anisotropic texture filtering, especially when
combined with "blur."
- Improve performance in cases with high numbers of threads using the
TS simultaneously (mostly due to use of reader-writer locks on the
tile cache rather than unique locks).
* New ImageBufAlgo functions:
fromIplImage() : converts/copies an OpenCV image to an ImageBuf.
capture_image() : captures from a camera device (only if OpenCV is found)
over() : Porter/Duff "over" compositing operation
render_text() : render text into an image
histogram() : compute value histogram information for an image
histogram_draw() : compute an image containing a graph of the histogram
of another image
channels() : select, shuffle, truncate, or extend channels of an image.
* New oiiotool commands:
--capture : captures from a camera device (only if OpenCV is found)
--pattern constant : creates a constant-color image
--over : Porter/Duff "over" compositing operation
--text : render text into an image.
--histogram : computes an image containing a graph of the histogram of
the input image.
--fill : fills a region with a solid color
--ch : select, shuffle, truncate, or extend channels
API changes:
* A new static ImageInput::open(filename [,config]) combines the old
create-and-open idiom into a single call, which is also much more
efficient because it won't needlessly open and close the file multiple
times. This is now the preferred method for reading a file, though
the old-style create() and open() still work as always.
* Deep image support: ImageInput adds read_native_deep_scanlines,
read_native_deep_tiles, read_native_deep_image, and ImageOutput adds
write_deep_scanlines, write_deep_tiles, write_deep_image, as well as a
supports("deepdata") query. Also, a 'deep' field has been added to
ImageSpec, and some deep data access functions have been added to
ImageBuf.
* Altered the ImageInput::read_scanlines, read_tiles, read_native_scanlines,
read_native_tiles, read_native_deep_scanlines, read_native_deep_tiles
so that instead of specifying channel subsets as (firstchan, nchans),
they are specified as [chbegin, chend), to match how spatial extents
are done, as well as how channel ranges already were specified in ROI
and ImageBuf. We hate changing API meanings, but we really think this
is better and more consistent. Note that the two common uses of channel
subsets were firstchan=0,nchans=nchannels (select all channels) and
firstchan=foo,nchans=1, and we have rigged it so that [chbegin,chend)
returns the same channels in both of these cases (in the latter case,
because we retrieve a minimum of 1 channel), so we believe this is
unlikely to break working code in the vast majority of cases.
* ImageInput plugins now may supply a valid_file(filename) method which
detects whether a given file is in the right format, less expensively
than doing a full open() and checking for errors. (It's probably the same
cost as before when the file is not the right time, but when it is, it's
less expensive because it can stop as soon as it knows it's the right
type, without needing to do a full header read and ImageSpec setup.)
* New ImageCache::get_pixels() method that can retrieve a subset of
channels.
* Removed various error_message() functions that had been deprecated for
a long time (in favor of newer getmessage() functions).
* Define a namespace alias 'OIIO' that gets you past all the custom
namespacesin a convenient way.
* TextureOpt now contains a 'subimagename' field that allows subimages
to be addressed by name as well as by index (only for multi-image textures,
of course).
* ImageBuf improvements:
- A new constructor allows an ImageBuf to "wrap" an existing buffer
memory owned by the calling application without allocating/copying.
- Renamed the old ImageBuf::copy_pixels -> get_pixels, and it now
works for 3D (volumetric) buffers.
- New ImageBuf::copy(), and eliminated operator= which was confusing.
- New ImageBuf methods: reres(), copy_metadata(), copy_pixels(),
get_pixel_channels().
- ImageBuf::specmod() allows writable access to the ImageSpec (caution!).
- Better error reporting mechanism.
- get_pixels and get_pixel_channels take optional strides.
* ImageBufAlgo changes:
- Many ImageBufAlgo functions now take a 'ROI' that restricts the
operation to a particular range of pixels within the image (usually
defaulting to the whole image), and for some operations a range of
channels.
- zero() and fill() take ROI arguments.
- ImageBufAlgo::CompareResults struct changed the failure and warning
counts to imagesize_t so they can't overflow int for large images.
* OIIO::getattribute("format_list") now can retrieve the comma-separated
list of all known image file formats.
* OIIO::getattribute("extension_list") returns a list of all formats
supported, and all extensions for each format, in the form:
"formatA:ext1,ext2,ext3;formatB:ext4,ext5;..."
Fixes, minor enhancements, and performance improvements:
* ImageCache/TextureSystem:
- Anisotropic texture lookups are more robust when the derivatives are tiny.
- Attribute "deduplicate" controls whether the identical-image
deduplication is enabled (on by default).
- Attribute "substitute_image" lets you force all texture references to a
single image (helpful for debugging).
- Texture files are no longer limited to having tile sizes that are
powers of 2.
- Much faster TIFF texture access (by speeding up switching of MIPmap levels).
- More graceful handling of the inability to free handles or tiles
under extreme conditions. Rather than assert when we can't free
enough to stay within limits, just issue an error and allow the
limits to be exceeded (hopefully only by a little, and temporarily).
- Detailed per-file stats now track the number of tile reads per
MIPmap level.
- Attribute "unassociatedalpha" (when nonzero) requests that
IC images not convert unassociated alpha image to associated alpha.
- Substantial speedup of ImageCache::get_pixels, used to be about 50%
more expensive to call IC::get_pixels compared to a direct call to
ImageInput::read_image; now is only about 15% more expensive to use
the cache.
* iconvert handles the int32 and uint32 cases.
* Bug fix in to_native_rectangle, which could lead to errors in certain
data format conversions.
* iv improvements:
- better behavior after closing the last image of the sequence.
- file load/save dialogs can filter to show just certain image file types.
- remember last open dialog directory
- "About" dialog has a link to the OIIO home page
* Improve ::create to more robustly handle files whose extensions don't
match their actual formats.
* OpenImageIO::geterror() is now thread-specific, so separate threads will
no longer clobber each others' error messages.
* OpenEXR: support for building with OpenEXR 2.x, including use of
multi-part EXR and "deep" data.
* Fix reading bugs in DPX and Cineon.
* DPX: fix endianness problem for 15 bit DPX output.
* PNG: fix handling of gamma for sRGB images.
* oiiotool fixes: print MIP messages correctly (it was only printing for
the first MIP level); make sure stray "oiio:BitsPerSample" in an input
file doesn't mess up the -d flags.
* Field3D fixes: properly catch exceptions thrown by the Field3D open();
conform metadata to Field3D conventions; multi-layer f3d files will
present as a multi-image file with the "oiio:subimagename" giving a
unique name for each layer subimage;
* OpenEXR: suppress format-specific metadata from other formats.
* OpenEXR: support reading and writing V2f attributes.
* Targa: fix several bugs that were preventing certain metadata from being
written properly.
* TIFF: recognize the SAMPLEFORMAT_IEEEFP/bitspersample=16 as an image
composed of "half" pixels; enable PREDICTOR_FLOATINGPOINT to give slightly
better compression of float images.
* Handle UTF-8 paths properly on Windows.
* Removed the obsolete "iprocess" utility.
* Fix allocation and stride bugs when dealing with images having different data
formats per channel, and tiled images with partially filled border tiles.
* Field3D: Bug fix when reading vector f3d files.
* Significant performance improvements of our atomics and spin locks when
compiling with USE_TBB=0.
* Fix quantize() to properly round rather than truncate.
* ImageBufAlgo functions now by convention will save error messages into
the error state of their output ImageBuf parameter.
* Improve I/O error checking -- many file reads/writes did not previously
have their result status checked.
* Fixed missing OpenEXR open() error message.
* Clean up error reporting in iconvert.
* Fixes to handle Windows utf8 filenames properly.
* ImageBufAlgo::compare() gives a sensible error (rather than an assertion)
if the images being compared are not float.
* maketx:
- Better error messages for a variety of things that could go wrong when
reading or writing image files.
- Fixes for bug preventing certain ImageCache efficiencies.
- new option --ignore-unassoc leaves unassociated alpha data as it is
(no auto-conversion to associated alpha) and/or ignores the tags for
an input file that is associated but incorrectly tagged as
unassociated alpha.
- Option --monochrome-detect was buggy for images with alpha.
- Option --constant-color-detect didn't do anything; now it works.
- New option: --compression allows you to override the default compresion.
* oiiotool & info: the --hash command had a bug wherein when applied to
images there were MIP-mapped, would hash the lowest-res MIP level rather
than the highest-res. This could result in two different images, if
they happened to have the same average color, to incorrectly report
the same SHA-1 hash. Note that this did NOT affect non-MIPmapped images,
nor did it affect the SHA-1 hashing that occurred in maketx to allow
the TextureSystem to detect duplicate textures.
Build/test system improvements:
* Various Windows build fixes, including fixes for Windows 7, and
improvements to running the testsuite on Windows.
* Testsuite additions and improvements: png fmath_test
* Compilation fixes on FreeBSD.
* Compilation fixes on GNU Hurd platform.
* Compilation and warning fixes for Clang 3.1.
* Add FIELD3D_HOME build variable to allow explicit path to Field3D
implementation.
* Remove support for Boost < 1.40.
* Improved unit tests for atomics, spin locks, and rw locks.
* Avoid generating iv man pages when USE_QT=0
* New testtex options: --aniso, --stblur
* CMake option 'EXTRA_CPP_DEFINITIONS' lets custom builds inject
site-specific compiler flags.
* Make/cmake option: HIDE_SYMBOLS=1 will try to restrict symbol visibility
so that only symbols intended to be part of the public APIs will be
visible in the library when linked.
* The old DLLPUBLIC and LLEXPORT macros, which could clash with other
packages, have been renamed to OIIO_API and OIIO_EXPORT.
* Greatly reduced output when building with cmake; by default, most
non-error status messages only are printed when VERBOSE=1 compilation
is requested.
Developer goodies:
* Strutil new utilities: iequals, istarts_with, iends_with, to_lower,
to_upper, strip, join.
* Use Chris Foster's 'tinyformat' for type-safe printf-like formatting,
and this now forms the basis of Strutil::format, ustring::format, and
many of the classes' error() methods.
* TypeDesc::equivalent() tests for type equality but allows triples with
different' vector semantics to match.
* In timer.h, a new time_trial() template that makes multiple trial
benchmarks easy.
* Macros for memory and cache alignment (in sysutil.h).
* Extend Filesystem::searchpath_find() to be able to search recursively.
* Strutil::strip() strips whitespace (or other specified character sets) from
the beginning or ending of strings.
* Change threads.h to set USE_TBB=0 if undefined as a compiler flag; this
makes it easier to use threads.h in other applications without worrying
about TBB at all.
* Windows utf8 filename utilities path_to_windows_native and
path_from_windows_native.
Release 1.0.10 (5 Nov 2012)
---------------------------
* ImageCache: more graceful handling of the inability to free handles or
tiles under extreme conditions. Rather than assert when we can't free
enough to stay within limits, just issue an error and allow the limits
to be exceeded (hopefully only by a little, and temporarily).
* ImageCache: Detailed per-file stats now track the number of tile reads
per MIPmap level.
* ImageCache attribute "unassociatedalpha" (when nonzero) requests that
IC images not convert unassociated alpha image to associated alpha.
* maketx option --ignore-unassoc leaves unassociated alpha data as it is
(no auto-conversion to associated alpha) and/or ignores the tags for
an input file that is associated but incorrectly tagged as unassociated
alpha.
* oiiotool & info: the --hash command had a bug wherein when applied to
images there were MIP-mapped, would hash the lowest-res MIP level rather
than the highest-res. This could result in two different images, if
they happened to have the same average color, to incorrectly report
the same SHA-1 hash. Note that this did NOT affect non-MIPmapped images,
nor did it affect the SHA-1 hashing that occurred in maketx to allow
the TextureSystem to detect duplicate textures.
Release 1.0.9 (4 Sep 2012)
----------------------------
* Improve error messages when trying to open an OpenEXR image that doesn't
exist or is not a valid OpenEXR file.
* Make the TextureSystem work properly with MIPmapped images whose tile
size is not a power of 2 (mostly back-ported from master, but with
additional fixes).
Release 1.0.8 (17 July 2012)
----------------------------
* Fix quantization/truncation bug that sometimes left tiny alpha holes in
8 bit images (making some alpha value that should be 255, instead 254).
* TextureSystem: fix fill_channels for monochrome+alpha images to properly
expand to "RRRA."
Release 1.0.7 (8 July 2012)
---------------------------
* Bug fix when reading vector Field3D files.
* Fix input of tiled images with per-channel formats.
* Add testsuite/nonwhole-tiles and testsuite/perchannel.
* Bug fix when reading binary PNM files.
Release 1.0.6 (12 Jun 2012)
---------------------------
* Fix allocation and stride bugs in that could overrun a buffer when
reading tiled images whose resolution was not a whole number of tiles.
* Fix stride bugs when reading scanline images with differing data types
per channel.
* Fixes for FreeBSD compilation.
Release 1.0.5 (3 Jun 2012)
--------------------------
* Various fixes for FreeBSD/kFreeBSD systems.
* Various fixes to compile with Clang 3.1 without warnings.
* Fixed some DPX and Cineon bugs related to channel names.
* Fixed some mangled text in the PDF documentation.
* Developer goodie: TypeDesc::equivalent() tests two TypeDesc's for
equality, but allows 'triples' with differing vector semantics to match.
Release 1.0.4 (2 May 2012)
--------------------------
* DPX fixes for 12 bit DPX and packing methods.
* Cineon fixes: remove buggy 32 and 64 bit output, which wasn't needed;
fix for 10 bit -> 16 bit promotion.
* bmp fix: wasn't setting oiio:BitsPerSample correctly.
* oiiotool fixes: improved argument help and add man page generation;
print data format info correctly for non-byte bit depths; better
inference of output tile size and data format from the inputs (when
not explicitly requested); --resize n% was broken; print data format
info correctly for non-byte bit depths.
* iinfo fixes: make --stats print correctly; print data format info
correctly for non-byte bit depths.
* Fix roundoff error when converting from float buffers to int image files.
* More precise filter normalization in ImageBufAlgo::resize (and therefore
oiiotool --resize).
Release 1.0.3 (16 Apr 2012)
---------------------------
* Fix reading bugs in DPX and Cineon.
* iconvert handles the int32 and uint32 cases.
* Bug fix in to_native_rectangle, which could lead to errors in certain
data format conversions.
* Various Windows build fixes, including fixes for Windows 7.
* Compilation fixes on FreeBSD.
Release 1.0.2 (19 Mar 2012)
----------------------------
* Fixed TARGA reader bug where for 16-bpp, 4-channel images, we weren't
reading the alpha properly.
* Fix ill-formed default output names for maketx (and in the process,
add Filesystem::replace_extension utility).
* Threading performance improvement in the texture system as a result of
wrapping various internal "iequals" calls to pass a static locale
rather than relying on their default behavior that would use a mutex
underneath to access a global locale.
Release 1.0.1 (13 Mar 2012, compared to 1.0.0)
----------------------------------------------
Fixes, minor enhancements, and performance improvements:
* Improvements in anisotropic texture filtering quality.
* oiiotool --hash prints the SHA-1 hash of each input image.
* oiiotool: properly print error message and exit when an input file
cannot be opened.
* Changed the default behavior of idiff and "oiiotool --diff" to print
the pixel difference report only for failures (not for successful
matches), unless in verbose (-v) mode.
Developer goodies:
* dassert.h: New ASSERTMSG and DASSERTMSG allow even more flexible
assertion messages with full printf argument generality.
* Windows compilation fixes.
* Major testsuite overhaul: All tests are copied and run in the
build/ARCH/testsuite directory, no longer leaving any clutter in the
"source" testsuite area. The testing scripts have been cleaned up
and greatly simplified. An individual test can be run using "make
test TEST=name" (also works with regular expressions). The usual
"make test" will exclude tests that are expected to be broken (such
as tests for portions of the system that were not built because their
required libraries were not found), but "make testall" will run all
tests including nominally "broken" ones.
Release 1.0 (25 Feb 2012, compared to 0.10.5)
---------------------------------------------
Major new features and improvements:
* New ImageInput & ImageOutput methods that can efficiently read/write
multiple scanlines or tiles at a time.
* New ImageInput methods that can read a subset of channels from an image.
* WebP format reader/writer.
* PSD (Adobe Photoshop) format reader.
* RLA (Wavefront) format reader/writer.
* Cineon support is re-enabled after various bug fixes.
* New utility: oiiotool. This is still a work in progress, but largely
subsumes the functionality of iprocess, iinfo, iconvert, idiff.
* Use OpenColorIO (www.opencolorio.org) for color space conversion, if
detected at build time and a valid OCIO configuration is found at runtime.
Color conversion commands have been added to oiiotool and maketx.
API changes:
* New ImageInput & ImageOutput methods that can efficiently read/write
multiple scanlines or tiles at a time: read_scanlines, read_tiles,
write_scanlines, write_tiles.
* New ImageInput methods that can read a subset of channels from an image.
* Change the last couple functions that took min/max pixel range
specifications to conform to our usual [begin,end) convention --
write_rectangle and to_native_rectangle.
* exif_encode, exif_decode now available as general utilities (previously
were private to the JPEG plugin).
* New ImageOutput::supports() queries: "displaywindow" queries whether the
file format is able to handle differing display ("full") and pixel data
windows, "negativeorigin" queries whether data origin or full/display
origin may be negative.
* TextureSystem and ImageCache now accept attribute "options", that is a
comma-separated list of name=value setings (e.g.
"max_memory_MB=256,max_files=1000"). Also, upon startup, the environment
variables OPENIMAGEIO_TEXTURE_OPTIONS and OPENIMAGEIO_IMAGECACHE_OPTIONS
are parsed for these startup values.
* TextureSystem/ImageCache: add a separate "plugin_searchpath" attribute
separate from the "searchpath" for images.
Fixes, minor enhancements, and performance improvements:
* ImageBufAlgo new algorithms: compare, compare_Yee, isConstantChannel,
fixNonFinite.
* TextureOpt: add ustring-aware versions of the decode_wrapmode utility.
* TypeDesc: allow stream << output.
* iv: raised maximum ImageCache size from 2 GB to 8 GB.
* PNM: fix bug where file exceptions could go uncaught.
* Properly create coefficients for Kodak color transform.
* iprocess: Fix bug calling read.
* maketx new options: --opaque-detect omits alpha from texture whose input
images had alpha=1 everywhere; --mipimage option allows custom MIP
levels to be assembled; --fixnan repairs NaN & Inf values in the inputs.
* Fixed bugs in sinc and Blackman-Harris filters.
* ImageCache/TextureSystem -- new reset_stats() method resets all the
statistics back to zero.
* TIFF: better handling of unexpected bitsperpixel combinations; support
the nonstandard use of IEEEFP/16bit as "half"; fix many small bugs
related to unusual depth depths and contig/separate conversions.
* JPEG-2000 plugin rewritten to use OpenJpeg library instead of Jasper.
* DPX: various bug fixes.
* RLA plugin overhauled and now has good support for non-8-bit depths.
* oiiotool improvements: --pop, --dup, --selectmip, --origin,
--incolorspace, --tocolorspace, --colorconvert.
* TextureSystem supports textures with "overscan" (including proper
maketx support for input images with overscan).
* TS/IC invalidate_all previously cleared all fingerprint info, but now
only clears fingerprints for individual files that are invalidated
(this makes for better duplicate detection).
Build system improvements:
* Support compilation on FreeBSD.
* Improved custom detection of boost-python on Windows.
* Easier to compile OIIO without using TBB.
Developer goodies:
* ArgParse enhancements: make %! indicate a bool that's set to false if
the option is found, %@ indicates an immediate callback, allow
callbacks for bool options, option matching ignores characters after
':' in the option, wrap lines at word breaks when printing usage help.
* Generate man pages for the command-line tools.
* Strutil additions: escape_chars, unescape_chars, word_wrap.
* Filesystem additions: filename(), extension().
* Sysutil additions: terminal_columns()
* Use github.com/OpenImageIO/oiio-images project for test images that are
too big to fit in testsuite.
* Fixed bugs in Timer::lap().
* Aded 'invert' algorithm to fmath.h.
* Clarify Timer docs and fix Apple-specific bug.
* testtex improvements: --wrap
Release 0.10.5 (20 Feb 2012)
----------------------------
* Improvements to anisotropic texture filtering: (1) fix for degenerate
derivatives that could corrupt the filter footpring calculations,
resulting in an infinitely long major axis; (2) more efficient subpixel
filtering for very narrow anisotropic footprints when on the highest-res
MIP level.
Release 0.10.4 (November 20, 2011)
----------------------------------
* Important texture bug fix: Improve robustness of texture lookups with
very small derivatives. The previous bug/misunderstanding had the
result of some filter footprints with very small (but valid)
derivatives inappropriately using the highest-resolution MIPmap level
and maximum anisotropy, resulting in terrible performance, alising,
and in some cases visible seams on the boundary between where this
happened and where it didn't. Be aware that the fixed code will make
some areas of texture look less sharp, but that's only because it was
aliasing before and using a totally incorrect MIPmap level.
Release 0.10.3 (November 5, 2011)
---------------------------------
* New ImageCache/TextureSystem option: "autoscanline", which, when
autotile is turned on, causes the virtual tiles to be the full width
of the image scanlines, rather than square. This improves performance
for some apps.
* Bug fix: PNG files with both associated alpha and gamma correction lost
precision when converting.
* Bug fix: ICO and Targa did not properly force requested (but
unsupported) UINT16 output to be UINT8.
* maketx (and Filter classes): fixes to sinc, blackman-harris filters.
* Minor Python binding bug fixes.
* Allow stream << of TypeDesc.
* Fix minor Timer::lap() bug.
Release 0.10.2 (August 6, 2011)
-------------------------------
* Improve the performance of ustring constructor when highly multithread.
* Remove old out-of-date Doxygen html pages.
Release 0.10.1 (August 2, 2011)
-------------------------------
* Fix TextureSystem::get_texture_info(file,"exists") (and the equivalent for
ImageCache), it was previously incorrectly giving an error if the file
didn't exist.
* Fixed an error where we were losing the error message if ImageInput::create
failed.
* maketx: --hash is deprecated, the SHA-1 hash is always computed; the
hash takes into account upstream image changes, such as resizing; the
--filter command line argument only takes the filter name, the width
is now automatically computed.
* Add static methods to Filter classes allowing queries about the names
and vital info about all available filters.
* New Filesystem::is_regular() wraps the boost is_regular and catches
exceptions.
* iv: raise the maximum ImageCache settable in the UI from 2GB to 8GB.
* Bug fixes with per-channel data formats.
* Add Strutil::escape_chars() and unescape_chars() utility functions.
* TextureOpt: add ustring-aware versions of the decode_wrapmode() utility.
Release 0.10 (June 9 2010)
--------------------------
Major new features and improvements:
* TextureSystem: fix longstanding texture quality issues: underestimation
of anisotropic filter footprint, improved metric for determining when to
switch to bicubic filtering, better MIP level selection for non-square
images.
* maketx --filter allows you to specify the filter for resizing and
downsizing to generate MIPmap levels (this lets you choose a filter
that is better than the default "box").
* TextureSystem option "gray_to_rgb", when set to nonzero, promotes
grayscale (single channel) texture lookups to RGB (rather than using
the fill color for missing channel.
* IFF (Maya) support from Mikael Sundell.
API changes:
* TextureSystem has additional API entry points for apps that want to
retrieve an opaque texture handle and per-thread info and then pass it
back to texture lookups, saving some name resolution and per-thread
retrieval time. (The old routines that do this all automatically still
work just fine.)
* New ImageBufAlgo utilities: setNumChannels, isConstantColor, isMonochrome,
computePixelHashSHA1, transform.
Fixes, minor enhancements, and performance improvements:
* ImageCache/TextuerSystem:
- option "accept_untiled" wasn't properly recognized (0.9.1); new
attribute "accept_unmipped" (default to 1), when set to zero, will
treat any un-MIPmapped file as an error (analogous to the existing
"accept_untiled") (0.9.2);
- fix deadlock when file handles are exhausted (0.9.3);
invalidate_all() no longer closes all files unconditionally, only
the ones actually invalidated;
- fix longstanding problem where multiple threads could redundantly
open and read the same file if they need it simultaneously and it
isn't in cache already;
- get_pixels issues a single error from a corrupt file, rather than
reporting error after error on the same file.
* Texture: Fixes to make latlong environment maps more correct for OpenEXR
files, which have some particular unique conventions. (0.9.1);
bug fix to TextureOpt default initializer that could screw up texture
lookups. (0.9.1)
* maketx fixes: the -oiio command line option also enables hash generation;
resize properly if any of the dimensions change (previously only did
if ALL dimensions changed) (0.9.3); --nchannels lets you set the number
of output channels.
* Added ImageBufAlgo::transform to allow for 'flip' & 'flop' in iprocess.
(0.9.1)
* DPX: fix file reading when number of channels not equal to 3 (0.9.3);
support for endianness specification, fix lots of problems writing metadata.
* BMP: RGB-to-BGR conversion fixed, force UINT8 output; scanline size was
incorrect when copying to temporary buffers.
* JPEG: reader is more robust to corrupted files and other problems.
* JPEG-2000: support files with more than 8 bits per channel.
* Targa: properly expand 5 bit per channel to full bytes.
* Fixed incorrectly set "ResolutionUnit" and "BitsPerSample" usage in several
format plugins.
* Improved handling of file formats that allow unassociated alpha.
* iv: display non-Latin filenames properly.
* iconvert --noclobber option ensures that existing files aren't overwritten.
* iinfo: fixes to properly print subimage and mipmap statistics.
For developers / build issues:
* Fix USE_TBB macro on Windows build. (0.9.1)
* Fixes required for Windows compile in conjunction with OSL. (0.9.1)
* Removed some pointless debugging output to the console. (0.9.1)
* Fix subtle bug in convert_type utility function that was causing a slight
incorrect rounding when converting float to a signed integer type. (0.9.3)
* Fix to compile properly against Boost 1.46. (0.9.3)
* Update pugixml from 0.5 to 1.0.
* Remove boost::test and gtest as dependencies, use our own macros.
* Fixes to allow use of libtiff 4.0.
* make USE_JASPER=0 USE_FIELD3D=0 make it easy to disable Jasper and
Field3D as dependencies.
* Various fixes to make cleaner compiles with clang.
* ustring: Added find* methods that match those of std::string, expose
make_unique, is_unique, and from_unique helper functions.
* Add Filesystem::exists and Filesystem::is_directory.
Release 0.9 (Dec 9 2010, updated Feb 23, 2011)
----------------------------------------------
Major new features:
* New format plugin: DPX
* New format plugin: Cineon (currently read only) (r1599,1600,1601,1617)
* New format plugin: Ptex (currently read only) (r1655,1664).
* New format plugin: Field3D (currently read only) (r1659,1666,1669)
* Support for files that are simultaneously multi-image and where each
subimage may also be mipmapped (these concepts were previously
comingled). This mainly effects ImageInput::seek_subimage and
ImageOutput::open, as well as some minor methods of ImageCache and
ImageBuf. (r1655,1656,1664,1671)
* Support for per-channel data formats via the new ImageSpec::channelformats
vector and interpreting read_foo/write_foo format parameter of UKNOWN
as a request for the true native format. (r1674)
* Full support of TextureSystem environment() for lat-long maps.
API changes:
* Single-point texture lookup struct (TextureOpt) and additional
single-point texture lookup entry points. (r1679)
* Filter{1D,2D} class now has a destroy() method to match its create(),
and create() accepts "bspline" and "catrom" as synonyms for the
existing "b-spline" and "catmull-rom" fileters. (r1542)
* Add methods to ImageSpec to read/write an XML representation of the
ImageSpec (r1574).
* Finally put all the helper classes (ustring, TypeDesc, etc.) that were
in the main OpenImageIO namespace, as well as centralized version numbering
and custom namespace control.
* ParamList now has a method to remove attributes.
* Color handling change: color space now is a metadata string,
"oiio:ColorSpace", not 'linearity' data member of ImageSpec; remnants of
bad 'dither' ideas have been removed; "BitsPerSample" metadata has been
renamed "oiio:BitsPerSample" and several bugs have been fixed related to
it in some of the image plugins.
* Moved some ImageBuf methods into functions in imagebufalgo.h.
Fixes, minor enhancements, and performance improvements:
* OpenEXR: Allow read/write with different data formats per channel (r1674).
* SGI: add support for files with any number of channels (r1630).
* PNG: improve PNG write speed by 4x by adjusting compression tradeoffs
(r1677)
* JPEG: assume sRGB unless EXIF says otherwise (r1693); fix broken JPEG
4-channel to 3-channel conversion (r1696).
* PNM: monochrome data was output incorrectly in both binary & ascii forms;
adopt the Netbpm convention for endianness in the 16 bit case; open binary
image files in binary mode to avoid newline mangling (r1709).
* TIFF: more sensible checkpointing logic greatly reduces header rewriting.
* iinfo: add --stats option (r1618)
* iv: Now can sort the image list by file date, metadata date, name, or
file path (r1514).
* ImageCache: fixed bug that allowed the max_open_files limit to be
exceeded (r1657); raise the default IC cache size to 256 MB (r1663);
automip unmipped files even if they are tiled (r1670); fix bug wherein
an invalidated and modified file would continue to flush in subsequent
invalidations, even if the file was not modified again (r1712/0.8.8).
* New ImageBuf algorithm: computePixelStats (r1618)
* Fixes in ImageCache and ImageBuf to allow correct handling of
3D (volumetric) files. (r1659,1660)
* ImageCache fixed to ensure that multiple threads don't try to concurrently
open the same file.
* Properly append error messages; ASSERT if the error message buffer
exceeds 16 MB (which means somebody is failing to call geterror) (1672)
* Fix subtle Strutil::format and ustring::format crasher bugs with long
strings (r1654 - 0.8.8).
* Print the OIIO version in the ImageCache stats so we don't guess
when somebody sends us a log file with complaints.
* ImageCache::getattribute can retrieve its interesting internal
statistics individually by name. (r1721)
* idiff and iv increased their IC cache size. (r1722)
* idiff bug fixes: (1) files with different number of MIPmap levels
immediately failed, whereas they should have compared their top
levels, and only fail if the "-a" flag was used; (2) some failure
modes incorrectly printed a "PASS" message despite actually failing. (r1722)
* Changed the environment variable that contains the plugin search path
from IMAGEIO_LIBRARY_PATH to OPENIMAGEIO_LIBRARY_PATH. (r1723)
* Bug fix to ImageInput::read_image -- could crash due to an internal
buffer allocated as the wrong size. (r1724)
* Bug fixes to write_image(), related to subtle stride errors.
* Improved strhash, fewer ustring hash collisions.
* New maketx functionality: --constant-color-detect, --monochrome-detect,
--prman, --oiio (look in docs for explanation).
For developers / build issues:
* testtex: print memory use (r1522)
* Embedded plugins are now built within the OIIO namespace, if defined (r1559).
* Fixed implementation of TypeDesc construction from a string. (r1562)
* Incorporate PugiXML for XML parsing/writing needs (r1569).
* In-progress socket I/O plugin is in the code base, but not yet fully
supported.
* Disable python support if boost_python is not found. (r1701)
Release 0.8 (May 26 2010)
-------------------------
Major new features:
* Python bindings for the ImageInput, ImageOutput, ImageSpec, ImageBuf,
and ImageCache classes.
* New format plugin: SGI image file
* New format plugin: PNM/PPM/PGM/PBM
* New format plugin: DDS (currently reading only)
* New format plugin: Softimage PIC (currently reading only)
API changes:
* New "linearity" tags include AdobeRGB, Rec709, and KodakLog.
* ColorTransfer helper class can convert among the linearity types, and
may be optionally passed to convert_image and convert_types.
* Added to fmath.h: sincos, exp2f, log2f
* Renamed ErrHandler::ErrCode enums with EH_ prefix (to fix conflicts
with some Windows headers).
* ustring now has getstats() and memory() methods.
Fixes, minor enhancements, and performance improvements:
* ImageInput::create() error messages are more helpful.
* Fixed some error messages in FITS output, iconvert.
* maketx: Console flushes in status messages to that a calling process
will get status messages right away.
* Fix subtle ImageCache bug with invalidate().
* ImageCache/TextureSystem have improved multithreading performance
when large untiled files are needed simultaneously by many threads.
* TextureSystem: new 'missingcolor' texture option that, when provided,
can specify a color that will be used for missing textures rather than
generating errors. (If not supplied, missing tex is still an error.)
* BMP plugin enhancements.
* TIFF: support 64-bit float pixels, proper random scanline access emulation
for all appropriate compression types, handle incorrectly set-to-zero
image_full_width and image_full_height. (r1515 - 0.8.1)
* PNG: properly handle palette images, unassociated alpha, gamma
correction, endianness for 16-bit files, and has vastly better memory
consumption due to reading scanlines individually rather than
buffering the whole image (r1523 - 0.8.1); fix clamping/wrapping
problem for certain values when alpha > color. (r1605 - 0.8.3)
* iv fixes: fix improper recentering after image reload; fix crash when
image info window opened without any image files loaded; better status
window message when image reads fail; iv goes into background properly
in Windows; "slide show" mode; pixel view display moves if you need to
look at pixels underneath it;
* ImageCache bug: previously couldn't designate a cache > 2GB (because of
integer overflow issues).
* ImageCache::get_image_info and TextureSystem::get_texture_info now respond
to a new "exists" query that merely tests for existance of the file. (0.8.1)
* ImageCache/TextureSystem fix for a threading logic bug that could potentially
lead to a deadlock (and definitely led to hitting a DASSERT when compiled
for DEBUG mode). (0.8.1)
* maketx performance improvements: --noresize is now the default (use
--resize if you really want power-of-two resizing); much better
performance because it doesn't use ImageCache unless the image being
converted is very large; takes advantage of multiple cores by
automatically multithreading (the number of threads can be controlled
by the "-t" option, with the default to use the same number of threads
as hardware cores). (r1546 - 0.8.2)
* Fix potential crash in read_tile for files with tiles so big that they
would not fit on the stack (heap allocation used instead). (0.8.2)
* OpenEXR: add support for vector metadata attributes. (r1554 - 0.8.2)
* Improve TIFF open error messages. (r1570 - 0.8.3)
* Make ImageCache::get_pixels() and TextureSystem::get_texels() safe for
crop windows -- fill with zero outside the valid pixel data area. (r1579 - 0.8.3)
* In ImageCache::attribute (and by extension, TS::attribute), only
invalidate the cache if the attributes actually CHANGED. (r1582 - 0.8.3)
* maketx: --checknan option double checks that no source image pixels
are NaN or Inf (r1584 - 0.8.3).
* Fixed crash that could result from certain XML strings embedded in TIFF
headers (uncaught exception). (0.8.5)
* Fixed ImageCache deadlock when using autotile. (r1631 - 0.8.6)
* Fixed a longstanding performance issue with ImageCache automip, wherein
an unmipped file that is larger than the cache size leads to pathological
thrashing. The solution is to automatically raise the cache size to be
large enough to automip the file without danger of thrashing. (r1657 - 0.8.7)
For developers / build issues:
* EMBEDPLUGINS=1 is now the default. This means that all the format
plugins that come with OIIO are compiled into the main library, so
there's no reason for users to set $IMAGEIO_LIBRARY_PATH unless they
need custom format plugins not supplied with the main distribution.
* Fix compiler warnings (mostly under Windows): TBB stuff, ustring, windows.h.
* Option to build static libraries (with 'make LINKSTATIC=1').
* Fixes to make clean compilation with gcc-4.4.2.
* Allow custom 'platform' designation in the build.
* Allow custom installation destination ('make INSTALLDIR=...').
* ustring now takes half the memory (by no longer redundantly storing the
characters on Linux and OS X).
* Always use TBB (better performance on Windows for atomics). [0.8.2]
Release 0.7 (Nov 26 2009)
--------------------------
Major new features:
* New format plugin: JPEG-2000 (r1050)
* New format plugin: FITS (r1287 et al)
* TextureSystem: two new entries to TextureOptions which allow the texture
system to return the derivatives in s and t of the texture. (r1308)
API changes:
* Added imagespec() method to ImageCache and TextureSystem that returns a
reference to the internal ImageSpec of the image. This is much more
efficient than get_imagespec, but beware, the pointer is only valid
until somebody calls invalidate() on the file. (r1266)
* TextureOptions: eliminated the 'alpha' field. Added the dresultds and
dresultdt fields.
* Extend TypeDesc to include INT64 and UINT64. (r1145)
Fixes, minor enhancements, and performance improvements:
* Make EMBEDPLUGINS=1 the default. (0.7.1)
* Improvements to the Targa plugin, bringing it into compliance with
TGA 2.0 (r1163, r1297)
* Fixed PNG-related crashes on 64 bit machines. (r1336)
* iv improvements: support for multichannel images and different color
modes (r1129), support auto use mipmap level based on zooming (r1093),
correct pixelview for rotated images (r1092), fix off-by-one error
with some zoom levels (r1089).
* maketx: fixed problem where it was sometimes not setting the output
data format to match the input data format correctly (r1290), fixed
problems with writing EXR files with --nomipmap (r1286), fixed cases
where data window was not the same as display window (i.e. crop or
overscan).
* ImageCache/TextureSystem: various threading and performance improvements.
(r1188, r1211, r1288, r1299)
* TS: fixed incorrect "texturetype" results of get_texture_info. (r1314)
* IC/TS: fixed crasher bugs when doing get_pixels of images that had
non-zero data window origin. (r1313)
* IC/TS: better error messages and recovery from spooky open and read_tile
failures. (r1321)
* When IC/TS reads and entire (untiled) image, the file is closed afterwards.
This is especially helpful on Windows where open files are locked to
writing by other processes. (r1298)
* HUGE speedup of ImageCache::get_image_info (and TS::get_texture_info)
b replacing strcmp's with ustring == (r1281).
* IC: fixed various subtle logic errors with broken files and
invalidate/invalidate_all. (r1252, r1279)
* IC/TS: fixed memory leak of per-thread imagecache data and subtle race
conditions. (r1057, r1216, r1222, r1238)
* TS: fixed problem where missing or broken textures weren't using the
right fill color. (r1268)
* IC: Clamp cache size to a reasonable lower limit (r1256)
* TS: improvements to filter estimation (1134) and bicubic interpolation
numerical stability and speed (r1166, r1179, r1333).
* IC: when autotile=0 but automip=1, fixed bug that was wasting HUGE
amounts of memory by using the wrong resolution for mip levels! (r1147)
* IC: fix an edge case where tiles could leak. (r1044)
* Fixed some hairy static initialization problems with ustring (r1280)
* Use a spin lock rather than block in ustring constructor gives HUGE
speedup especially on Windows. (r1167)
* TS: Make everything work for textures whose image origin is not (0,0)
or whose pixel data window doesn't match the image window (i.e. crop
windows or overscan). (r1332)
* IC/TS: Correctly invalidate files afected by recently changed "automip"
setting. (r1337)
* IC/TS: fix crash that could occur with non-existant textures in combination
with invalidate_all(). (r1338)
* Make create() error messages more helpful. (0.7.1)
For developers:
* Build more easily when older OpenEXR versions are found. (r1082)
* HTML Doxygen documentation on the public APIs. (r1311, r1312, et al)
* Sysutil::this_program_path finds the full path of the running program.
(r1304)
* Better compiler-side error checking of printf-like functions (r1302)
* A new site/... area where important users with local build customization
needs can check in (reasonably sized) custom makefiles or other helpful
things. (r1284)
* New ErrorHandler class, currently unused by OIIO itself, but very handy.
(r1265)
* Fixed lots of compiler warnings.
* Upgraded to a more recent TBB, which fixed some atomic problems. (r1211)
* ustring: make string comparison safe for empty strings. (r1330)
* Include file fixes for gcc 4.4. (r1331)
* Regularize all #include references to Imath and Openexr to
<OpenEXR/blah>. (r1335)
Release 0.6 (Jul 20, 2009)
--------------------------
Major new features:
* Everything has been ported to Windows.
* iv: handle older cards or versions of OpenGL, including lack of GLSL,
non-pow2 textures, etc. Generally should now be usable (if slightly
degraded functionality) for most OpenGL 1.x implementations. (r764)
* ImageBuf that only reads images is now automatically backed by
ImageCache. In the process, add Iterator and ConstIterator as "safe"
and efficient ways to visit all the pixels within a region of the
image, and eliminate the unsafe pixeladdr() method. Also added
ImageCache::attribute("forcefloat") to conveniently force all
ImageCache internal storage to be float. (r770,771,772,775,803,805)
* iv can now support "big" images, in particular larger than the OpenGL
texture limit (4k), and also very big images via the use of ImageCache
(r912).
* Truevision Targa (TGA) support. (r776,792)
API changes:
* In a variety of places that specified pixel rectangles (including
ImageCache::get_pixels and TextureSystem::get_texels), specify regions
as (xbegin,xend,ybegin,yend) rather than (xmin, ymin, xmax, ymax).
Note that 'end' is, like STL, one past the last pixel. (r771)
* All classes now query error messages using geterror(). Previously some
used geterror() and others used error_message(). The old error_message
is deprecated and will be removed in a future release (r957).
Fixes and minor enhancements:
* OpenEXR plugin improvements: don't set "textureformat" attribute
unless it really is a mip-mapped texture. Preserve the mipmap
rounding mode when copying OpenEXR files, by using the
"openexr:roundingmode" metadata (r801). Properly mark the alpha
and z channels in the ImageSpec (r885).
* TIFF plugin improvements: handle 2 bpp images, properly name channels
when reading palette images (r802), no longer uses the