Hello community,

here is the log from the commit of package ghc-JuicyPixels for openSUSE:Factory 
checked in at 2020-05-11 13:35:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-JuicyPixels (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-JuicyPixels.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-JuicyPixels"

Mon May 11 13:35:24 2020 rev:27 rq:801031 version:3.3.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-JuicyPixels/ghc-JuicyPixels.changes  
2019-12-27 13:51:01.072558500 +0100
+++ 
/work/SRC/openSUSE:Factory/.ghc-JuicyPixels.new.2738/ghc-JuicyPixels.changes    
    2020-05-11 13:35:46.544416000 +0200
@@ -1,0 +2,14 @@
+Wed May  6 06:52:10 UTC 2020 - [email protected]
+
+- Update JuicyPixels to version 3.3.5.
+  v3.3.5 January 2020
+  -------------------
+
+  Maintenance release to push various pull requests onto
+  hackage
+
+   * Exporting Pixel32 (will)
+   * Palettization of transparent frames in Gif (flutterlice)
+   * Documentation fixes (lehins)
+
+-------------------------------------------------------------------

Old:
----
  JuicyPixels-3.3.4.tar.gz

New:
----
  JuicyPixels-3.3.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-JuicyPixels.spec ++++++
--- /var/tmp/diff_new_pack.Uw4z6M/_old  2020-05-11 13:35:47.848418734 +0200
+++ /var/tmp/diff_new_pack.Uw4z6M/_new  2020-05-11 13:35:47.848418734 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ghc-JuicyPixels
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %global pkg_name JuicyPixels
 Name:           ghc-%{pkg_name}
-Version:        3.3.4
+Version:        3.3.5
 Release:        0
 Summary:        Picture loading/serialization (in png, jpeg, bitmap, gif, tga, 
tiff and radiance)
 License:        BSD-3-Clause

++++++ JuicyPixels-3.3.4.tar.gz -> JuicyPixels-3.3.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/JuicyPixels.cabal 
new/JuicyPixels-3.3.5/JuicyPixels.cabal
--- old/JuicyPixels-3.3.4/JuicyPixels.cabal     2019-10-02 21:17:11.000000000 
+0200
+++ new/JuicyPixels-3.3.5/JuicyPixels.cabal     2020-02-28 09:16:46.000000000 
+0100
@@ -1,5 +1,5 @@
 Name:                JuicyPixels
-Version:             3.3.4
+Version:             3.3.5
 Synopsis:            Picture loading/serialization (in png, jpeg, bitmap, gif, 
tga, tiff and radiance)
 Description:
     
<<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADABAMAAACg8nE0AAAAElBMVEUAAABJqDSTWEL/qyb///8AAABH/1GTAAAAAXRSTlMAQObYZgAAAN5JREFUeF7s1sEJgFAQxFBbsAV72v5bEVYWPwT/XDxmCsi7zvHXavYREBDI3XP2GgICqBBYuwIC+/rVayPUAyAg0HvIXBcQoDFDGnUBgWQQ2Bx3AYFaRoBpAQHWb3bt2ARgGAiCYFFuwf3X5HA/McgGJWI2FdykCv4aBYzmKwDwvl6NVmUAAK2vlwEALK7fo88GANB6HQsAAAAAAAAA7P94AQCzswEAAAAAAAAAAAAAAAAAAICzh4UAO4zWAYBfRutHA4Bn5C69JhowAMGoBaMWDG0wCkbBKBgFo2AUAACPmegUST/IJAAAAABJRU5ErkJggg==>>
@@ -28,7 +28,7 @@
 Source-Repository this
     Type:      git
     Location:  git://github.com/Twinside/Juicy.Pixels.git
-    Tag:       v3.3.3.1
+    Tag:       v3.3.5
 
 Flag Mmap
     Description: Enable the file loading via mmap (memory map)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/changelog 
new/JuicyPixels-3.3.5/changelog
--- old/JuicyPixels-3.3.4/changelog     2019-10-02 21:17:11.000000000 +0200
+++ new/JuicyPixels-3.3.5/changelog     2020-02-28 09:16:46.000000000 +0100
@@ -1,6 +1,16 @@
 Change log
 ==========
 
+v3.3.5 January 2020
+-------------------
+
+Maintenance release to push various pull requests onto
+hackage
+
+ * Exporting Pixel32 (will)
+ * Palettization of transparent frames in Gif (flutterlice)
+ * Documentation fixes (lehins)
+
 v3.3.4 September 2019
 ---------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/docimages/pixelgraph.svg 
new/JuicyPixels-3.3.5/docimages/pixelgraph.svg
--- old/JuicyPixels-3.3.4/docimages/pixelgraph.svg      2015-04-25 
11:09:38.000000000 +0200
+++ new/JuicyPixels-3.3.5/docimages/pixelgraph.svg      2018-08-14 
13:07:59.000000000 +0200
@@ -1,264 +1,264 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
-<!-- Generated by graphviz version 2.22.2 (20090313.1817)
- -->
-<!-- Title: pixelGraphic Pages: 1 -->
-<svg width="620pt" height="464pt"
- viewBox="0.00 0.00 620.00 464.00" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
-<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 460)">
-<title>pixelGraphic</title>
-<polygon fill="white" stroke="white" points="-4,5 -4,-460 617,-460 617,5 
-4,5"/>
-<!-- PixelRGB8 -->
-<g id="node1" class="node"><title>PixelRGB8</title>
-<ellipse fill="none" stroke="black" cx="246" cy="-438" rx="31.7878" ry="18"/>
-<text text-anchor="middle" x="246" y="-436.3" font-family="sans-serif" 
font-size="8.00">PixelRGB8</text>
-</g>
-<!-- PixelRGBA8 -->
-<g id="node6" class="node"><title>PixelRGBA8</title>
-<ellipse fill="none" stroke="black" cx="441" cy="-354" rx="34.8223" ry="18"/>
-<text text-anchor="middle" x="441" y="-352.3" font-family="sans-serif" 
font-size="8.00">PixelRGBA8</text>
-</g>
-<!-- PixelRGB8&#45;&gt;PixelRGBA8 -->
-<g id="edge4" class="edge"><title>PixelRGB8&#45;&gt;PixelRGBA8</title>
-<path fill="none" stroke="black" d="M274.25,-429.506C295.421,-422.833 
324.934,-412.874 350,-402 351.523,-401.339 381.994,-385.244 407.261,-371.871"/>
-<polygon fill="black" stroke="black" points="409.071,-374.874 416.272,-367.102 
405.796,-368.687 409.071,-374.874"/>
-<text text-anchor="middle" x="393" y="-394.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- PixelRGBF -->
-<g id="node8" class="node"><title>PixelRGBF</title>
-<ellipse fill="none" stroke="black" cx="33" cy="-102" rx="31.7878" ry="18"/>
-<text text-anchor="middle" x="33" y="-100.3" font-family="sans-serif" 
font-size="8.00">PixelRGBF</text>
-</g>
-<!-- PixelRGB8&#45;&gt;PixelRGBF -->
-<g id="edge6" class="edge"><title>PixelRGB8&#45;&gt;PixelRGBF</title>
-<path fill="none" stroke="black" d="M214.594,-434.005C148.276,-424.689 
0,-398.847 0,-354 0,-354 0,-354 0,-186 0,-165.437 8.67323,-143.88 
17.1268,-127.753"/>
-<polygon fill="black" stroke="black" points="20.228,-129.378 22.0115,-118.934 
14.1045,-125.986 20.228,-129.378"/>
-<text text-anchor="middle" x="23" y="-268.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel8 -->
-<g id="node20" class="node"><title>Pixel8</title>
-<ellipse fill="none" stroke="black" cx="308" cy="-270" rx="27" ry="18"/>
-<text text-anchor="middle" x="308" y="-268.3" font-family="sans-serif" 
font-size="8.00">Pixel8</text>
-</g>
-<!-- PixelRGB8&#45;&gt;Pixel8 -->
-<g id="edge60" class="edge"><title>PixelRGB8&#45;&gt;Pixel8</title>
-<path fill="none" stroke="black" d="M214.516,-433.811C149.341,-423.852 
9.37863,-395.049 55,-336 81.2893,-301.973 207.23,-282.163 270.929,-274.163"/>
-<polygon fill="black" stroke="black" points="271.46,-277.624 280.961,-272.936 
270.61,-270.676 271.46,-277.624"/>
-<text text-anchor="middle" x="80" y="-352.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
-</g>
-<!-- PixelCMYK8 -->
-<g id="node28" class="node"><title>PixelCMYK8</title>
-<ellipse fill="none" stroke="black" cx="253" cy="-354" rx="34.8223" ry="18"/>
-<text text-anchor="middle" x="253" y="-352.3" font-family="sans-serif" 
font-size="8.00">PixelCMYK8</text>
-</g>
-<!-- PixelRGB8&#45;&gt;PixelCMYK8 -->
-<g id="edge40" class="edge"><title>PixelRGB8&#45;&gt;PixelCMYK8</title>
-<path fill="none" stroke="black" d="M224.748,-423.894C213.935,-414.831 
204.182,-402.459 210,-390 212.758,-384.095 217.013,-378.817 221.794,-374.241"/>
-<polygon fill="black" stroke="black" points="224.225,-376.77 229.601,-367.64 
219.705,-371.424 224.225,-376.77"/>
-<text text-anchor="middle" x="232" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
-</g>
-<!-- PixelYCbCr8 -->
-<g id="node30" class="node"><title>PixelYCbCr8</title>
-<ellipse fill="none" stroke="black" cx="150" cy="-354" rx="35.9084" ry="18"/>
-<text text-anchor="middle" x="150" y="-352.3" font-family="sans-serif" 
font-size="8.00">PixelYCbCr8</text>
-</g>
-<!-- PixelRGB8&#45;&gt;PixelYCbCr8 -->
-<g id="edge42" class="edge"><title>PixelRGB8&#45;&gt;PixelYCbCr8</title>
-<path fill="none" stroke="black" d="M214.399,-434.415C177.053,-429.451 
118.29,-419.109 105,-402 97.106,-391.837 104.874,-381.324 116.049,-372.736"/>
-<polygon fill="black" stroke="black" points="118.35,-375.401 124.612,-366.856 
114.387,-369.631 118.35,-375.401"/>
-<text text-anchor="middle" x="127" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
-</g>
-<!-- PixelRGB16 -->
-<g id="node2" class="node"><title>PixelRGB16</title>
-<ellipse fill="none" stroke="black" cx="429" cy="-102" rx="34.1425" ry="18"/>
-<text text-anchor="middle" x="429" y="-100.3" font-family="sans-serif" 
font-size="8.00">PixelRGB16</text>
-</g>
-<!-- PixelRGBA16 -->
-<g id="node4" class="node"><title>PixelRGBA16</title>
-<ellipse fill="none" stroke="black" cx="343" cy="-18" rx="37.1721" ry="18"/>
-<text text-anchor="middle" x="343" y="-16.3" font-family="sans-serif" 
font-size="8.00">PixelRGBA16</text>
-</g>
-<!-- PixelRGB16&#45;&gt;PixelRGBA16 -->
-<g id="edge2" class="edge"><title>PixelRGB16&#45;&gt;PixelRGBA16</title>
-<path fill="none" stroke="black" d="M400.098,-92.2134C386.67,-86.4097 
371.409,-77.8363 361,-66 355.909,-60.2106 352.202,-52.8433 349.526,-45.6287"/>
-<polygon fill="black" stroke="black" points="352.846,-44.5187 346.482,-36.0479 
346.174,-46.6383 352.846,-44.5187"/>
-<text text-anchor="middle" x="384" y="-58.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel16 -->
-<g id="node16" class="node"><title>Pixel16</title>
-<ellipse fill="none" stroke="black" cx="296" cy="-186" rx="27" ry="18"/>
-<text text-anchor="middle" x="296" y="-184.3" font-family="sans-serif" 
font-size="8.00">Pixel16</text>
-</g>
-<!-- PixelRGB16&#45;&gt;Pixel16 -->
-<g id="edge58" class="edge"><title>PixelRGB16&#45;&gt;Pixel16</title>
-<path fill="none" stroke="black" d="M424.573,-120.149C421.265,-130.199 
415.765,-142.199 407,-150 386.436,-168.304 356.427,-177.32 332.795,-181.75"/>
-<polygon fill="black" stroke="black" points="332.056,-178.325 322.773,-183.431 
333.214,-185.228 332.056,-178.325"/>
-<text text-anchor="middle" x="441" y="-142.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
-</g>
-<!-- PixelCMYK16 -->
-<g id="node26" class="node"><title>PixelCMYK16</title>
-<ellipse fill="none" stroke="black" cx="553" cy="-18" rx="37.1721" ry="18"/>
-<text text-anchor="middle" x="553" y="-16.3" font-family="sans-serif" 
font-size="8.00">PixelCMYK16</text>
-</g>
-<!-- PixelRGB16&#45;&gt;PixelCMYK16 -->
-<g id="edge38" class="edge"><title>PixelRGB16&#45;&gt;PixelCMYK16</title>
-<path fill="none" stroke="black" d="M451.832,-88.3606C462.615,-81.7841 
475.593,-73.6731 487,-66 499.46,-57.6189 512.915,-47.9503 524.406,-39.4968"/>
-<polygon fill="black" stroke="black" points="526.807,-42.074 532.761,-33.3106 
522.641,-36.4482 526.807,-42.074"/>
-<text text-anchor="middle" x="525" y="-58.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
-</g>
-<!-- PixelRGBA16&#45;&gt;PixelRGB16 -->
-<g id="edge44" class="edge"><title>PixelRGBA16&#45;&gt;PixelRGB16</title>
-<path fill="none" stroke="black" d="M371.789,-29.3863C383.871,-35.2918 
397.329,-43.4955 407,-54 412.378,-59.8422 416.636,-67.2266 419.915,-74.4406"/>
-<polygon fill="black" stroke="black" points="416.794,-76.0584 423.794,-84.0115 
423.282,-73.4291 416.794,-76.0584"/>
-<text text-anchor="middle" x="449" y="-58.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
-</g>
-<!-- PixelRGBA8&#45;&gt;PixelRGB8 -->
-<g id="edge46" class="edge"><title>PixelRGBA8&#45;&gt;PixelRGB8</title>
-<path fill="none" stroke="black" d="M437.029,-372.038C433.845,-382.309 
428.318,-394.571 419,-402 399.083,-417.88 332.208,-428.306 287.678,-433.672"/>
-<polygon fill="black" stroke="black" points="287.239,-430.2 277.712,-434.834 
288.05,-437.153 287.239,-430.2"/>
-<text text-anchor="middle" x="463" y="-394.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
-</g>
-<!-- PixelRGBA8&#45;&gt;Pixel8 -->
-<g id="edge52" class="edge"><title>PixelRGBA8&#45;&gt;Pixel8</title>
-<path fill="none" stroke="black" d="M413.829,-342.599C399.476,-336.131 
381.815,-327.451 367,-318 354.878,-310.267 342.394,-300.428 332.048,-291.673"/>
-<polygon fill="black" stroke="black" points="334.114,-288.833 324.258,-284.946 
329.539,-294.131 334.114,-288.833"/>
-<text text-anchor="middle" x="392" y="-310.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
-</g>
-<!-- PixelF -->
-<g id="node14" class="node"><title>PixelF</title>
-<ellipse fill="none" stroke="black" cx="106" cy="-186" rx="27" ry="18"/>
-<text text-anchor="middle" x="106" y="-184.3" font-family="sans-serif" 
font-size="8.00">PixelF</text>
-</g>
-<!-- PixelRGBF&#45;&gt;PixelF -->
-<g id="edge56" class="edge"><title>PixelRGBF&#45;&gt;PixelF</title>
-<path fill="none" stroke="black" d="M27.0137,-120.147C24.9943,-129.716 
24.4635,-141.251 30,-150 38.9021,-164.067 54.9514,-172.745 70.015,-178.044"/>
-<polygon fill="black" stroke="black" points="69.0981,-181.424 79.6867,-181.06 
71.1825,-174.741 69.0981,-181.424"/>
-<text text-anchor="middle" x="55" y="-142.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
-</g>
-<!-- PixelYA16 -->
-<g id="node9" class="node"><title>PixelYA16</title>
-<ellipse fill="none" stroke="black" cx="259" cy="-102" rx="31.7878" ry="18"/>
-<text text-anchor="middle" x="259" y="-100.3" font-family="sans-serif" 
font-size="8.00">PixelYA16</text>
-</g>
-<!-- PixelYA16&#45;&gt;PixelRGBA16 -->
-<g id="edge8" class="edge"><title>PixelYA16&#45;&gt;PixelRGBA16</title>
-<path fill="none" stroke="black" d="M258.152,-83.5434C258.613,-73.883 
260.687,-62.36 267,-54 275.273,-43.0444 287.722,-35.28 300.163,-29.8405"/>
-<polygon fill="black" stroke="black" points="301.586,-33.0421 309.607,-26.1198 
299.02,-26.5294 301.586,-33.0421"/>
-<text text-anchor="middle" x="290" y="-58.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- PixelYA16&#45;&gt;Pixel16 -->
-<g id="edge48" class="edge"><title>PixelYA16&#45;&gt;Pixel16</title>
-<path fill="none" stroke="black" d="M229.98,-109.854C206.015,-117.845 
177.897,-131.656 191,-150 199.293,-161.611 233.125,-171.835 260.175,-178.391"/>
-<polygon fill="black" stroke="black" points="259.609,-181.853 270.143,-180.72 
261.201,-175.037 259.609,-181.853"/>
-<text text-anchor="middle" x="225" y="-142.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
-</g>
-<!-- PixelYA8 -->
-<g id="node11" class="node"><title>PixelYA8</title>
-<ellipse fill="none" stroke="black" cx="439" cy="-186" rx="28.8445" ry="18"/>
-<text text-anchor="middle" x="439" y="-184.3" font-family="sans-serif" 
font-size="8.00">PixelYA8</text>
-</g>
-<!-- PixelYA8&#45;&gt;PixelRGB8 -->
-<g id="edge12" class="edge"><title>PixelYA8&#45;&gt;PixelRGB8</title>
-<path fill="none" stroke="black" d="M464.762,-194.278C489.627,-203.81 
525.815,-222.121 542,-252 574.918,-312.769 554.613,-358.387 501,-402 
484.752,-415.217 355.671,-428.373 287.639,-434.476"/>
-<polygon fill="black" stroke="black" points="287.321,-430.99 277.669,-435.359 
287.938,-437.963 287.321,-430.99"/>
-<text text-anchor="middle" x="580" y="-310.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- PixelYA8&#45;&gt;PixelRGBA8 -->
-<g id="edge10" class="edge"><title>PixelYA8&#45;&gt;PixelRGBA8</title>
-<path fill="none" stroke="black" d="M460.035,-198.84C467.824,-204.817 
475.781,-212.68 480,-222 497.598,-260.871 496.093,-278.904 479,-318 
476.725,-323.204 473.295,-328.013 469.411,-332.309"/>
-<polygon fill="black" stroke="black" points="466.792,-329.975 462.079,-339.464 
471.681,-334.985 466.792,-329.975"/>
-<text text-anchor="middle" x="515" y="-268.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- PixelYA8&#45;&gt;Pixel8 -->
-<g id="edge50" class="edge"><title>PixelYA8&#45;&gt;Pixel8</title>
-<path fill="none" stroke="black" d="M412.102,-193.018C393.267,-198.789 
368.145,-208.269 349,-222 340.05,-228.419 331.808,-237.196 325.098,-245.49"/>
-<polygon fill="black" stroke="black" points="322.247,-243.456 318.929,-253.518 
327.797,-247.721 322.247,-243.456"/>
-<text text-anchor="middle" x="383" y="-226.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
-</g>
-<!-- PixelYA8&#45;&gt;Pixel8 -->
-<g id="edge62" class="edge"><title>PixelYA8&#45;&gt;Pixel8</title>
-<path fill="none" stroke="black" d="M434.558,-204.131C431.244,-214.175 
425.744,-226.175 417,-234 397.039,-251.864 367.99,-260.893 344.899,-265.441"/>
-<polygon fill="black" stroke="black" points="344.002,-262.045 334.763,-267.23 
345.219,-268.938 344.002,-262.045"/>
-<text text-anchor="middle" x="451" y="-226.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
-</g>
-<!-- PixelF&#45;&gt;PixelRGBF -->
-<g id="edge14" class="edge"><title>PixelF&#45;&gt;PixelRGBF</title>
-<path fill="none" stroke="black" d="M100.45,-168.312C96.8232,-158.653 
91.3784,-146.886 84,-138 78.5966,-131.492 71.7476,-125.606 64.8367,-120.568"/>
-<polygon fill="black" stroke="black" points="66.3898,-117.392 56.1539,-114.657 
62.4504,-123.178 66.3898,-117.392"/>
-<text text-anchor="middle" x="115" y="-142.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel16&#45;&gt;PixelRGB16 -->
-<g id="edge18" class="edge"><title>Pixel16&#45;&gt;PixelRGB16</title>
-<path fill="none" stroke="black" d="M313.43,-172.019C326.239,-162.023 
344.257,-148.532 361,-138 371.689,-131.277 383.756,-124.61 394.725,-118.875"/>
-<polygon fill="black" stroke="black" points="396.336,-121.982 403.628,-114.295 
393.134,-115.757 396.336,-121.982"/>
-<text text-anchor="middle" x="384" y="-142.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel16&#45;&gt;PixelRGBA16 -->
-<g id="edge16" class="edge"><title>Pixel16&#45;&gt;PixelRGBA16</title>
-<path fill="none" stroke="black" d="M305.084,-168.741C307.903,-162.903 
310.835,-156.272 313,-150 325.048,-115.091 333.609,-73.3023 338.424,-46.2333"/>
-<polygon fill="black" stroke="black" points="341.89,-46.732 340.143,-36.2822 
334.992,-45.5405 341.89,-46.732"/>
-<text text-anchor="middle" x="353" y="-100.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel16&#45;&gt;PixelYA16 -->
-<g id="edge20" class="edge"><title>Pixel16&#45;&gt;PixelYA16</title>
-<path fill="none" stroke="black" d="M280.78,-170.7C275.635,-164.701 
270.35,-157.469 267,-150 264.277,-143.93 262.473,-137.052 261.279,-130.438"/>
-<polygon fill="black" stroke="black" points="264.727,-129.827 259.862,-120.415 
257.796,-130.807 264.727,-129.827"/>
-<text text-anchor="middle" x="290" y="-142.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel8&#45;&gt;PixelRGB8 -->
-<g id="edge24" class="edge"><title>Pixel8&#45;&gt;PixelRGB8</title>
-<path fill="none" stroke="black" d="M312.919,-288.095C319.136,-314.953 
326.712,-366.057 306,-402 300.622,-411.332 291.773,-418.518 282.501,-423.926"/>
-<polygon fill="black" stroke="black" points="280.83,-420.85 273.581,-428.577 
284.067,-427.057 280.83,-420.85"/>
-<text text-anchor="middle" x="342" y="-352.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel8&#45;&gt;PixelRGBA8 -->
-<g id="edge22" class="edge"><title>Pixel8&#45;&gt;PixelRGBA8</title>
-<path fill="none" stroke="black" d="M334.939,-272.185C360.073,-275.561 
397.177,-284.15 421,-306 426.855,-311.37 431.048,-318.72 434.03,-326.054"/>
-<polygon fill="black" stroke="black" points="430.836,-327.531 437.387,-335.858 
437.458,-325.263 430.836,-327.531"/>
-<text text-anchor="middle" x="452" y="-310.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel8&#45;&gt;PixelYA8 -->
-<g id="edge26" class="edge"><title>Pixel8&#45;&gt;PixelYA8</title>
-<path fill="none" stroke="black" d="M290.77,-255.865C280.734,-245.919 
271.57,-232.553 280,-222 287.559,-212.538 356.092,-199.635 400.682,-192.122"/>
-<polygon fill="black" stroke="black" points="401.335,-195.562 410.626,-190.469 
400.187,-188.657 401.335,-195.562"/>
-<text text-anchor="middle" x="303" y="-226.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel8&#45;&gt;PixelF -->
-<g id="edge28" class="edge"><title>Pixel8&#45;&gt;PixelF</title>
-<path fill="none" stroke="black" d="M281.145,-267.812C249.741,-264.331 
196.969,-255.554 157,-234 145.577,-227.84 134.814,-218.473 126.146,-209.643"/>
-<polygon fill="black" stroke="black" points="128.492,-207.028 119.104,-202.117 
123.381,-211.81 128.492,-207.028"/>
-<text text-anchor="middle" x="180" y="-226.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- Pixel8&#45;&gt;Pixel16 -->
-<g id="edge30" class="edge"><title>Pixel8&#45;&gt;Pixel16</title>
-<path fill="none" stroke="black" d="M282.206,-263.957C256.398,-257.327 
219.359,-246.018 211,-234 196.025,-212.469 230.216,-199.429 259.604,-192.482"/>
-<polygon fill="black" stroke="black" points="260.687,-195.828 269.71,-190.275 
259.193,-188.989 260.687,-195.828"/>
-<text text-anchor="middle" x="234" y="-226.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
-</g>
-<!-- PixelCMYK16&#45;&gt;PixelRGB16 -->
-<g id="edge32" class="edge"><title>PixelCMYK16&#45;&gt;PixelRGB16</title>
-<path fill="none" stroke="black" d="M564.03,-35.4654C568.707,-45.2873 
571.707,-57.2873 565,-66 553.678,-80.7091 507.858,-90.6423 472.496,-96.2857"/>
-<polygon fill="black" stroke="black" points="471.73,-92.862 462.373,-97.8319 
472.787,-99.7817 471.73,-92.862"/>
-<text text-anchor="middle" x="590" y="-58.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
-</g>
-<!-- PixelCMYK8&#45;&gt;PixelRGB8 -->
-<g id="edge34" class="edge"><title>PixelCMYK8&#45;&gt;PixelRGB8</title>
-<path fill="none" stroke="black" d="M257.173,-372.299C258.645,-381.28 
259.584,-392.241 258,-402 257.535,-404.865 256.875,-407.811 256.1,-410.724"/>
-<polygon fill="black" stroke="black" points="252.737,-409.753 253.143,-420.34 
259.427,-411.811 252.737,-409.753"/>
-<text text-anchor="middle" x="280" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
-</g>
-<!-- PixelYCbCr8&#45;&gt;PixelRGB8 -->
-<g id="edge36" class="edge"><title>PixelYCbCr8&#45;&gt;PixelRGB8</title>
-<path fill="none" stroke="black" d="M149.836,-372.162C150.645,-381.97 
153.174,-393.727 160,-402 171.431,-415.854 189.112,-424.462 205.475,-429.768"/>
-<polygon fill="black" stroke="black" points="204.847,-433.23 215.426,-432.663 
206.802,-426.509 204.847,-433.23"/>
-<text text-anchor="middle" x="182" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
-</g>
-<!-- PixelYCbCr8&#45;&gt;Pixel8 -->
-<g id="edge54" class="edge"><title>PixelYCbCr8&#45;&gt;Pixel8</title>
-<path fill="none" stroke="black" d="M174.688,-340.875C202.411,-326.136 
247.432,-302.201 277.376,-286.281"/>
-<polygon fill="black" stroke="black" points="279.34,-289.201 286.527,-281.416 
276.054,-283.02 279.34,-289.201"/>
-<text text-anchor="middle" x="263" y="-310.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
-</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<!-- Generated by graphviz version 2.22.2 (20090313.1817)
+ -->
+<!-- Title: pixelGraphic Pages: 1 -->
+<svg width="620pt" height="464pt"
+ viewBox="0.00 0.00 620.00 464.00" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 460)">
+<title>pixelGraphic</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-460 617,-460 617,5 
-4,5"/>
+<!-- PixelRGB8 -->
+<g id="node1" class="node"><title>PixelRGB8</title>
+<ellipse fill="none" stroke="black" cx="246" cy="-438" rx="31.7878" ry="18"/>
+<text text-anchor="middle" x="246" y="-436.3" font-family="sans-serif" 
font-size="8.00">PixelRGB8</text>
+</g>
+<!-- PixelRGBA8 -->
+<g id="node6" class="node"><title>PixelRGBA8</title>
+<ellipse fill="none" stroke="black" cx="441" cy="-354" rx="34.8223" ry="18"/>
+<text text-anchor="middle" x="441" y="-352.3" font-family="sans-serif" 
font-size="8.00">PixelRGBA8</text>
+</g>
+<!-- PixelRGB8&#45;&gt;PixelRGBA8 -->
+<g id="edge4" class="edge"><title>PixelRGB8&#45;&gt;PixelRGBA8</title>
+<path fill="none" stroke="black" d="M274.25,-429.506C295.421,-422.833 
324.934,-412.874 350,-402 351.523,-401.339 381.994,-385.244 407.261,-371.871"/>
+<polygon fill="black" stroke="black" points="409.071,-374.874 416.272,-367.102 
405.796,-368.687 409.071,-374.874"/>
+<text text-anchor="middle" x="393" y="-394.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- PixelRGBF -->
+<g id="node8" class="node"><title>PixelRGBF</title>
+<ellipse fill="none" stroke="black" cx="33" cy="-102" rx="31.7878" ry="18"/>
+<text text-anchor="middle" x="33" y="-100.3" font-family="sans-serif" 
font-size="8.00">PixelRGBF</text>
+</g>
+<!-- PixelRGB8&#45;&gt;PixelRGBF -->
+<g id="edge6" class="edge"><title>PixelRGB8&#45;&gt;PixelRGBF</title>
+<path fill="none" stroke="black" d="M214.594,-434.005C148.276,-424.689 
0,-398.847 0,-354 0,-354 0,-354 0,-186 0,-165.437 8.67323,-143.88 
17.1268,-127.753"/>
+<polygon fill="black" stroke="black" points="20.228,-129.378 22.0115,-118.934 
14.1045,-125.986 20.228,-129.378"/>
+<text text-anchor="middle" x="23" y="-268.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel8 -->
+<g id="node20" class="node"><title>Pixel8</title>
+<ellipse fill="none" stroke="black" cx="308" cy="-270" rx="27" ry="18"/>
+<text text-anchor="middle" x="308" y="-268.3" font-family="sans-serif" 
font-size="8.00">Pixel8</text>
+</g>
+<!-- PixelRGB8&#45;&gt;Pixel8 -->
+<g id="edge60" class="edge"><title>PixelRGB8&#45;&gt;Pixel8</title>
+<path fill="none" stroke="black" d="M214.516,-433.811C149.341,-423.852 
9.37863,-395.049 55,-336 81.2893,-301.973 207.23,-282.163 270.929,-274.163"/>
+<polygon fill="black" stroke="black" points="271.46,-277.624 280.961,-272.936 
270.61,-270.676 271.46,-277.624"/>
+<text text-anchor="middle" x="80" y="-352.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
+</g>
+<!-- PixelCMYK8 -->
+<g id="node28" class="node"><title>PixelCMYK8</title>
+<ellipse fill="none" stroke="black" cx="253" cy="-354" rx="34.8223" ry="18"/>
+<text text-anchor="middle" x="253" y="-352.3" font-family="sans-serif" 
font-size="8.00">PixelCMYK8</text>
+</g>
+<!-- PixelRGB8&#45;&gt;PixelCMYK8 -->
+<g id="edge40" class="edge"><title>PixelRGB8&#45;&gt;PixelCMYK8</title>
+<path fill="none" stroke="black" d="M224.748,-423.894C213.935,-414.831 
204.182,-402.459 210,-390 212.758,-384.095 217.013,-378.817 221.794,-374.241"/>
+<polygon fill="black" stroke="black" points="224.225,-376.77 229.601,-367.64 
219.705,-371.424 224.225,-376.77"/>
+<text text-anchor="middle" x="232" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
+</g>
+<!-- PixelYCbCr8 -->
+<g id="node30" class="node"><title>PixelYCbCr8</title>
+<ellipse fill="none" stroke="black" cx="150" cy="-354" rx="35.9084" ry="18"/>
+<text text-anchor="middle" x="150" y="-352.3" font-family="sans-serif" 
font-size="8.00">PixelYCbCr8</text>
+</g>
+<!-- PixelRGB8&#45;&gt;PixelYCbCr8 -->
+<g id="edge42" class="edge"><title>PixelRGB8&#45;&gt;PixelYCbCr8</title>
+<path fill="none" stroke="black" d="M214.399,-434.415C177.053,-429.451 
118.29,-419.109 105,-402 97.106,-391.837 104.874,-381.324 116.049,-372.736"/>
+<polygon fill="black" stroke="black" points="118.35,-375.401 124.612,-366.856 
114.387,-369.631 118.35,-375.401"/>
+<text text-anchor="middle" x="127" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
+</g>
+<!-- PixelRGB16 -->
+<g id="node2" class="node"><title>PixelRGB16</title>
+<ellipse fill="none" stroke="black" cx="429" cy="-102" rx="34.1425" ry="18"/>
+<text text-anchor="middle" x="429" y="-100.3" font-family="sans-serif" 
font-size="8.00">PixelRGB16</text>
+</g>
+<!-- PixelRGBA16 -->
+<g id="node4" class="node"><title>PixelRGBA16</title>
+<ellipse fill="none" stroke="black" cx="343" cy="-18" rx="37.1721" ry="18"/>
+<text text-anchor="middle" x="343" y="-16.3" font-family="sans-serif" 
font-size="8.00">PixelRGBA16</text>
+</g>
+<!-- PixelRGB16&#45;&gt;PixelRGBA16 -->
+<g id="edge2" class="edge"><title>PixelRGB16&#45;&gt;PixelRGBA16</title>
+<path fill="none" stroke="black" d="M400.098,-92.2134C386.67,-86.4097 
371.409,-77.8363 361,-66 355.909,-60.2106 352.202,-52.8433 349.526,-45.6287"/>
+<polygon fill="black" stroke="black" points="352.846,-44.5187 346.482,-36.0479 
346.174,-46.6383 352.846,-44.5187"/>
+<text text-anchor="middle" x="384" y="-58.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel16 -->
+<g id="node16" class="node"><title>Pixel16</title>
+<ellipse fill="none" stroke="black" cx="296" cy="-186" rx="27" ry="18"/>
+<text text-anchor="middle" x="296" y="-184.3" font-family="sans-serif" 
font-size="8.00">Pixel16</text>
+</g>
+<!-- PixelRGB16&#45;&gt;Pixel16 -->
+<g id="edge58" class="edge"><title>PixelRGB16&#45;&gt;Pixel16</title>
+<path fill="none" stroke="black" d="M424.573,-120.149C421.265,-130.199 
415.765,-142.199 407,-150 386.436,-168.304 356.427,-177.32 332.795,-181.75"/>
+<polygon fill="black" stroke="black" points="332.056,-178.325 322.773,-183.431 
333.214,-185.228 332.056,-178.325"/>
+<text text-anchor="middle" x="441" y="-142.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
+</g>
+<!-- PixelCMYK16 -->
+<g id="node26" class="node"><title>PixelCMYK16</title>
+<ellipse fill="none" stroke="black" cx="553" cy="-18" rx="37.1721" ry="18"/>
+<text text-anchor="middle" x="553" y="-16.3" font-family="sans-serif" 
font-size="8.00">PixelCMYK16</text>
+</g>
+<!-- PixelRGB16&#45;&gt;PixelCMYK16 -->
+<g id="edge38" class="edge"><title>PixelRGB16&#45;&gt;PixelCMYK16</title>
+<path fill="none" stroke="black" d="M451.832,-88.3606C462.615,-81.7841 
475.593,-73.6731 487,-66 499.46,-57.6189 512.915,-47.9503 524.406,-39.4968"/>
+<polygon fill="black" stroke="black" points="526.807,-42.074 532.761,-33.3106 
522.641,-36.4482 526.807,-42.074"/>
+<text text-anchor="middle" x="525" y="-58.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
+</g>
+<!-- PixelRGBA16&#45;&gt;PixelRGB16 -->
+<g id="edge44" class="edge"><title>PixelRGBA16&#45;&gt;PixelRGB16</title>
+<path fill="none" stroke="black" d="M371.789,-29.3863C383.871,-35.2918 
397.329,-43.4955 407,-54 412.378,-59.8422 416.636,-67.2266 419.915,-74.4406"/>
+<polygon fill="black" stroke="black" points="416.794,-76.0584 423.794,-84.0115 
423.282,-73.4291 416.794,-76.0584"/>
+<text text-anchor="middle" x="449" y="-58.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
+</g>
+<!-- PixelRGBA8&#45;&gt;PixelRGB8 -->
+<g id="edge46" class="edge"><title>PixelRGBA8&#45;&gt;PixelRGB8</title>
+<path fill="none" stroke="black" d="M437.029,-372.038C433.845,-382.309 
428.318,-394.571 419,-402 399.083,-417.88 332.208,-428.306 287.678,-433.672"/>
+<polygon fill="black" stroke="black" points="287.239,-430.2 277.712,-434.834 
288.05,-437.153 287.239,-430.2"/>
+<text text-anchor="middle" x="463" y="-394.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
+</g>
+<!-- PixelRGBA8&#45;&gt;Pixel8 -->
+<g id="edge52" class="edge"><title>PixelRGBA8&#45;&gt;Pixel8</title>
+<path fill="none" stroke="black" d="M413.829,-342.599C399.476,-336.131 
381.815,-327.451 367,-318 354.878,-310.267 342.394,-300.428 332.048,-291.673"/>
+<polygon fill="black" stroke="black" points="334.114,-288.833 324.258,-284.946 
329.539,-294.131 334.114,-288.833"/>
+<text text-anchor="middle" x="392" y="-310.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
+</g>
+<!-- PixelF -->
+<g id="node14" class="node"><title>PixelF</title>
+<ellipse fill="none" stroke="black" cx="106" cy="-186" rx="27" ry="18"/>
+<text text-anchor="middle" x="106" y="-184.3" font-family="sans-serif" 
font-size="8.00">PixelF</text>
+</g>
+<!-- PixelRGBF&#45;&gt;PixelF -->
+<g id="edge56" class="edge"><title>PixelRGBF&#45;&gt;PixelF</title>
+<path fill="none" stroke="black" d="M27.0137,-120.147C24.9943,-129.716 
24.4635,-141.251 30,-150 38.9021,-164.067 54.9514,-172.745 70.015,-178.044"/>
+<polygon fill="black" stroke="black" points="69.0981,-181.424 79.6867,-181.06 
71.1825,-174.741 69.0981,-181.424"/>
+<text text-anchor="middle" x="55" y="-142.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
+</g>
+<!-- PixelYA16 -->
+<g id="node9" class="node"><title>PixelYA16</title>
+<ellipse fill="none" stroke="black" cx="259" cy="-102" rx="31.7878" ry="18"/>
+<text text-anchor="middle" x="259" y="-100.3" font-family="sans-serif" 
font-size="8.00">PixelYA16</text>
+</g>
+<!-- PixelYA16&#45;&gt;PixelRGBA16 -->
+<g id="edge8" class="edge"><title>PixelYA16&#45;&gt;PixelRGBA16</title>
+<path fill="none" stroke="black" d="M258.152,-83.5434C258.613,-73.883 
260.687,-62.36 267,-54 275.273,-43.0444 287.722,-35.28 300.163,-29.8405"/>
+<polygon fill="black" stroke="black" points="301.586,-33.0421 309.607,-26.1198 
299.02,-26.5294 301.586,-33.0421"/>
+<text text-anchor="middle" x="290" y="-58.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- PixelYA16&#45;&gt;Pixel16 -->
+<g id="edge48" class="edge"><title>PixelYA16&#45;&gt;Pixel16</title>
+<path fill="none" stroke="black" d="M229.98,-109.854C206.015,-117.845 
177.897,-131.656 191,-150 199.293,-161.611 233.125,-171.835 260.175,-178.391"/>
+<polygon fill="black" stroke="black" points="259.609,-181.853 270.143,-180.72 
261.201,-175.037 259.609,-181.853"/>
+<text text-anchor="middle" x="225" y="-142.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
+</g>
+<!-- PixelYA8 -->
+<g id="node11" class="node"><title>PixelYA8</title>
+<ellipse fill="none" stroke="black" cx="439" cy="-186" rx="28.8445" ry="18"/>
+<text text-anchor="middle" x="439" y="-184.3" font-family="sans-serif" 
font-size="8.00">PixelYA8</text>
+</g>
+<!-- PixelYA8&#45;&gt;PixelRGB8 -->
+<g id="edge12" class="edge"><title>PixelYA8&#45;&gt;PixelRGB8</title>
+<path fill="none" stroke="black" d="M464.762,-194.278C489.627,-203.81 
525.815,-222.121 542,-252 574.918,-312.769 554.613,-358.387 501,-402 
484.752,-415.217 355.671,-428.373 287.639,-434.476"/>
+<polygon fill="black" stroke="black" points="287.321,-430.99 277.669,-435.359 
287.938,-437.963 287.321,-430.99"/>
+<text text-anchor="middle" x="580" y="-310.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- PixelYA8&#45;&gt;PixelRGBA8 -->
+<g id="edge10" class="edge"><title>PixelYA8&#45;&gt;PixelRGBA8</title>
+<path fill="none" stroke="black" d="M460.035,-198.84C467.824,-204.817 
475.781,-212.68 480,-222 497.598,-260.871 496.093,-278.904 479,-318 
476.725,-323.204 473.295,-328.013 469.411,-332.309"/>
+<polygon fill="black" stroke="black" points="466.792,-329.975 462.079,-339.464 
471.681,-334.985 466.792,-329.975"/>
+<text text-anchor="middle" x="515" y="-268.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- PixelYA8&#45;&gt;Pixel8 -->
+<g id="edge50" class="edge"><title>PixelYA8&#45;&gt;Pixel8</title>
+<path fill="none" stroke="black" d="M412.102,-193.018C393.267,-198.789 
368.145,-208.269 349,-222 340.05,-228.419 331.808,-237.196 325.098,-245.49"/>
+<polygon fill="black" stroke="black" points="322.247,-243.456 318.929,-253.518 
327.797,-247.721 322.247,-243.456"/>
+<text text-anchor="middle" x="383" y="-226.3" font-family="sans-serif" 
font-size="8.00">dropTransparency</text>
+</g>
+<!-- PixelYA8&#45;&gt;Pixel8 -->
+<g id="edge62" class="edge"><title>PixelYA8&#45;&gt;Pixel8</title>
+<path fill="none" stroke="black" d="M434.558,-204.131C431.244,-214.175 
425.744,-226.175 417,-234 397.039,-251.864 367.99,-260.893 344.899,-265.441"/>
+<polygon fill="black" stroke="black" points="344.002,-262.045 334.763,-267.23 
345.219,-268.938 344.002,-262.045"/>
+<text text-anchor="middle" x="451" y="-226.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
+</g>
+<!-- PixelF&#45;&gt;PixelRGBF -->
+<g id="edge14" class="edge"><title>PixelF&#45;&gt;PixelRGBF</title>
+<path fill="none" stroke="black" d="M100.45,-168.312C96.8232,-158.653 
91.3784,-146.886 84,-138 78.5966,-131.492 71.7476,-125.606 64.8367,-120.568"/>
+<polygon fill="black" stroke="black" points="66.3898,-117.392 56.1539,-114.657 
62.4504,-123.178 66.3898,-117.392"/>
+<text text-anchor="middle" x="115" y="-142.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel16&#45;&gt;PixelRGB16 -->
+<g id="edge18" class="edge"><title>Pixel16&#45;&gt;PixelRGB16</title>
+<path fill="none" stroke="black" d="M313.43,-172.019C326.239,-162.023 
344.257,-148.532 361,-138 371.689,-131.277 383.756,-124.61 394.725,-118.875"/>
+<polygon fill="black" stroke="black" points="396.336,-121.982 403.628,-114.295 
393.134,-115.757 396.336,-121.982"/>
+<text text-anchor="middle" x="384" y="-142.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel16&#45;&gt;PixelRGBA16 -->
+<g id="edge16" class="edge"><title>Pixel16&#45;&gt;PixelRGBA16</title>
+<path fill="none" stroke="black" d="M305.084,-168.741C307.903,-162.903 
310.835,-156.272 313,-150 325.048,-115.091 333.609,-73.3023 338.424,-46.2333"/>
+<polygon fill="black" stroke="black" points="341.89,-46.732 340.143,-36.2822 
334.992,-45.5405 341.89,-46.732"/>
+<text text-anchor="middle" x="353" y="-100.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel16&#45;&gt;PixelYA16 -->
+<g id="edge20" class="edge"><title>Pixel16&#45;&gt;PixelYA16</title>
+<path fill="none" stroke="black" d="M280.78,-170.7C275.635,-164.701 
270.35,-157.469 267,-150 264.277,-143.93 262.473,-137.052 261.279,-130.438"/>
+<polygon fill="black" stroke="black" points="264.727,-129.827 259.862,-120.415 
257.796,-130.807 264.727,-129.827"/>
+<text text-anchor="middle" x="290" y="-142.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel8&#45;&gt;PixelRGB8 -->
+<g id="edge24" class="edge"><title>Pixel8&#45;&gt;PixelRGB8</title>
+<path fill="none" stroke="black" d="M312.919,-288.095C319.136,-314.953 
326.712,-366.057 306,-402 300.622,-411.332 291.773,-418.518 282.501,-423.926"/>
+<polygon fill="black" stroke="black" points="280.83,-420.85 273.581,-428.577 
284.067,-427.057 280.83,-420.85"/>
+<text text-anchor="middle" x="342" y="-352.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel8&#45;&gt;PixelRGBA8 -->
+<g id="edge22" class="edge"><title>Pixel8&#45;&gt;PixelRGBA8</title>
+<path fill="none" stroke="black" d="M334.939,-272.185C360.073,-275.561 
397.177,-284.15 421,-306 426.855,-311.37 431.048,-318.72 434.03,-326.054"/>
+<polygon fill="black" stroke="black" points="430.836,-327.531 437.387,-335.858 
437.458,-325.263 430.836,-327.531"/>
+<text text-anchor="middle" x="452" y="-310.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel8&#45;&gt;PixelYA8 -->
+<g id="edge26" class="edge"><title>Pixel8&#45;&gt;PixelYA8</title>
+<path fill="none" stroke="black" d="M290.77,-255.865C280.734,-245.919 
271.57,-232.553 280,-222 287.559,-212.538 356.092,-199.635 400.682,-192.122"/>
+<polygon fill="black" stroke="black" points="401.335,-195.562 410.626,-190.469 
400.187,-188.657 401.335,-195.562"/>
+<text text-anchor="middle" x="303" y="-226.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel8&#45;&gt;PixelF -->
+<g id="edge28" class="edge"><title>Pixel8&#45;&gt;PixelF</title>
+<path fill="none" stroke="black" d="M281.145,-267.812C249.741,-264.331 
196.969,-255.554 157,-234 145.577,-227.84 134.814,-218.473 126.146,-209.643"/>
+<polygon fill="black" stroke="black" points="128.492,-207.028 119.104,-202.117 
123.381,-211.81 128.492,-207.028"/>
+<text text-anchor="middle" x="180" y="-226.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- Pixel8&#45;&gt;Pixel16 -->
+<g id="edge30" class="edge"><title>Pixel8&#45;&gt;Pixel16</title>
+<path fill="none" stroke="black" d="M282.206,-263.957C256.398,-257.327 
219.359,-246.018 211,-234 196.025,-212.469 230.216,-199.429 259.604,-192.482"/>
+<polygon fill="black" stroke="black" points="260.687,-195.828 269.71,-190.275 
259.193,-188.989 260.687,-195.828"/>
+<text text-anchor="middle" x="234" y="-226.3" font-family="sans-serif" 
font-size="8.00">promotePixel</text>
+</g>
+<!-- PixelCMYK16&#45;&gt;PixelRGB16 -->
+<g id="edge32" class="edge"><title>PixelCMYK16&#45;&gt;PixelRGB16</title>
+<path fill="none" stroke="black" d="M564.03,-35.4654C568.707,-45.2873 
571.707,-57.2873 565,-66 553.678,-80.7091 507.858,-90.6423 472.496,-96.2857"/>
+<polygon fill="black" stroke="black" points="471.73,-92.862 462.373,-97.8319 
472.787,-99.7817 471.73,-92.862"/>
+<text text-anchor="middle" x="590" y="-58.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
+</g>
+<!-- PixelCMYK8&#45;&gt;PixelRGB8 -->
+<g id="edge34" class="edge"><title>PixelCMYK8&#45;&gt;PixelRGB8</title>
+<path fill="none" stroke="black" d="M257.173,-372.299C258.645,-381.28 
259.584,-392.241 258,-402 257.535,-404.865 256.875,-407.811 256.1,-410.724"/>
+<polygon fill="black" stroke="black" points="252.737,-409.753 253.143,-420.34 
259.427,-411.811 252.737,-409.753"/>
+<text text-anchor="middle" x="280" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
+</g>
+<!-- PixelYCbCr8&#45;&gt;PixelRGB8 -->
+<g id="edge36" class="edge"><title>PixelYCbCr8&#45;&gt;PixelRGB8</title>
+<path fill="none" stroke="black" d="M149.836,-372.162C150.645,-381.97 
153.174,-393.727 160,-402 171.431,-415.854 189.112,-424.462 205.475,-429.768"/>
+<polygon fill="black" stroke="black" points="204.847,-433.23 215.426,-432.663 
206.802,-426.509 204.847,-433.23"/>
+<text text-anchor="middle" x="182" y="-394.3" font-family="sans-serif" 
font-size="8.00">convertPixel</text>
+</g>
+<!-- PixelYCbCr8&#45;&gt;Pixel8 -->
+<g id="edge54" class="edge"><title>PixelYCbCr8&#45;&gt;Pixel8</title>
+<path fill="none" stroke="black" d="M174.688,-340.875C202.411,-326.136 
247.432,-302.201 277.376,-286.281"/>
+<polygon fill="black" stroke="black" points="279.34,-289.201 286.527,-281.416 
276.054,-283.02 279.34,-289.201"/>
+<text text-anchor="middle" x="263" y="-310.3" font-family="sans-serif" 
font-size="8.00">computeLuma</text>
+</g>
+</g>
+</svg>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/src/Codec/Picture/ColorQuant.hs 
new/JuicyPixels-3.3.5/src/Codec/Picture/ColorQuant.hs
--- old/JuicyPixels-3.3.4/src/Codec/Picture/ColorQuant.hs       2019-06-19 
21:11:57.000000000 +0200
+++ new/JuicyPixels-3.3.5/src/Codec/Picture/ColorQuant.hs       2020-02-28 
09:16:46.000000000 +0100
@@ -10,6 +10,7 @@
 -- with its palette.
 module Codec.Picture.ColorQuant
     ( palettize
+    , palettizeWithAlpha
     , defaultPaletteOptions
     , PaletteCreationMethod(..)
     , PaletteOptions( .. )
@@ -32,6 +33,7 @@
 import qualified Data.Vector.Storable as VS
 
 import           Codec.Picture.Types
+import           Codec.Picture.Gif (GifFrame(..), GifDisposalMethod, GifDelay)
 
 -------------------------------------------------------------------------------
 ----            Palette Creation and Dithering
@@ -71,7 +73,54 @@
     , paletteColorCount     = 256
     }
 
--- | Reduces an image to a color palette according to `PaletteOpts` and
+-- | Changes all pixels with alpha = 0 to black
+-- converting image to RGB (from RGBA) in meantime
+alphaToBlack :: Image PixelRGBA8 -> Image PixelRGB8
+alphaToBlack = pixelMap f
+  where f (PixelRGBA8 r g b a) =
+          if a == 0 then PixelRGB8 0 0 0
+          else PixelRGB8 r g b
+
+-- | Using second image as a stencil, changes palette index to the transparent
+alphaTo255 :: Image Pixel8 -> Image PixelRGBA8 -> Pixel8 -> Image Pixel8
+alphaTo255 img1 img2 transparentIndex = generateImage f (imageWidth img1) 
(imageHeight img2)
+  where f x y =
+          if a == 0 then transparentIndex
+          else v
+          where v = pixelAt img1 x y
+                PixelRGBA8 _ _ _ a = pixelAt img2 x y
+
+-- | Converts RGBA image to the array of GifFame's to use in 
encodeComplexGifImage
+palettizeWithAlpha :: [(GifDelay, Image PixelRGBA8)] -> GifDisposalMethod -> 
[GifFrame]
+palettizeWithAlpha [] _ = []
+palettizeWithAlpha (x:xs) dispose =
+  GifFrame
+    0 -- Offset X
+    0 -- Offset Y 
+    (Just $ palet)
+    (Just $ transparentIndex)
+    delay
+    dispose
+    (alphaTo255 pixels i (fromIntegral transparentIndex))
+  : palettizeWithAlpha xs dispose
+  where (delay, i) = x
+        img = alphaToBlack i
+        (palet, pixels) =
+          if isBelow
+            then (vecToPalette (belowPaletteVec `V.snoc` PixelRGB8 0 0 0), 
pixelMap belowPaletteIndex img)
+            else (vecToPalette (genPaletteVec   `V.snoc` PixelRGB8 0 0 0), 
pixelMap genPaletteIndex img)
+
+        (belowPalette, isBelow) = isColorCountBelow 255 img
+        belowPaletteVec = V.fromList $ Set.toList belowPalette
+        belowPaletteIndex p = nearestColorIdx p belowPaletteVec
+
+        cs = Set.toList . clusters 255 $ img
+        genPaletteVec = mkPaletteVec cs
+        genPaletteIndex p = nearestColorIdx p genPaletteVec
+
+        transparentIndex = length $ if isBelow then belowPaletteVec else 
genPaletteVec
+
+-- | Reduces an image to a color palette according to `PaletteOptions` and
 --   returns the /indices image/ along with its `Palette`.
 palettize :: PaletteOptions -> Image PixelRGB8 -> (Image Pixel8, Palette)
 palettize opts@PaletteOptions { paletteCreationMethod = method } =
@@ -100,7 +149,7 @@
     cs =  Set.toList . clusters maxColorCount $ img
     dImg = pixelMapXY dither img
 
--- | A naive one pass Color Quantiation algorithm - Uniform Quantization.
+-- | A naive one pass Color Quantization algorithm - Uniform Quantization.
 -- Simply take the most significant bits. The maxCols parameter is rounded
 -- down to the nearest power of 2, and the bits are divided among the three
 -- color channels with priority order green, red, blue. Returns an
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/src/Codec/Picture/ConvGraph.hs 
new/JuicyPixels-3.3.5/src/Codec/Picture/ConvGraph.hs
--- old/JuicyPixels-3.3.4/src/Codec/Picture/ConvGraph.hs        2016-09-04 
14:18:57.000000000 +0200
+++ new/JuicyPixels-3.3.5/src/Codec/Picture/ConvGraph.hs        2018-08-14 
13:07:59.000000000 +0200
@@ -1,10 +1,10 @@
--- $graph
---
--- The following graph describe the differents way to convert between pixel 
types,
---
--- * Nodes describe pixel type
---
--- * Arrows describe functions
---
--- <<docimages/pixelgraph.svg>>
---
+-- $graph
+--
+-- The following graph describe the differents way to convert between pixel 
types,
+--
+-- * Nodes describe pixel type
+--
+-- * Arrows describe functions
+--
+-- <<docimages/pixelgraph.svg>>
+--
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/JuicyPixels-3.3.4/src/Codec/Picture/InternalHelper.hs 
new/JuicyPixels-3.3.5/src/Codec/Picture/InternalHelper.hs
--- old/JuicyPixels-3.3.4/src/Codec/Picture/InternalHelper.hs   2016-09-04 
14:18:57.000000000 +0200
+++ new/JuicyPixels-3.3.5/src/Codec/Picture/InternalHelper.hs   2018-08-14 
13:07:59.000000000 +0200
@@ -1,51 +1,51 @@
-{-# LANGUAGE CPP #-}
-module Codec.Picture.InternalHelper ( runGet
-                                    , runGetStrict
-                                    , decode
-                                    , getRemainingBytes
-                                    , getRemainingLazyBytes ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-import Data.Binary( Binary( get ) )
-import Data.Binary.Get( Get
-                      , getRemainingLazyByteString
-                      )
-import qualified Data.Binary.Get as G
-
-#if MIN_VERSION_binary(0,6,4)
-#else
-import Control.Applicative( (<$>) )
-import qualified Control.Exception as E
--- I feel so dirty. :(
-import System.IO.Unsafe( unsafePerformIO )
-#endif
-
-decode :: (Binary a) => B.ByteString -> Either String a
-decode = runGetStrict get
-
-runGet :: Get a -> L.ByteString -> Either String a
-#if MIN_VERSION_binary(0,6,4)
-runGet act = unpack . G.runGetOrFail act
-    where unpack (Left (_, _, str)) = Left str
-          unpack (Right (_, _, element)) = Right element
-#else
-runGet act str = unsafePerformIO $ E.catch
-    (Right <$> E.evaluate (G.runGet act str))
-    (\msg -> return . Left $ show (msg :: E.SomeException))
-#endif
-
-runGetStrict :: Get a -> B.ByteString -> Either String a
-runGetStrict act buffer = runGet act $ L.fromChunks [buffer]
-
-getRemainingBytes :: Get B.ByteString
-getRemainingBytes = do
-    rest <- getRemainingLazyByteString 
-    return $ case L.toChunks rest of
-        [] -> B.empty
-        [a] -> a
-        lst -> B.concat lst
-
-getRemainingLazyBytes :: Get L.ByteString
-getRemainingLazyBytes = getRemainingLazyByteString 
-
+{-# LANGUAGE CPP #-}
+module Codec.Picture.InternalHelper ( runGet
+                                    , runGetStrict
+                                    , decode
+                                    , getRemainingBytes
+                                    , getRemainingLazyBytes ) where
+
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as L
+import Data.Binary( Binary( get ) )
+import Data.Binary.Get( Get
+                      , getRemainingLazyByteString
+                      )
+import qualified Data.Binary.Get as G
+
+#if MIN_VERSION_binary(0,6,4)
+#else
+import Control.Applicative( (<$>) )
+import qualified Control.Exception as E
+-- I feel so dirty. :(
+import System.IO.Unsafe( unsafePerformIO )
+#endif
+
+decode :: (Binary a) => B.ByteString -> Either String a
+decode = runGetStrict get
+
+runGet :: Get a -> L.ByteString -> Either String a
+#if MIN_VERSION_binary(0,6,4)
+runGet act = unpack . G.runGetOrFail act
+    where unpack (Left (_, _, str)) = Left str
+          unpack (Right (_, _, element)) = Right element
+#else
+runGet act str = unsafePerformIO $ E.catch
+    (Right <$> E.evaluate (G.runGet act str))
+    (\msg -> return . Left $ show (msg :: E.SomeException))
+#endif
+
+runGetStrict :: Get a -> B.ByteString -> Either String a
+runGetStrict act buffer = runGet act $ L.fromChunks [buffer]
+
+getRemainingBytes :: Get B.ByteString
+getRemainingBytes = do
+    rest <- getRemainingLazyByteString 
+    return $ case L.toChunks rest of
+        [] -> B.empty
+        [a] -> a
+        lst -> B.concat lst
+
+getRemainingLazyBytes :: Get L.ByteString
+getRemainingLazyBytes = getRemainingLazyByteString 
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/src/Codec/Picture/Types.hs 
new/JuicyPixels-3.3.5/src/Codec/Picture/Types.hs
--- old/JuicyPixels-3.3.4/src/Codec/Picture/Types.hs    2019-10-02 
21:17:11.000000000 +0200
+++ new/JuicyPixels-3.3.5/src/Codec/Picture/Types.hs    2020-02-28 
09:16:46.000000000 +0100
@@ -405,7 +405,7 @@
     deriving (Eq, Typeable)
 
 -- | Type used to expose a palette extracted during reading.
--- Use palettedAsImage to convert it to a palette usable for
+-- Use `palettedAsImage` to convert it to a palette usable for
 -- writing.
 data Palette' px = Palette'
   { -- | Number of element in pixels.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/JuicyPixels-3.3.4/src/Codec/Picture/VectorByteConversion.hs 
new/JuicyPixels-3.3.5/src/Codec/Picture/VectorByteConversion.hs
--- old/JuicyPixels-3.3.4/src/Codec/Picture/VectorByteConversion.hs     
2016-09-04 14:18:57.000000000 +0200
+++ new/JuicyPixels-3.3.5/src/Codec/Picture/VectorByteConversion.hs     
2018-08-14 13:07:59.000000000 +0200
@@ -1,45 +1,45 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE CPP #-}
-module Codec.Picture.VectorByteConversion( blitVector
-                                         , toByteString
-                                         , imageFromUnsafePtr ) where
-
-import Data.Word( Word8 )
-import Data.Vector.Storable( Vector, unsafeToForeignPtr, unsafeFromForeignPtr0 
)
-import Foreign.Storable( Storable, sizeOf )
-
-#if !MIN_VERSION_base(4,8,0)
-import Foreign.ForeignPtr.Safe( ForeignPtr, castForeignPtr )
-#else
-import Foreign.ForeignPtr( ForeignPtr, castForeignPtr )
-#endif
-
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Internal as S
-
-import Codec.Picture.Types
-
-blitVector :: Vector Word8 -> Int -> Int -> B.ByteString
-blitVector vec atIndex = S.PS ptr (offset + atIndex)
-  where (ptr, offset, _length) = unsafeToForeignPtr vec
-
-toByteString :: forall a. (Storable a) => Vector a -> B.ByteString
-toByteString vec = S.PS (castForeignPtr ptr) offset (len * size)
-  where (ptr, offset, len) = unsafeToForeignPtr vec
-        size = sizeOf (undefined :: a)
-
--- | Import a image from an unsafe pointer
--- The pointer must have a size of width * height * componentCount px
-imageFromUnsafePtr :: forall px
-                    . (Pixel px, (PixelBaseComponent px) ~ Word8)
-                   => Int -- ^ Width in pixels
-                   -> Int -- ^ Height in pixels
-                   -> ForeignPtr Word8 -- ^ Pointer to the raw data
-                   -> Image px
-imageFromUnsafePtr width height ptr =
-    Image width height $ unsafeFromForeignPtr0 ptr size
-      where compCount = componentCount (undefined :: px)
-            size = width * height * compCount
-
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE CPP #-}
+module Codec.Picture.VectorByteConversion( blitVector
+                                         , toByteString
+                                         , imageFromUnsafePtr ) where
+
+import Data.Word( Word8 )
+import Data.Vector.Storable( Vector, unsafeToForeignPtr, unsafeFromForeignPtr0 
)
+import Foreign.Storable( Storable, sizeOf )
+
+#if !MIN_VERSION_base(4,8,0)
+import Foreign.ForeignPtr.Safe( ForeignPtr, castForeignPtr )
+#else
+import Foreign.ForeignPtr( ForeignPtr, castForeignPtr )
+#endif
+
+
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Internal as S
+
+import Codec.Picture.Types
+
+blitVector :: Vector Word8 -> Int -> Int -> B.ByteString
+blitVector vec atIndex = S.PS ptr (offset + atIndex)
+  where (ptr, offset, _length) = unsafeToForeignPtr vec
+
+toByteString :: forall a. (Storable a) => Vector a -> B.ByteString
+toByteString vec = S.PS (castForeignPtr ptr) offset (len * size)
+  where (ptr, offset, len) = unsafeToForeignPtr vec
+        size = sizeOf (undefined :: a)
+
+-- | Import a image from an unsafe pointer
+-- The pointer must have a size of width * height * componentCount px
+imageFromUnsafePtr :: forall px
+                    . (Pixel px, (PixelBaseComponent px) ~ Word8)
+                   => Int -- ^ Width in pixels
+                   -> Int -- ^ Height in pixels
+                   -> ForeignPtr Word8 -- ^ Pointer to the raw data
+                   -> Image px
+imageFromUnsafePtr width height ptr =
+    Image width height $ unsafeFromForeignPtr0 ptr size
+      where compCount = componentCount (undefined :: px)
+            size = width * height * compCount
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/JuicyPixels-3.3.4/src/Codec/Picture.hs 
new/JuicyPixels-3.3.5/src/Codec/Picture.hs
--- old/JuicyPixels-3.3.4/src/Codec/Picture.hs  2019-10-02 21:17:11.000000000 
+0200
+++ new/JuicyPixels-3.3.5/src/Codec/Picture.hs  2020-02-28 09:16:46.000000000 
+0100
@@ -129,6 +129,7 @@
                      -- $graph
                      , Pixel8
                      , Pixel16
+                     , Pixel32
                      , PixelF
 
                      , PixelYA8( .. )


Reply via email to