diff --git a/#Test/BlitzBasicLauncher.pdb b/#Test/BlitzBasicLauncher.pdb new file mode 100644 index 0000000..b42a95e Binary files /dev/null and b/#Test/BlitzBasicLauncher.pdb differ diff --git a/_release/samples/zenith/scare/models/pistol/Sav7115.TMP b/#Test/BlitzNextTest.txt similarity index 100% rename from _release/samples/zenith/scare/models/pistol/Sav7115.TMP rename to #Test/BlitzNextTest.txt diff --git a/_release/Games/TunnelRun/Highs/Highs.Hsr b/#Test/Games/TunnelRun/Highs/Highs.Hsr similarity index 100% rename from _release/Games/TunnelRun/Highs/Highs.Hsr rename to #Test/Games/TunnelRun/Highs/Highs.Hsr diff --git a/_release/Games/TunnelRun/Media/BMod.3DS b/#Test/Games/TunnelRun/Media/BMod.3DS similarity index 100% rename from _release/Games/TunnelRun/Media/BMod.3DS rename to #Test/Games/TunnelRun/Media/BMod.3DS diff --git a/_release/Games/TunnelRun/Media/asteroid.3ds b/#Test/Games/TunnelRun/Media/asteroid.3ds similarity index 100% rename from _release/Games/TunnelRun/Media/asteroid.3ds rename to #Test/Games/TunnelRun/Media/asteroid.3ds diff --git a/_release/Games/TunnelRun/Media/blockade.3DS b/#Test/Games/TunnelRun/Media/blockade.3DS similarity index 100% rename from _release/Games/TunnelRun/Media/blockade.3DS rename to #Test/Games/TunnelRun/Media/blockade.3DS diff --git a/_release/Games/TunnelRun/Media/boom.wav b/#Test/Games/TunnelRun/Media/boom.wav similarity index 100% rename from _release/Games/TunnelRun/Media/boom.wav rename to #Test/Games/TunnelRun/Media/boom.wav diff --git a/_release/Games/TunnelRun/Media/claw.3DS b/#Test/Games/TunnelRun/Media/claw.3DS similarity index 100% rename from _release/Games/TunnelRun/Media/claw.3DS rename to #Test/Games/TunnelRun/Media/claw.3DS diff --git a/_release/Games/TunnelRun/Media/energybar.bmp b/#Test/Games/TunnelRun/Media/energybar.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/energybar.bmp rename to #Test/Games/TunnelRun/Media/energybar.bmp diff --git a/_release/Games/TunnelRun/Media/floor1.bmp b/#Test/Games/TunnelRun/Media/floor1.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/floor1.bmp rename to #Test/Games/TunnelRun/Media/floor1.bmp diff --git a/_release/Games/TunnelRun/Media/go.bmp b/#Test/Games/TunnelRun/Media/go.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/go.bmp rename to #Test/Games/TunnelRun/Media/go.bmp diff --git a/_release/Games/TunnelRun/Media/hfighter.3ds b/#Test/Games/TunnelRun/Media/hfighter.3ds similarity index 100% rename from _release/Games/TunnelRun/Media/hfighter.3ds rename to #Test/Games/TunnelRun/Media/hfighter.3ds diff --git a/_release/Games/TunnelRun/Media/lives.bmp b/#Test/Games/TunnelRun/Media/lives.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/lives.bmp rename to #Test/Games/TunnelRun/Media/lives.bmp diff --git a/_release/Games/TunnelRun/Media/missile1.3ds b/#Test/Games/TunnelRun/Media/missile1.3ds similarity index 100% rename from _release/Games/TunnelRun/Media/missile1.3ds rename to #Test/Games/TunnelRun/Media/missile1.3ds diff --git a/_release/Games/TunnelRun/Media/mouse.bmp b/#Test/Games/TunnelRun/Media/mouse.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/mouse.bmp rename to #Test/Games/TunnelRun/Media/mouse.bmp diff --git a/_release/Games/TunnelRun/Media/shoot.wav b/#Test/Games/TunnelRun/Media/shoot.wav similarity index 100% rename from _release/Games/TunnelRun/Media/shoot.wav rename to #Test/Games/TunnelRun/Media/shoot.wav diff --git a/_release/Games/TunnelRun/Media/shot1.bmp b/#Test/Games/TunnelRun/Media/shot1.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/shot1.bmp rename to #Test/Games/TunnelRun/Media/shot1.bmp diff --git a/_release/Games/TunnelRun/Media/smoke1.bmp b/#Test/Games/TunnelRun/Media/smoke1.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/smoke1.bmp rename to #Test/Games/TunnelRun/Media/smoke1.bmp diff --git a/_release/Games/TunnelRun/Media/smoke2.bmp b/#Test/Games/TunnelRun/Media/smoke2.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/smoke2.bmp rename to #Test/Games/TunnelRun/Media/smoke2.bmp diff --git a/_release/Games/TunnelRun/Media/smoke3.bmp b/#Test/Games/TunnelRun/Media/smoke3.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/smoke3.bmp rename to #Test/Games/TunnelRun/Media/smoke3.bmp diff --git a/_release/Games/TunnelRun/Media/smoke4.bmp b/#Test/Games/TunnelRun/Media/smoke4.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/smoke4.bmp rename to #Test/Games/TunnelRun/Media/smoke4.bmp diff --git a/_release/Games/TunnelRun/Media/stone04.bmp b/#Test/Games/TunnelRun/Media/stone04.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/stone04.bmp rename to #Test/Games/TunnelRun/Media/stone04.bmp diff --git a/_release/Games/TunnelRun/Media/target.bmp b/#Test/Games/TunnelRun/Media/target.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/target.bmp rename to #Test/Games/TunnelRun/Media/target.bmp diff --git a/_release/Games/TunnelRun/Media/tex0.bmp b/#Test/Games/TunnelRun/Media/tex0.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/tex0.bmp rename to #Test/Games/TunnelRun/Media/tex0.bmp diff --git a/_release/Games/TunnelRun/Media/tex1.bmp b/#Test/Games/TunnelRun/Media/tex1.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/tex1.bmp rename to #Test/Games/TunnelRun/Media/tex1.bmp diff --git a/_release/Games/TunnelRun/Media/tex2.bmp b/#Test/Games/TunnelRun/Media/tex2.bmp similarity index 100% rename from _release/Games/TunnelRun/Media/tex2.bmp rename to #Test/Games/TunnelRun/Media/tex2.bmp diff --git a/_release/Games/TunnelRun/Media/title.BMP b/#Test/Games/TunnelRun/Media/title.BMP similarity index 100% rename from _release/Games/TunnelRun/Media/title.BMP rename to #Test/Games/TunnelRun/Media/title.BMP diff --git a/_release/Games/TunnelRun/functions.bb b/#Test/Games/TunnelRun/functions.bb similarity index 100% rename from _release/Games/TunnelRun/functions.bb rename to #Test/Games/TunnelRun/functions.bb diff --git a/_release/Games/TunnelRun/globs.bb b/#Test/Games/TunnelRun/globs.bb similarity index 100% rename from _release/Games/TunnelRun/globs.bb rename to #Test/Games/TunnelRun/globs.bb diff --git a/_release/Games/TunnelRun/tr.bb b/#Test/Games/TunnelRun/tr.bb similarity index 100% rename from _release/Games/TunnelRun/tr.bb rename to #Test/Games/TunnelRun/tr.bb diff --git a/_release/Games/bb3d_asteroids/EdzUpAsteroids.bb b/#Test/Games/bb3d_asteroids/EdzUpAsteroids.bb similarity index 100% rename from _release/Games/bb3d_asteroids/EdzUpAsteroids.bb rename to #Test/Games/bb3d_asteroids/EdzUpAsteroids.bb diff --git a/_release/Games/bb3d_asteroids/Title.png b/#Test/Games/bb3d_asteroids/Title.png similarity index 100% rename from _release/Games/bb3d_asteroids/Title.png rename to #Test/Games/bb3d_asteroids/Title.png diff --git a/_release/Games/bb3d_asteroids/asteroid.3ds b/#Test/Games/bb3d_asteroids/asteroid.3ds similarity index 100% rename from _release/Games/bb3d_asteroids/asteroid.3ds rename to #Test/Games/bb3d_asteroids/asteroid.3ds diff --git a/_release/Games/bb3d_asteroids/b3dlogo.png b/#Test/Games/bb3d_asteroids/b3dlogo.png similarity index 100% rename from _release/Games/bb3d_asteroids/b3dlogo.png rename to #Test/Games/bb3d_asteroids/b3dlogo.png diff --git a/_release/Games/bb3d_asteroids/explode.wav b/#Test/Games/bb3d_asteroids/explode.wav similarity index 100% rename from _release/Games/bb3d_asteroids/explode.wav rename to #Test/Games/bb3d_asteroids/explode.wav diff --git a/_release/Games/bb3d_asteroids/explode1.wav b/#Test/Games/bb3d_asteroids/explode1.wav similarity index 100% rename from _release/Games/bb3d_asteroids/explode1.wav rename to #Test/Games/bb3d_asteroids/explode1.wav diff --git a/_release/Games/bb3d_asteroids/flame2.bmp b/#Test/Games/bb3d_asteroids/flame2.bmp similarity index 100% rename from _release/Games/bb3d_asteroids/flame2.bmp rename to #Test/Games/bb3d_asteroids/flame2.bmp diff --git a/_release/Games/bb3d_asteroids/flame3.bmp b/#Test/Games/bb3d_asteroids/flame3.bmp similarity index 100% rename from _release/Games/bb3d_asteroids/flame3.bmp rename to #Test/Games/bb3d_asteroids/flame3.bmp diff --git a/_release/Games/bb3d_asteroids/hfighter.3ds b/#Test/Games/bb3d_asteroids/hfighter.3ds similarity index 100% rename from _release/Games/bb3d_asteroids/hfighter.3ds rename to #Test/Games/bb3d_asteroids/hfighter.3ds diff --git a/_release/Games/bb3d_asteroids/hit.wav b/#Test/Games/bb3d_asteroids/hit.wav similarity index 100% rename from _release/Games/bb3d_asteroids/hit.wav rename to #Test/Games/bb3d_asteroids/hit.wav diff --git a/_release/Games/bb3d_asteroids/lasergun.wav b/#Test/Games/bb3d_asteroids/lasergun.wav similarity index 100% rename from _release/Games/bb3d_asteroids/lasergun.wav rename to #Test/Games/bb3d_asteroids/lasergun.wav diff --git a/_release/Games/bb3d_asteroids/stars.bmp b/#Test/Games/bb3d_asteroids/stars.bmp similarity index 100% rename from _release/Games/bb3d_asteroids/stars.bmp rename to #Test/Games/bb3d_asteroids/stars.bmp diff --git a/_release/Games/bb3d_asteroids/stone04.bmp b/#Test/Games/bb3d_asteroids/stone04.bmp similarity index 100% rename from _release/Games/bb3d_asteroids/stone04.bmp rename to #Test/Games/bb3d_asteroids/stone04.bmp diff --git a/_release/Games/bb3d_asteroids/ufo.3ds b/#Test/Games/bb3d_asteroids/ufo.3ds similarity index 100% rename from _release/Games/bb3d_asteroids/ufo.3ds rename to #Test/Games/bb3d_asteroids/ufo.3ds diff --git a/_release/Games/bb3d_asteroids/ufo.wav b/#Test/Games/bb3d_asteroids/ufo.wav similarity index 100% rename from _release/Games/bb3d_asteroids/ufo.wav rename to #Test/Games/bb3d_asteroids/ufo.wav diff --git a/_release/Games/wing_ring/issues.txt b/#Test/Games/wing_ring/issues.txt similarity index 100% rename from _release/Games/wing_ring/issues.txt rename to #Test/Games/wing_ring/issues.txt diff --git a/_release/Games/wing_ring/media/1000.bmp b/#Test/Games/wing_ring/media/1000.bmp similarity index 100% rename from _release/Games/wing_ring/media/1000.bmp rename to #Test/Games/wing_ring/media/1000.bmp diff --git a/_release/Games/wing_ring/media/1000x10.bmp b/#Test/Games/wing_ring/media/1000x10.bmp similarity index 100% rename from _release/Games/wing_ring/media/1000x10.bmp rename to #Test/Games/wing_ring/media/1000x10.bmp diff --git a/_release/Games/wing_ring/media/1000x2.bmp b/#Test/Games/wing_ring/media/1000x2.bmp similarity index 100% rename from _release/Games/wing_ring/media/1000x2.bmp rename to #Test/Games/wing_ring/media/1000x2.bmp diff --git a/_release/Games/wing_ring/media/1000x4.bmp b/#Test/Games/wing_ring/media/1000x4.bmp similarity index 100% rename from _release/Games/wing_ring/media/1000x4.bmp rename to #Test/Games/wing_ring/media/1000x4.bmp diff --git a/_release/Games/wing_ring/media/1000x6.bmp b/#Test/Games/wing_ring/media/1000x6.bmp similarity index 100% rename from _release/Games/wing_ring/media/1000x6.bmp rename to #Test/Games/wing_ring/media/1000x6.bmp diff --git a/_release/Games/wing_ring/media/1000x8.bmp b/#Test/Games/wing_ring/media/1000x8.bmp similarity index 100% rename from _release/Games/wing_ring/media/1000x8.bmp rename to #Test/Games/wing_ring/media/1000x8.bmp diff --git a/_release/Games/wing_ring/media/200.bmp b/#Test/Games/wing_ring/media/200.bmp similarity index 100% rename from _release/Games/wing_ring/media/200.bmp rename to #Test/Games/wing_ring/media/200.bmp diff --git a/_release/Games/wing_ring/media/200x10.bmp b/#Test/Games/wing_ring/media/200x10.bmp similarity index 100% rename from _release/Games/wing_ring/media/200x10.bmp rename to #Test/Games/wing_ring/media/200x10.bmp diff --git a/_release/Games/wing_ring/media/200x2.bmp b/#Test/Games/wing_ring/media/200x2.bmp similarity index 100% rename from _release/Games/wing_ring/media/200x2.bmp rename to #Test/Games/wing_ring/media/200x2.bmp diff --git a/_release/Games/wing_ring/media/200x4.bmp b/#Test/Games/wing_ring/media/200x4.bmp similarity index 100% rename from _release/Games/wing_ring/media/200x4.bmp rename to #Test/Games/wing_ring/media/200x4.bmp diff --git a/_release/Games/wing_ring/media/200x6.bmp b/#Test/Games/wing_ring/media/200x6.bmp similarity index 100% rename from _release/Games/wing_ring/media/200x6.bmp rename to #Test/Games/wing_ring/media/200x6.bmp diff --git a/_release/Games/wing_ring/media/200x8.bmp b/#Test/Games/wing_ring/media/200x8.bmp similarity index 100% rename from _release/Games/wing_ring/media/200x8.bmp rename to #Test/Games/wing_ring/media/200x8.bmp diff --git a/_release/Games/wing_ring/media/400.bmp b/#Test/Games/wing_ring/media/400.bmp similarity index 100% rename from _release/Games/wing_ring/media/400.bmp rename to #Test/Games/wing_ring/media/400.bmp diff --git a/_release/Games/wing_ring/media/400x10.bmp b/#Test/Games/wing_ring/media/400x10.bmp similarity index 100% rename from _release/Games/wing_ring/media/400x10.bmp rename to #Test/Games/wing_ring/media/400x10.bmp diff --git a/_release/Games/wing_ring/media/400x2.bmp b/#Test/Games/wing_ring/media/400x2.bmp similarity index 100% rename from _release/Games/wing_ring/media/400x2.bmp rename to #Test/Games/wing_ring/media/400x2.bmp diff --git a/_release/Games/wing_ring/media/400x4.bmp b/#Test/Games/wing_ring/media/400x4.bmp similarity index 100% rename from _release/Games/wing_ring/media/400x4.bmp rename to #Test/Games/wing_ring/media/400x4.bmp diff --git a/_release/Games/wing_ring/media/400x6.bmp b/#Test/Games/wing_ring/media/400x6.bmp similarity index 100% rename from _release/Games/wing_ring/media/400x6.bmp rename to #Test/Games/wing_ring/media/400x6.bmp diff --git a/_release/Games/wing_ring/media/400x8.bmp b/#Test/Games/wing_ring/media/400x8.bmp similarity index 100% rename from _release/Games/wing_ring/media/400x8.bmp rename to #Test/Games/wing_ring/media/400x8.bmp diff --git a/_release/Games/wing_ring/media/600.bmp b/#Test/Games/wing_ring/media/600.bmp similarity index 100% rename from _release/Games/wing_ring/media/600.bmp rename to #Test/Games/wing_ring/media/600.bmp diff --git a/_release/Games/wing_ring/media/600x10.bmp b/#Test/Games/wing_ring/media/600x10.bmp similarity index 100% rename from _release/Games/wing_ring/media/600x10.bmp rename to #Test/Games/wing_ring/media/600x10.bmp diff --git a/_release/Games/wing_ring/media/600x2.bmp b/#Test/Games/wing_ring/media/600x2.bmp similarity index 100% rename from _release/Games/wing_ring/media/600x2.bmp rename to #Test/Games/wing_ring/media/600x2.bmp diff --git a/_release/Games/wing_ring/media/600x4.bmp b/#Test/Games/wing_ring/media/600x4.bmp similarity index 100% rename from _release/Games/wing_ring/media/600x4.bmp rename to #Test/Games/wing_ring/media/600x4.bmp diff --git a/_release/Games/wing_ring/media/600x6.bmp b/#Test/Games/wing_ring/media/600x6.bmp similarity index 100% rename from _release/Games/wing_ring/media/600x6.bmp rename to #Test/Games/wing_ring/media/600x6.bmp diff --git a/_release/Games/wing_ring/media/600x8.bmp b/#Test/Games/wing_ring/media/600x8.bmp similarity index 100% rename from _release/Games/wing_ring/media/600x8.bmp rename to #Test/Games/wing_ring/media/600x8.bmp diff --git a/_release/Games/wing_ring/media/800.bmp b/#Test/Games/wing_ring/media/800.bmp similarity index 100% rename from _release/Games/wing_ring/media/800.bmp rename to #Test/Games/wing_ring/media/800.bmp diff --git a/_release/Games/wing_ring/media/800x10.bmp b/#Test/Games/wing_ring/media/800x10.bmp similarity index 100% rename from _release/Games/wing_ring/media/800x10.bmp rename to #Test/Games/wing_ring/media/800x10.bmp diff --git a/_release/Games/wing_ring/media/800x2.bmp b/#Test/Games/wing_ring/media/800x2.bmp similarity index 100% rename from _release/Games/wing_ring/media/800x2.bmp rename to #Test/Games/wing_ring/media/800x2.bmp diff --git a/_release/Games/wing_ring/media/800x4.bmp b/#Test/Games/wing_ring/media/800x4.bmp similarity index 100% rename from _release/Games/wing_ring/media/800x4.bmp rename to #Test/Games/wing_ring/media/800x4.bmp diff --git a/_release/Games/wing_ring/media/800x6.bmp b/#Test/Games/wing_ring/media/800x6.bmp similarity index 100% rename from _release/Games/wing_ring/media/800x6.bmp rename to #Test/Games/wing_ring/media/800x6.bmp diff --git a/_release/Games/wing_ring/media/800x8.bmp b/#Test/Games/wing_ring/media/800x8.bmp similarity index 100% rename from _release/Games/wing_ring/media/800x8.bmp rename to #Test/Games/wing_ring/media/800x8.bmp diff --git a/_release/Games/wing_ring/media/F15.BMP b/#Test/Games/wing_ring/media/F15.BMP similarity index 100% rename from _release/Games/wing_ring/media/F15.BMP rename to #Test/Games/wing_ring/media/F15.BMP diff --git a/_release/Games/wing_ring/media/Thumbs.db b/#Test/Games/wing_ring/media/Thumbs.db similarity index 100% rename from _release/Games/wing_ring/media/Thumbs.db rename to #Test/Games/wing_ring/media/Thumbs.db diff --git a/_release/Games/wing_ring/media/big_spark.BMP b/#Test/Games/wing_ring/media/big_spark.BMP similarity index 100% rename from _release/Games/wing_ring/media/big_spark.BMP rename to #Test/Games/wing_ring/media/big_spark.BMP diff --git a/_release/Games/wing_ring/media/blue_spark.bmp b/#Test/Games/wing_ring/media/blue_spark.bmp similarity index 100% rename from _release/Games/wing_ring/media/blue_spark.bmp rename to #Test/Games/wing_ring/media/blue_spark.bmp diff --git a/_release/Games/wing_ring/media/blue_ufo.X b/#Test/Games/wing_ring/media/blue_ufo.X similarity index 100% rename from _release/Games/wing_ring/media/blue_ufo.X rename to #Test/Games/wing_ring/media/blue_ufo.X diff --git a/_release/Games/wing_ring/media/bust.bmp b/#Test/Games/wing_ring/media/bust.bmp similarity index 100% rename from _release/Games/wing_ring/media/bust.bmp rename to #Test/Games/wing_ring/media/bust.bmp diff --git a/_release/Games/wing_ring/media/camel.x b/#Test/Games/wing_ring/media/camel.x similarity index 100% rename from _release/Games/wing_ring/media/camel.x rename to #Test/Games/wing_ring/media/camel.x diff --git a/_release/Games/wing_ring/media/clouds.bmp b/#Test/Games/wing_ring/media/clouds.bmp similarity index 100% rename from _release/Games/wing_ring/media/clouds.bmp rename to #Test/Games/wing_ring/media/clouds.bmp diff --git a/_release/Games/wing_ring/media/clouds_night.bmp b/#Test/Games/wing_ring/media/clouds_night.bmp similarity index 100% rename from _release/Games/wing_ring/media/clouds_night.bmp rename to #Test/Games/wing_ring/media/clouds_night.bmp diff --git a/_release/Games/wing_ring/media/explode.wav b/#Test/Games/wing_ring/media/explode.wav similarity index 100% rename from _release/Games/wing_ring/media/explode.wav rename to #Test/Games/wing_ring/media/explode.wav diff --git a/_release/Games/wing_ring/media/green_spark.bmp b/#Test/Games/wing_ring/media/green_spark.bmp similarity index 100% rename from _release/Games/wing_ring/media/green_spark.bmp rename to #Test/Games/wing_ring/media/green_spark.bmp diff --git a/_release/Games/wing_ring/media/green_ufo.x b/#Test/Games/wing_ring/media/green_ufo.x similarity index 100% rename from _release/Games/wing_ring/media/green_ufo.x rename to #Test/Games/wing_ring/media/green_ufo.x diff --git a/_release/Games/wing_ring/media/high_scores.sav b/#Test/Games/wing_ring/media/high_scores.sav similarity index 100% rename from _release/Games/wing_ring/media/high_scores.sav rename to #Test/Games/wing_ring/media/high_scores.sav diff --git a/_release/Games/wing_ring/media/lights.bmp b/#Test/Games/wing_ring/media/lights.bmp similarity index 100% rename from _release/Games/wing_ring/media/lights.bmp rename to #Test/Games/wing_ring/media/lights.bmp diff --git a/_release/Games/wing_ring/media/logo.bmp b/#Test/Games/wing_ring/media/logo.bmp similarity index 100% rename from _release/Games/wing_ring/media/logo.bmp rename to #Test/Games/wing_ring/media/logo.bmp diff --git a/_release/Games/wing_ring/media/moon.bmp b/#Test/Games/wing_ring/media/moon.bmp similarity index 100% rename from _release/Games/wing_ring/media/moon.bmp rename to #Test/Games/wing_ring/media/moon.bmp diff --git a/_release/Games/wing_ring/media/mother.x b/#Test/Games/wing_ring/media/mother.x similarity index 100% rename from _release/Games/wing_ring/media/mother.x rename to #Test/Games/wing_ring/media/mother.x diff --git a/_release/Games/wing_ring/media/orange_spark.bmp b/#Test/Games/wing_ring/media/orange_spark.bmp similarity index 100% rename from _release/Games/wing_ring/media/orange_spark.bmp rename to #Test/Games/wing_ring/media/orange_spark.bmp diff --git a/_release/Games/wing_ring/media/orange_ufo.x b/#Test/Games/wing_ring/media/orange_ufo.x similarity index 100% rename from _release/Games/wing_ring/media/orange_ufo.x rename to #Test/Games/wing_ring/media/orange_ufo.x diff --git a/_release/Games/wing_ring/media/pink_spark.bmp b/#Test/Games/wing_ring/media/pink_spark.bmp similarity index 100% rename from _release/Games/wing_ring/media/pink_spark.bmp rename to #Test/Games/wing_ring/media/pink_spark.bmp diff --git a/_release/Games/wing_ring/media/pink_ufo.x b/#Test/Games/wing_ring/media/pink_ufo.x similarity index 100% rename from _release/Games/wing_ring/media/pink_ufo.x rename to #Test/Games/wing_ring/media/pink_ufo.x diff --git a/_release/Games/wing_ring/media/plane.x b/#Test/Games/wing_ring/media/plane.x similarity index 100% rename from _release/Games/wing_ring/media/plane.x rename to #Test/Games/wing_ring/media/plane.x diff --git a/_release/Games/wing_ring/media/ring.bmp b/#Test/Games/wing_ring/media/ring.bmp similarity index 100% rename from _release/Games/wing_ring/media/ring.bmp rename to #Test/Games/wing_ring/media/ring.bmp diff --git a/_release/Games/wing_ring/media/sand.bmp b/#Test/Games/wing_ring/media/sand.bmp similarity index 100% rename from _release/Games/wing_ring/media/sand.bmp rename to #Test/Games/wing_ring/media/sand.bmp diff --git a/_release/Games/wing_ring/media/sphinx.x b/#Test/Games/wing_ring/media/sphinx.x similarity index 100% rename from _release/Games/wing_ring/media/sphinx.x rename to #Test/Games/wing_ring/media/sphinx.x diff --git a/_release/Games/wing_ring/media/stat_lib.x b/#Test/Games/wing_ring/media/stat_lib.x similarity index 100% rename from _release/Games/wing_ring/media/stat_lib.x rename to #Test/Games/wing_ring/media/stat_lib.x diff --git a/_release/Games/wing_ring/media/tune1.mid b/#Test/Games/wing_ring/media/tune1.mid similarity index 100% rename from _release/Games/wing_ring/media/tune1.mid rename to #Test/Games/wing_ring/media/tune1.mid diff --git a/_release/Games/wing_ring/media/tune2.mid b/#Test/Games/wing_ring/media/tune2.mid similarity index 100% rename from _release/Games/wing_ring/media/tune2.mid rename to #Test/Games/wing_ring/media/tune2.mid diff --git a/_release/Games/wing_ring/media/yellow_spark.bmp b/#Test/Games/wing_ring/media/yellow_spark.bmp similarity index 100% rename from _release/Games/wing_ring/media/yellow_spark.bmp rename to #Test/Games/wing_ring/media/yellow_spark.bmp diff --git a/_release/Games/wing_ring/media/yellow_ufo.X b/#Test/Games/wing_ring/media/yellow_ufo.X similarity index 100% rename from _release/Games/wing_ring/media/yellow_ufo.X rename to #Test/Games/wing_ring/media/yellow_ufo.X diff --git a/_release/Games/wing_ring/menus.bb b/#Test/Games/wing_ring/menus.bb similarity index 100% rename from _release/Games/wing_ring/menus.bb rename to #Test/Games/wing_ring/menus.bb diff --git a/_release/Games/wing_ring/player2.bb b/#Test/Games/wing_ring/player2.bb similarity index 100% rename from _release/Games/wing_ring/player2.bb rename to #Test/Games/wing_ring/player2.bb diff --git a/_release/Games/wing_ring/readme.bb b/#Test/Games/wing_ring/readme.bb similarity index 100% rename from _release/Games/wing_ring/readme.bb rename to #Test/Games/wing_ring/readme.bb diff --git a/_release/Games/wing_ring/readme.txt b/#Test/Games/wing_ring/readme.txt similarity index 100% rename from _release/Games/wing_ring/readme.txt rename to #Test/Games/wing_ring/readme.txt diff --git a/_release/Games/wing_ring/scenery.bb b/#Test/Games/wing_ring/scenery.bb similarity index 100% rename from _release/Games/wing_ring/scenery.bb rename to #Test/Games/wing_ring/scenery.bb diff --git a/_release/Games/wing_ring/wing_ring.bb b/#Test/Games/wing_ring/wing_ring.bb similarity index 100% rename from _release/Games/wing_ring/wing_ring.bb rename to #Test/Games/wing_ring/wing_ring.bb diff --git a/_release/Media/geometricks_models/british-tadpole/btadpole.3ds b/#Test/Media/geometricks_models/british-tadpole/btadpole.3ds similarity index 100% rename from _release/Media/geometricks_models/british-tadpole/btadpole.3ds rename to #Test/Media/geometricks_models/british-tadpole/btadpole.3ds diff --git a/_release/Media/geometricks_models/british-tadpole/btadpole.jpg b/#Test/Media/geometricks_models/british-tadpole/btadpole.jpg similarity index 100% rename from _release/Media/geometricks_models/british-tadpole/btadpole.jpg rename to #Test/Media/geometricks_models/british-tadpole/btadpole.jpg diff --git a/_release/Media/geometricks_models/fighter/fighter.3ds b/#Test/Media/geometricks_models/fighter/fighter.3ds similarity index 100% rename from _release/Media/geometricks_models/fighter/fighter.3ds rename to #Test/Media/geometricks_models/fighter/fighter.3ds diff --git a/_release/Media/geometricks_models/fighter/fighter.jpg b/#Test/Media/geometricks_models/fighter/fighter.jpg similarity index 100% rename from _release/Media/geometricks_models/fighter/fighter.jpg rename to #Test/Media/geometricks_models/fighter/fighter.jpg diff --git a/_release/Media/geometricks_models/hearse/hearse.3ds b/#Test/Media/geometricks_models/hearse/hearse.3ds similarity index 100% rename from _release/Media/geometricks_models/hearse/hearse.3ds rename to #Test/Media/geometricks_models/hearse/hearse.3ds diff --git a/_release/Media/geometricks_models/hearse/hearse.jpg b/#Test/Media/geometricks_models/hearse/hearse.jpg similarity index 100% rename from _release/Media/geometricks_models/hearse/hearse.jpg rename to #Test/Media/geometricks_models/hearse/hearse.jpg diff --git a/_release/Media/geometricks_models/oil-drum/oildrum.3ds b/#Test/Media/geometricks_models/oil-drum/oildrum.3ds similarity index 100% rename from _release/Media/geometricks_models/oil-drum/oildrum.3ds rename to #Test/Media/geometricks_models/oil-drum/oildrum.3ds diff --git a/_release/Media/geometricks_models/oil-drum/oildrum.jpg b/#Test/Media/geometricks_models/oil-drum/oildrum.jpg similarity index 100% rename from _release/Media/geometricks_models/oil-drum/oildrum.jpg rename to #Test/Media/geometricks_models/oil-drum/oildrum.jpg diff --git a/_release/Media/geometricks_models/rallycar/rallycar.jpg b/#Test/Media/geometricks_models/rallycar/rallycar.jpg similarity index 100% rename from _release/Media/geometricks_models/rallycar/rallycar.jpg rename to #Test/Media/geometricks_models/rallycar/rallycar.jpg diff --git a/_release/Media/geometricks_models/rallycar/rallycar1.3ds b/#Test/Media/geometricks_models/rallycar/rallycar1.3ds similarity index 100% rename from _release/Media/geometricks_models/rallycar/rallycar1.3ds rename to #Test/Media/geometricks_models/rallycar/rallycar1.3ds diff --git a/_release/Media/geometricks_models/saucer/fsaucer1.3ds b/#Test/Media/geometricks_models/saucer/fsaucer1.3ds similarity index 100% rename from _release/Media/geometricks_models/saucer/fsaucer1.3ds rename to #Test/Media/geometricks_models/saucer/fsaucer1.3ds diff --git a/_release/Media/geometricks_models/saucer/saucer.jpg b/#Test/Media/geometricks_models/saucer/saucer.jpg similarity index 100% rename from _release/Media/geometricks_models/saucer/saucer.jpg rename to #Test/Media/geometricks_models/saucer/saucer.jpg diff --git a/_release/Media/geometricks_models/solarsail/solarsail.3ds b/#Test/Media/geometricks_models/solarsail/solarsail.3ds similarity index 100% rename from _release/Media/geometricks_models/solarsail/solarsail.3ds rename to #Test/Media/geometricks_models/solarsail/solarsail.3ds diff --git a/_release/Media/geometricks_models/solarsail/ssail.jpg b/#Test/Media/geometricks_models/solarsail/ssail.jpg similarity index 100% rename from _release/Media/geometricks_models/solarsail/ssail.jpg rename to #Test/Media/geometricks_models/solarsail/ssail.jpg diff --git a/_release/Media/geometricks_models/stealth/stealth.3ds b/#Test/Media/geometricks_models/stealth/stealth.3ds similarity index 100% rename from _release/Media/geometricks_models/stealth/stealth.3ds rename to #Test/Media/geometricks_models/stealth/stealth.3ds diff --git a/_release/Media/geometricks_models/stealth/stealth.jpg b/#Test/Media/geometricks_models/stealth/stealth.jpg similarity index 100% rename from _release/Media/geometricks_models/stealth/stealth.jpg rename to #Test/Media/geometricks_models/stealth/stealth.jpg diff --git a/_release/Media/geometricks_models/supplies/readme.txt b/#Test/Media/geometricks_models/supplies/readme.txt similarity index 100% rename from _release/Media/geometricks_models/supplies/readme.txt rename to #Test/Media/geometricks_models/supplies/readme.txt diff --git a/_release/Media/geometricks_models/supplies/supplies.x b/#Test/Media/geometricks_models/supplies/supplies.x similarity index 100% rename from _release/Media/geometricks_models/supplies/supplies.x rename to #Test/Media/geometricks_models/supplies/supplies.x diff --git a/_release/Media/geometricks_models/supplies/supplies_0.bmp b/#Test/Media/geometricks_models/supplies/supplies_0.bmp similarity index 100% rename from _release/Media/geometricks_models/supplies/supplies_0.bmp rename to #Test/Media/geometricks_models/supplies/supplies_0.bmp diff --git a/_release/Media/geometricks_models/supplies/supplies_1.bmp b/#Test/Media/geometricks_models/supplies/supplies_1.bmp similarity index 100% rename from _release/Media/geometricks_models/supplies/supplies_1.bmp rename to #Test/Media/geometricks_models/supplies/supplies_1.bmp diff --git a/_release/Media/geometricks_models/warrior/warrior.3ds b/#Test/Media/geometricks_models/warrior/warrior.3ds similarity index 100% rename from _release/Media/geometricks_models/warrior/warrior.3ds rename to #Test/Media/geometricks_models/warrior/warrior.3ds diff --git a/_release/Media/geometricks_models/warrior/warrior.jpg b/#Test/Media/geometricks_models/warrior/warrior.jpg similarity index 100% rename from _release/Media/geometricks_models/warrior/warrior.jpg rename to #Test/Media/geometricks_models/warrior/warrior.jpg diff --git a/_release/Media/geometricks_models/wood-crate/wcrate.jpg b/#Test/Media/geometricks_models/wood-crate/wcrate.jpg similarity index 100% rename from _release/Media/geometricks_models/wood-crate/wcrate.jpg rename to #Test/Media/geometricks_models/wood-crate/wcrate.jpg diff --git a/_release/Media/geometricks_models/wood-crate/wcrate1.3ds b/#Test/Media/geometricks_models/wood-crate/wcrate1.3ds similarity index 100% rename from _release/Media/geometricks_models/wood-crate/wcrate1.3ds rename to #Test/Media/geometricks_models/wood-crate/wcrate1.3ds diff --git a/#Test/bin/BlitzCc.exe b/#Test/bin/BlitzCc.exe new file mode 100644 index 0000000..7f06f43 Binary files /dev/null and b/#Test/bin/BlitzCc.exe differ diff --git a/#Test/bin/BlitzCc.ilk b/#Test/bin/BlitzCc.ilk new file mode 100644 index 0000000..eeb92db Binary files /dev/null and b/#Test/bin/BlitzCc.ilk differ diff --git a/#Test/bin/BlitzCc.pdb b/#Test/bin/BlitzCc.pdb new file mode 100644 index 0000000..ab97fe9 Binary files /dev/null and b/#Test/bin/BlitzCc.pdb differ diff --git a/#Test/bin/Debugger.dll b/#Test/bin/Debugger.dll new file mode 100644 index 0000000..3776923 Binary files /dev/null and b/#Test/bin/Debugger.dll differ diff --git a/#Test/bin/Debugger.pdb b/#Test/bin/Debugger.pdb new file mode 100644 index 0000000..f938a93 Binary files /dev/null and b/#Test/bin/Debugger.pdb differ diff --git a/#Test/bin/FreeImage.dll b/#Test/bin/FreeImage.dll new file mode 100644 index 0000000..cb4cf6e Binary files /dev/null and b/#Test/bin/FreeImage.dll differ diff --git a/#Test/bin/Linker.dll b/#Test/bin/Linker.dll new file mode 100644 index 0000000..a9681d1 Binary files /dev/null and b/#Test/bin/Linker.dll differ diff --git a/#Test/bin/Linker.pdb b/#Test/bin/Linker.pdb new file mode 100644 index 0000000..7bf0324 Binary files /dev/null and b/#Test/bin/Linker.pdb differ diff --git a/#Test/bin/Runtime.dll b/#Test/bin/Runtime.dll new file mode 100644 index 0000000..c3bb258 Binary files /dev/null and b/#Test/bin/Runtime.dll differ diff --git a/#Test/bin/Runtime.pdb b/#Test/bin/Runtime.pdb new file mode 100644 index 0000000..7cd30fa Binary files /dev/null and b/#Test/bin/Runtime.pdb differ diff --git a/#Test/bin/depends.dll b/#Test/bin/depends.dll new file mode 100644 index 0000000..f78fd34 Binary files /dev/null and b/#Test/bin/depends.dll differ diff --git a/#Test/bin/depends.exe b/#Test/bin/depends.exe new file mode 100644 index 0000000..4586e89 Binary files /dev/null and b/#Test/bin/depends.exe differ diff --git a/fmodapi375win/api/fmod.dll b/#Test/bin/fmod.dll similarity index 100% rename from fmodapi375win/api/fmod.dll rename to #Test/bin/fmod.dll diff --git a/#Test/bin/ide.exe b/#Test/bin/ide.exe new file mode 100644 index 0000000..ec19693 Binary files /dev/null and b/#Test/bin/ide.exe differ diff --git a/_release/cfg/Blitz.fon b/#Test/cfg/Blitz.fon similarity index 100% rename from _release/cfg/Blitz.fon rename to #Test/cfg/Blitz.fon diff --git a/#Test/cfg/blitzide.prefs b/#Test/cfg/blitzide.prefs new file mode 100644 index 0000000..47f0fa4 --- /dev/null +++ b/#Test/cfg/blitzide.prefs @@ -0,0 +1,23 @@ +prg_debug 0 +prg_lastbuild C:\Projects\Sirius Online - Client\ExeFile.bb +win_maximized 0 +win_notoolbar 0 +win_rect 395 325 1035 805 +font_editor blitz 12 +font_tabs verdana 8 +font_debug verdana 8 +rgb_bkgrnd 225588 +rgb_string ff66 +rgb_ident ffffff +rgb_keyword aaffff +rgb_comment ffee00 +rgb_digit 33ffdd +rgb_default eeeeee +edit_tabs 4 +edit_blkcursor 0 +edit_backup 2 +img_toolbar toolbar.bmp +cmd_line +file_recent c:\projects\sirius online - client\include\launcher.bb +file_recent c:\projects\sirius online - client\libraries\blitzsteam\blitzsteam.bb +file_recent C:\Projects\Sirius Online - Client\ExeFile.bb diff --git a/_release/cfg/dbg_toolbar.bmp b/#Test/cfg/dbg_toolbar.bmp similarity index 100% rename from _release/cfg/dbg_toolbar.bmp rename to #Test/cfg/dbg_toolbar.bmp diff --git a/_release/cfg/ide_toolbar.bmp b/#Test/cfg/ide_toolbar.bmp similarity index 100% rename from _release/cfg/ide_toolbar.bmp rename to #Test/cfg/ide_toolbar.bmp diff --git a/_release/cfg/toolbar.bmp b/#Test/cfg/toolbar.bmp similarity index 100% rename from _release/cfg/toolbar.bmp rename to #Test/cfg/toolbar.bmp diff --git a/_release/help/b3dlogo.jpg b/#Test/help/b3dlogo.jpg similarity index 100% rename from _release/help/b3dlogo.jpg rename to #Test/help/b3dlogo.jpg diff --git a/_release/help/commands/2d_commands/ACos.htm b/#Test/help/commands/2d_commands/ACos.htm similarity index 100% rename from _release/help/commands/2d_commands/ACos.htm rename to #Test/help/commands/2d_commands/ACos.htm diff --git a/_release/help/commands/2d_commands/ASin.htm b/#Test/help/commands/2d_commands/ASin.htm similarity index 100% rename from _release/help/commands/2d_commands/ASin.htm rename to #Test/help/commands/2d_commands/ASin.htm diff --git a/_release/help/commands/2d_commands/ATan.htm b/#Test/help/commands/2d_commands/ATan.htm similarity index 100% rename from _release/help/commands/2d_commands/ATan.htm rename to #Test/help/commands/2d_commands/ATan.htm diff --git a/_release/help/commands/2d_commands/ATan2.htm b/#Test/help/commands/2d_commands/ATan2.htm similarity index 100% rename from _release/help/commands/2d_commands/ATan2.htm rename to #Test/help/commands/2d_commands/ATan2.htm diff --git a/_release/help/commands/2d_commands/Abs.htm b/#Test/help/commands/2d_commands/Abs.htm similarity index 100% rename from _release/help/commands/2d_commands/Abs.htm rename to #Test/help/commands/2d_commands/Abs.htm diff --git a/_release/help/commands/2d_commands/AcceptTCPStream.htm b/#Test/help/commands/2d_commands/AcceptTCPStream.htm similarity index 100% rename from _release/help/commands/2d_commands/AcceptTCPStream.htm rename to #Test/help/commands/2d_commands/AcceptTCPStream.htm diff --git a/_release/help/commands/2d_commands/After.htm b/#Test/help/commands/2d_commands/After.htm similarity index 100% rename from _release/help/commands/2d_commands/After.htm rename to #Test/help/commands/2d_commands/After.htm diff --git a/_release/help/commands/2d_commands/And.htm b/#Test/help/commands/2d_commands/And.htm similarity index 100% rename from _release/help/commands/2d_commands/And.htm rename to #Test/help/commands/2d_commands/And.htm diff --git a/_release/help/commands/2d_commands/AppTitle.htm b/#Test/help/commands/2d_commands/AppTitle.htm similarity index 100% rename from _release/help/commands/2d_commands/AppTitle.htm rename to #Test/help/commands/2d_commands/AppTitle.htm diff --git a/_release/help/commands/2d_commands/Asc.htm b/#Test/help/commands/2d_commands/Asc.htm similarity index 100% rename from _release/help/commands/2d_commands/Asc.htm rename to #Test/help/commands/2d_commands/Asc.htm diff --git a/_release/help/commands/2d_commands/AutoMidHandle .htm b/#Test/help/commands/2d_commands/AutoMidHandle .htm similarity index 100% rename from _release/help/commands/2d_commands/AutoMidHandle .htm rename to #Test/help/commands/2d_commands/AutoMidHandle .htm diff --git a/_release/help/commands/2d_commands/AvailVidMem.htm b/#Test/help/commands/2d_commands/AvailVidMem.htm similarity index 100% rename from _release/help/commands/2d_commands/AvailVidMem.htm rename to #Test/help/commands/2d_commands/AvailVidMem.htm diff --git a/_release/help/commands/2d_commands/BackBuffer.htm b/#Test/help/commands/2d_commands/BackBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/BackBuffer.htm rename to #Test/help/commands/2d_commands/BackBuffer.htm diff --git a/_release/help/commands/2d_commands/BankSize.htm b/#Test/help/commands/2d_commands/BankSize.htm similarity index 100% rename from _release/help/commands/2d_commands/BankSize.htm rename to #Test/help/commands/2d_commands/BankSize.htm diff --git a/_release/help/commands/2d_commands/Before.htm b/#Test/help/commands/2d_commands/Before.htm similarity index 100% rename from _release/help/commands/2d_commands/Before.htm rename to #Test/help/commands/2d_commands/Before.htm diff --git a/_release/help/commands/2d_commands/Bin.htm b/#Test/help/commands/2d_commands/Bin.htm similarity index 100% rename from _release/help/commands/2d_commands/Bin.htm rename to #Test/help/commands/2d_commands/Bin.htm diff --git a/_release/help/commands/2d_commands/CPUTimer.htm b/#Test/help/commands/2d_commands/CPUTimer.htm similarity index 100% rename from _release/help/commands/2d_commands/CPUTimer.htm rename to #Test/help/commands/2d_commands/CPUTimer.htm diff --git a/_release/help/commands/2d_commands/Case.htm b/#Test/help/commands/2d_commands/Case.htm similarity index 100% rename from _release/help/commands/2d_commands/Case.htm rename to #Test/help/commands/2d_commands/Case.htm diff --git a/_release/help/commands/2d_commands/Ceil.htm b/#Test/help/commands/2d_commands/Ceil.htm similarity index 100% rename from _release/help/commands/2d_commands/Ceil.htm rename to #Test/help/commands/2d_commands/Ceil.htm diff --git a/_release/help/commands/2d_commands/ChangeDir.htm b/#Test/help/commands/2d_commands/ChangeDir.htm similarity index 100% rename from _release/help/commands/2d_commands/ChangeDir.htm rename to #Test/help/commands/2d_commands/ChangeDir.htm diff --git a/_release/help/commands/2d_commands/ChannelPan.htm b/#Test/help/commands/2d_commands/ChannelPan.htm similarity index 100% rename from _release/help/commands/2d_commands/ChannelPan.htm rename to #Test/help/commands/2d_commands/ChannelPan.htm diff --git a/_release/help/commands/2d_commands/ChannelPitch.htm b/#Test/help/commands/2d_commands/ChannelPitch.htm similarity index 100% rename from _release/help/commands/2d_commands/ChannelPitch.htm rename to #Test/help/commands/2d_commands/ChannelPitch.htm diff --git a/_release/help/commands/2d_commands/ChannelPlaying.htm b/#Test/help/commands/2d_commands/ChannelPlaying.htm similarity index 100% rename from _release/help/commands/2d_commands/ChannelPlaying.htm rename to #Test/help/commands/2d_commands/ChannelPlaying.htm diff --git a/_release/help/commands/2d_commands/ChannelVolume.htm b/#Test/help/commands/2d_commands/ChannelVolume.htm similarity index 100% rename from _release/help/commands/2d_commands/ChannelVolume.htm rename to #Test/help/commands/2d_commands/ChannelVolume.htm diff --git a/_release/help/commands/2d_commands/Chr.htm b/#Test/help/commands/2d_commands/Chr.htm similarity index 100% rename from _release/help/commands/2d_commands/Chr.htm rename to #Test/help/commands/2d_commands/Chr.htm diff --git a/_release/help/commands/2d_commands/CloseDir.htm b/#Test/help/commands/2d_commands/CloseDir.htm similarity index 100% rename from _release/help/commands/2d_commands/CloseDir.htm rename to #Test/help/commands/2d_commands/CloseDir.htm diff --git a/_release/help/commands/2d_commands/CloseFile.htm b/#Test/help/commands/2d_commands/CloseFile.htm similarity index 100% rename from _release/help/commands/2d_commands/CloseFile.htm rename to #Test/help/commands/2d_commands/CloseFile.htm diff --git a/_release/help/commands/2d_commands/CloseTCPServer.htm b/#Test/help/commands/2d_commands/CloseTCPServer.htm similarity index 100% rename from _release/help/commands/2d_commands/CloseTCPServer.htm rename to #Test/help/commands/2d_commands/CloseTCPServer.htm diff --git a/_release/help/commands/2d_commands/CloseTCPStream.htm b/#Test/help/commands/2d_commands/CloseTCPStream.htm similarity index 100% rename from _release/help/commands/2d_commands/CloseTCPStream.htm rename to #Test/help/commands/2d_commands/CloseTCPStream.htm diff --git a/_release/help/commands/2d_commands/Cls.htm b/#Test/help/commands/2d_commands/Cls.htm similarity index 100% rename from _release/help/commands/2d_commands/Cls.htm rename to #Test/help/commands/2d_commands/Cls.htm diff --git a/_release/help/commands/2d_commands/ClsColor.htm b/#Test/help/commands/2d_commands/ClsColor.htm similarity index 100% rename from _release/help/commands/2d_commands/ClsColor.htm rename to #Test/help/commands/2d_commands/ClsColor.htm diff --git a/_release/help/commands/2d_commands/Color.htm b/#Test/help/commands/2d_commands/Color.htm similarity index 100% rename from _release/help/commands/2d_commands/Color.htm rename to #Test/help/commands/2d_commands/Color.htm diff --git a/_release/help/commands/2d_commands/ColorBlue.htm b/#Test/help/commands/2d_commands/ColorBlue.htm similarity index 100% rename from _release/help/commands/2d_commands/ColorBlue.htm rename to #Test/help/commands/2d_commands/ColorBlue.htm diff --git a/_release/help/commands/2d_commands/ColorGreen.htm b/#Test/help/commands/2d_commands/ColorGreen.htm similarity index 100% rename from _release/help/commands/2d_commands/ColorGreen.htm rename to #Test/help/commands/2d_commands/ColorGreen.htm diff --git a/_release/help/commands/2d_commands/ColorRed.htm b/#Test/help/commands/2d_commands/ColorRed.htm similarity index 100% rename from _release/help/commands/2d_commands/ColorRed.htm rename to #Test/help/commands/2d_commands/ColorRed.htm diff --git a/_release/help/commands/2d_commands/CommandLine.htm b/#Test/help/commands/2d_commands/CommandLine.htm similarity index 100% rename from _release/help/commands/2d_commands/CommandLine.htm rename to #Test/help/commands/2d_commands/CommandLine.htm diff --git a/_release/help/commands/2d_commands/Const.htm b/#Test/help/commands/2d_commands/Const.htm similarity index 100% rename from _release/help/commands/2d_commands/Const.htm rename to #Test/help/commands/2d_commands/Const.htm diff --git a/_release/help/commands/2d_commands/CopyBank.htm b/#Test/help/commands/2d_commands/CopyBank.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyBank.htm rename to #Test/help/commands/2d_commands/CopyBank.htm diff --git a/_release/help/commands/2d_commands/CopyFile.htm b/#Test/help/commands/2d_commands/CopyFile.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyFile.htm rename to #Test/help/commands/2d_commands/CopyFile.htm diff --git a/_release/help/commands/2d_commands/CopyImage.htm b/#Test/help/commands/2d_commands/CopyImage.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyImage.htm rename to #Test/help/commands/2d_commands/CopyImage.htm diff --git a/_release/help/commands/2d_commands/CopyPixel.htm b/#Test/help/commands/2d_commands/CopyPixel.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyPixel.htm rename to #Test/help/commands/2d_commands/CopyPixel.htm diff --git a/_release/help/commands/2d_commands/CopyPixelFast.htm b/#Test/help/commands/2d_commands/CopyPixelFast.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyPixelFast.htm rename to #Test/help/commands/2d_commands/CopyPixelFast.htm diff --git a/_release/help/commands/2d_commands/CopyRect.htm b/#Test/help/commands/2d_commands/CopyRect.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyRect.htm rename to #Test/help/commands/2d_commands/CopyRect.htm diff --git a/_release/help/commands/2d_commands/CopyStream.htm b/#Test/help/commands/2d_commands/CopyStream.htm similarity index 100% rename from _release/help/commands/2d_commands/CopyStream.htm rename to #Test/help/commands/2d_commands/CopyStream.htm diff --git a/_release/help/commands/2d_commands/Cos.htm b/#Test/help/commands/2d_commands/Cos.htm similarity index 100% rename from _release/help/commands/2d_commands/Cos.htm rename to #Test/help/commands/2d_commands/Cos.htm diff --git a/_release/help/commands/2d_commands/CountGFXModes.htm b/#Test/help/commands/2d_commands/CountGFXModes.htm similarity index 100% rename from _release/help/commands/2d_commands/CountGFXModes.htm rename to #Test/help/commands/2d_commands/CountGFXModes.htm diff --git a/_release/help/commands/2d_commands/CountGfxDrivers.htm b/#Test/help/commands/2d_commands/CountGfxDrivers.htm similarity index 100% rename from _release/help/commands/2d_commands/CountGfxDrivers.htm rename to #Test/help/commands/2d_commands/CountGfxDrivers.htm diff --git a/_release/help/commands/2d_commands/CreateBank.htm b/#Test/help/commands/2d_commands/CreateBank.htm similarity index 100% rename from _release/help/commands/2d_commands/CreateBank.htm rename to #Test/help/commands/2d_commands/CreateBank.htm diff --git a/_release/help/commands/2d_commands/CreateDir.htm b/#Test/help/commands/2d_commands/CreateDir.htm similarity index 100% rename from _release/help/commands/2d_commands/CreateDir.htm rename to #Test/help/commands/2d_commands/CreateDir.htm diff --git a/_release/help/commands/2d_commands/CreateImage.htm b/#Test/help/commands/2d_commands/CreateImage.htm similarity index 100% rename from _release/help/commands/2d_commands/CreateImage.htm rename to #Test/help/commands/2d_commands/CreateImage.htm diff --git a/_release/help/commands/2d_commands/CreateNetPlayer.htm b/#Test/help/commands/2d_commands/CreateNetPlayer.htm similarity index 100% rename from _release/help/commands/2d_commands/CreateNetPlayer.htm rename to #Test/help/commands/2d_commands/CreateNetPlayer.htm diff --git a/_release/help/commands/2d_commands/CreateTCPServer.htm b/#Test/help/commands/2d_commands/CreateTCPServer.htm similarity index 100% rename from _release/help/commands/2d_commands/CreateTCPServer.htm rename to #Test/help/commands/2d_commands/CreateTCPServer.htm diff --git a/_release/help/commands/2d_commands/CreateTimer.htm b/#Test/help/commands/2d_commands/CreateTimer.htm similarity index 100% rename from _release/help/commands/2d_commands/CreateTimer.htm rename to #Test/help/commands/2d_commands/CreateTimer.htm diff --git a/_release/help/commands/2d_commands/CurrentDate.htm b/#Test/help/commands/2d_commands/CurrentDate.htm similarity index 100% rename from _release/help/commands/2d_commands/CurrentDate.htm rename to #Test/help/commands/2d_commands/CurrentDate.htm diff --git a/_release/help/commands/2d_commands/CurrentDir.htm b/#Test/help/commands/2d_commands/CurrentDir.htm similarity index 100% rename from _release/help/commands/2d_commands/CurrentDir.htm rename to #Test/help/commands/2d_commands/CurrentDir.htm diff --git a/_release/help/commands/2d_commands/CurrentTime.htm b/#Test/help/commands/2d_commands/CurrentTime.htm similarity index 100% rename from _release/help/commands/2d_commands/CurrentTime.htm rename to #Test/help/commands/2d_commands/CurrentTime.htm diff --git a/_release/help/commands/2d_commands/Data.htm b/#Test/help/commands/2d_commands/Data.htm similarity index 100% rename from _release/help/commands/2d_commands/Data.htm rename to #Test/help/commands/2d_commands/Data.htm diff --git a/_release/help/commands/2d_commands/DebugLog.htm b/#Test/help/commands/2d_commands/DebugLog.htm similarity index 100% rename from _release/help/commands/2d_commands/DebugLog.htm rename to #Test/help/commands/2d_commands/DebugLog.htm diff --git a/_release/help/commands/2d_commands/Default.htm b/#Test/help/commands/2d_commands/Default.htm similarity index 100% rename from _release/help/commands/2d_commands/Default.htm rename to #Test/help/commands/2d_commands/Default.htm diff --git a/_release/help/commands/2d_commands/Delay.htm b/#Test/help/commands/2d_commands/Delay.htm similarity index 100% rename from _release/help/commands/2d_commands/Delay.htm rename to #Test/help/commands/2d_commands/Delay.htm diff --git a/_release/help/commands/2d_commands/Delete.htm b/#Test/help/commands/2d_commands/Delete.htm similarity index 100% rename from _release/help/commands/2d_commands/Delete.htm rename to #Test/help/commands/2d_commands/Delete.htm diff --git a/_release/help/commands/2d_commands/DeleteDir.htm b/#Test/help/commands/2d_commands/DeleteDir.htm similarity index 100% rename from _release/help/commands/2d_commands/DeleteDir.htm rename to #Test/help/commands/2d_commands/DeleteDir.htm diff --git a/_release/help/commands/2d_commands/DeleteFile.htm b/#Test/help/commands/2d_commands/DeleteFile.htm similarity index 100% rename from _release/help/commands/2d_commands/DeleteFile.htm rename to #Test/help/commands/2d_commands/DeleteFile.htm diff --git a/_release/help/commands/2d_commands/DeleteNetPlayer.htm b/#Test/help/commands/2d_commands/DeleteNetPlayer.htm similarity index 100% rename from _release/help/commands/2d_commands/DeleteNetPlayer.htm rename to #Test/help/commands/2d_commands/DeleteNetPlayer.htm diff --git a/_release/help/commands/2d_commands/Dim.htm b/#Test/help/commands/2d_commands/Dim.htm similarity index 100% rename from _release/help/commands/2d_commands/Dim.htm rename to #Test/help/commands/2d_commands/Dim.htm diff --git a/_release/help/commands/2d_commands/DrawBlock.htm b/#Test/help/commands/2d_commands/DrawBlock.htm similarity index 100% rename from _release/help/commands/2d_commands/DrawBlock.htm rename to #Test/help/commands/2d_commands/DrawBlock.htm diff --git a/_release/help/commands/2d_commands/DrawBlockRect.htm b/#Test/help/commands/2d_commands/DrawBlockRect.htm similarity index 100% rename from _release/help/commands/2d_commands/DrawBlockRect.htm rename to #Test/help/commands/2d_commands/DrawBlockRect.htm diff --git a/_release/help/commands/2d_commands/DrawImage.htm b/#Test/help/commands/2d_commands/DrawImage.htm similarity index 100% rename from _release/help/commands/2d_commands/DrawImage.htm rename to #Test/help/commands/2d_commands/DrawImage.htm diff --git a/_release/help/commands/2d_commands/DrawImageRect.htm b/#Test/help/commands/2d_commands/DrawImageRect.htm similarity index 100% rename from _release/help/commands/2d_commands/DrawImageRect.htm rename to #Test/help/commands/2d_commands/DrawImageRect.htm diff --git a/_release/help/commands/2d_commands/EOF.htm b/#Test/help/commands/2d_commands/EOF.htm similarity index 100% rename from _release/help/commands/2d_commands/EOF.htm rename to #Test/help/commands/2d_commands/EOF.htm diff --git a/_release/help/commands/2d_commands/Each.htm b/#Test/help/commands/2d_commands/Each.htm similarity index 100% rename from _release/help/commands/2d_commands/Each.htm rename to #Test/help/commands/2d_commands/Each.htm diff --git a/_release/help/commands/2d_commands/Else If.htm b/#Test/help/commands/2d_commands/Else If.htm similarity index 100% rename from _release/help/commands/2d_commands/Else If.htm rename to #Test/help/commands/2d_commands/Else If.htm diff --git a/_release/help/commands/2d_commands/Else.htm b/#Test/help/commands/2d_commands/Else.htm similarity index 100% rename from _release/help/commands/2d_commands/Else.htm rename to #Test/help/commands/2d_commands/Else.htm diff --git a/_release/help/commands/2d_commands/ElseIf.htm b/#Test/help/commands/2d_commands/ElseIf.htm similarity index 100% rename from _release/help/commands/2d_commands/ElseIf.htm rename to #Test/help/commands/2d_commands/ElseIf.htm diff --git a/_release/help/commands/2d_commands/End Function.htm b/#Test/help/commands/2d_commands/End Function.htm similarity index 100% rename from _release/help/commands/2d_commands/End Function.htm rename to #Test/help/commands/2d_commands/End Function.htm diff --git a/_release/help/commands/2d_commands/End If.htm b/#Test/help/commands/2d_commands/End If.htm similarity index 100% rename from _release/help/commands/2d_commands/End If.htm rename to #Test/help/commands/2d_commands/End If.htm diff --git a/_release/help/commands/2d_commands/End Select.htm b/#Test/help/commands/2d_commands/End Select.htm similarity index 100% rename from _release/help/commands/2d_commands/End Select.htm rename to #Test/help/commands/2d_commands/End Select.htm diff --git a/_release/help/commands/2d_commands/End Type.htm b/#Test/help/commands/2d_commands/End Type.htm similarity index 100% rename from _release/help/commands/2d_commands/End Type.htm rename to #Test/help/commands/2d_commands/End Type.htm diff --git a/_release/help/commands/2d_commands/End.htm b/#Test/help/commands/2d_commands/End.htm similarity index 100% rename from _release/help/commands/2d_commands/End.htm rename to #Test/help/commands/2d_commands/End.htm diff --git a/_release/help/commands/2d_commands/EndGraphics.htm b/#Test/help/commands/2d_commands/EndGraphics.htm similarity index 100% rename from _release/help/commands/2d_commands/EndGraphics.htm rename to #Test/help/commands/2d_commands/EndGraphics.htm diff --git a/_release/help/commands/2d_commands/EndIF.htm b/#Test/help/commands/2d_commands/EndIF.htm similarity index 100% rename from _release/help/commands/2d_commands/EndIF.htm rename to #Test/help/commands/2d_commands/EndIF.htm diff --git a/_release/help/commands/2d_commands/ExecFile.htm b/#Test/help/commands/2d_commands/ExecFile.htm similarity index 100% rename from _release/help/commands/2d_commands/ExecFile.htm rename to #Test/help/commands/2d_commands/ExecFile.htm diff --git a/_release/help/commands/2d_commands/Exit.htm b/#Test/help/commands/2d_commands/Exit.htm similarity index 100% rename from _release/help/commands/2d_commands/Exit.htm rename to #Test/help/commands/2d_commands/Exit.htm diff --git a/_release/help/commands/2d_commands/Exp.htm b/#Test/help/commands/2d_commands/Exp.htm similarity index 100% rename from _release/help/commands/2d_commands/Exp.htm rename to #Test/help/commands/2d_commands/Exp.htm diff --git a/_release/help/commands/2d_commands/False.htm b/#Test/help/commands/2d_commands/False.htm similarity index 100% rename from _release/help/commands/2d_commands/False.htm rename to #Test/help/commands/2d_commands/False.htm diff --git a/_release/help/commands/2d_commands/Field.htm b/#Test/help/commands/2d_commands/Field.htm similarity index 100% rename from _release/help/commands/2d_commands/Field.htm rename to #Test/help/commands/2d_commands/Field.htm diff --git a/_release/help/commands/2d_commands/FilePos.htm b/#Test/help/commands/2d_commands/FilePos.htm similarity index 100% rename from _release/help/commands/2d_commands/FilePos.htm rename to #Test/help/commands/2d_commands/FilePos.htm diff --git a/_release/help/commands/2d_commands/FileSize.htm b/#Test/help/commands/2d_commands/FileSize.htm similarity index 100% rename from _release/help/commands/2d_commands/FileSize.htm rename to #Test/help/commands/2d_commands/FileSize.htm diff --git a/_release/help/commands/2d_commands/FileType.htm b/#Test/help/commands/2d_commands/FileType.htm similarity index 100% rename from _release/help/commands/2d_commands/FileType.htm rename to #Test/help/commands/2d_commands/FileType.htm diff --git a/_release/help/commands/2d_commands/FindGfxMode.htm b/#Test/help/commands/2d_commands/FindGfxMode.htm similarity index 100% rename from _release/help/commands/2d_commands/FindGfxMode.htm rename to #Test/help/commands/2d_commands/FindGfxMode.htm diff --git a/_release/help/commands/2d_commands/First.htm b/#Test/help/commands/2d_commands/First.htm similarity index 100% rename from _release/help/commands/2d_commands/First.htm rename to #Test/help/commands/2d_commands/First.htm diff --git a/_release/help/commands/2d_commands/Flip.htm b/#Test/help/commands/2d_commands/Flip.htm similarity index 100% rename from _release/help/commands/2d_commands/Flip.htm rename to #Test/help/commands/2d_commands/Flip.htm diff --git a/_release/help/commands/2d_commands/Float.htm b/#Test/help/commands/2d_commands/Float.htm similarity index 100% rename from _release/help/commands/2d_commands/Float.htm rename to #Test/help/commands/2d_commands/Float.htm diff --git a/_release/help/commands/2d_commands/Floor.htm b/#Test/help/commands/2d_commands/Floor.htm similarity index 100% rename from _release/help/commands/2d_commands/Floor.htm rename to #Test/help/commands/2d_commands/Floor.htm diff --git a/_release/help/commands/2d_commands/FlushJoy.htm b/#Test/help/commands/2d_commands/FlushJoy.htm similarity index 100% rename from _release/help/commands/2d_commands/FlushJoy.htm rename to #Test/help/commands/2d_commands/FlushJoy.htm diff --git a/_release/help/commands/2d_commands/FlushKeys.htm b/#Test/help/commands/2d_commands/FlushKeys.htm similarity index 100% rename from _release/help/commands/2d_commands/FlushKeys.htm rename to #Test/help/commands/2d_commands/FlushKeys.htm diff --git a/_release/help/commands/2d_commands/FlushMouse.htm b/#Test/help/commands/2d_commands/FlushMouse.htm similarity index 100% rename from _release/help/commands/2d_commands/FlushMouse.htm rename to #Test/help/commands/2d_commands/FlushMouse.htm diff --git a/_release/help/commands/2d_commands/FontHeight.htm b/#Test/help/commands/2d_commands/FontHeight.htm similarity index 100% rename from _release/help/commands/2d_commands/FontHeight.htm rename to #Test/help/commands/2d_commands/FontHeight.htm diff --git a/_release/help/commands/2d_commands/FontWidth.htm b/#Test/help/commands/2d_commands/FontWidth.htm similarity index 100% rename from _release/help/commands/2d_commands/FontWidth.htm rename to #Test/help/commands/2d_commands/FontWidth.htm diff --git a/_release/help/commands/2d_commands/For.htm b/#Test/help/commands/2d_commands/For.htm similarity index 100% rename from _release/help/commands/2d_commands/For.htm rename to #Test/help/commands/2d_commands/For.htm diff --git a/_release/help/commands/2d_commands/Forever.htm b/#Test/help/commands/2d_commands/Forever.htm similarity index 100% rename from _release/help/commands/2d_commands/Forever.htm rename to #Test/help/commands/2d_commands/Forever.htm diff --git a/_release/help/commands/2d_commands/FreeBank.htm b/#Test/help/commands/2d_commands/FreeBank.htm similarity index 100% rename from _release/help/commands/2d_commands/FreeBank.htm rename to #Test/help/commands/2d_commands/FreeBank.htm diff --git a/_release/help/commands/2d_commands/FreeFont.htm b/#Test/help/commands/2d_commands/FreeFont.htm similarity index 100% rename from _release/help/commands/2d_commands/FreeFont.htm rename to #Test/help/commands/2d_commands/FreeFont.htm diff --git a/_release/help/commands/2d_commands/FreeImage.htm b/#Test/help/commands/2d_commands/FreeImage.htm similarity index 100% rename from _release/help/commands/2d_commands/FreeImage.htm rename to #Test/help/commands/2d_commands/FreeImage.htm diff --git a/_release/help/commands/2d_commands/FreeSound.htm b/#Test/help/commands/2d_commands/FreeSound.htm similarity index 100% rename from _release/help/commands/2d_commands/FreeSound.htm rename to #Test/help/commands/2d_commands/FreeSound.htm diff --git a/_release/help/commands/2d_commands/FreeTimer.htm b/#Test/help/commands/2d_commands/FreeTimer.htm similarity index 100% rename from _release/help/commands/2d_commands/FreeTimer.htm rename to #Test/help/commands/2d_commands/FreeTimer.htm diff --git a/_release/help/commands/2d_commands/FrontBuffer.htm b/#Test/help/commands/2d_commands/FrontBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/FrontBuffer.htm rename to #Test/help/commands/2d_commands/FrontBuffer.htm diff --git a/_release/help/commands/2d_commands/Function.htm b/#Test/help/commands/2d_commands/Function.htm similarity index 100% rename from _release/help/commands/2d_commands/Function.htm rename to #Test/help/commands/2d_commands/Function.htm diff --git a/_release/help/commands/2d_commands/GFXModeDepth.htm b/#Test/help/commands/2d_commands/GFXModeDepth.htm similarity index 100% rename from _release/help/commands/2d_commands/GFXModeDepth.htm rename to #Test/help/commands/2d_commands/GFXModeDepth.htm diff --git a/_release/help/commands/2d_commands/GFXModeHeight.htm b/#Test/help/commands/2d_commands/GFXModeHeight.htm similarity index 100% rename from _release/help/commands/2d_commands/GFXModeHeight.htm rename to #Test/help/commands/2d_commands/GFXModeHeight.htm diff --git a/_release/help/commands/2d_commands/GFXModeWidth.htm b/#Test/help/commands/2d_commands/GFXModeWidth.htm similarity index 100% rename from _release/help/commands/2d_commands/GFXModeWidth.htm rename to #Test/help/commands/2d_commands/GFXModeWidth.htm diff --git a/_release/help/commands/2d_commands/GetColor.htm b/#Test/help/commands/2d_commands/GetColor.htm similarity index 100% rename from _release/help/commands/2d_commands/GetColor.htm rename to #Test/help/commands/2d_commands/GetColor.htm diff --git a/_release/help/commands/2d_commands/GetJoy.htm b/#Test/help/commands/2d_commands/GetJoy.htm similarity index 100% rename from _release/help/commands/2d_commands/GetJoy.htm rename to #Test/help/commands/2d_commands/GetJoy.htm diff --git a/_release/help/commands/2d_commands/GetKey.htm b/#Test/help/commands/2d_commands/GetKey.htm similarity index 100% rename from _release/help/commands/2d_commands/GetKey.htm rename to #Test/help/commands/2d_commands/GetKey.htm diff --git a/_release/help/commands/2d_commands/GetMouse.htm b/#Test/help/commands/2d_commands/GetMouse.htm similarity index 100% rename from _release/help/commands/2d_commands/GetMouse.htm rename to #Test/help/commands/2d_commands/GetMouse.htm diff --git a/_release/help/commands/2d_commands/GfxDriverName.htm b/#Test/help/commands/2d_commands/GfxDriverName.htm similarity index 100% rename from _release/help/commands/2d_commands/GfxDriverName.htm rename to #Test/help/commands/2d_commands/GfxDriverName.htm diff --git a/_release/help/commands/2d_commands/GfxModeExists.htm b/#Test/help/commands/2d_commands/GfxModeExists.htm similarity index 100% rename from _release/help/commands/2d_commands/GfxModeExists.htm rename to #Test/help/commands/2d_commands/GfxModeExists.htm diff --git a/_release/help/commands/2d_commands/Global.htm b/#Test/help/commands/2d_commands/Global.htm similarity index 100% rename from _release/help/commands/2d_commands/Global.htm rename to #Test/help/commands/2d_commands/Global.htm diff --git a/_release/help/commands/2d_commands/Gosub.htm b/#Test/help/commands/2d_commands/Gosub.htm similarity index 100% rename from _release/help/commands/2d_commands/Gosub.htm rename to #Test/help/commands/2d_commands/Gosub.htm diff --git a/_release/help/commands/2d_commands/Goto.htm b/#Test/help/commands/2d_commands/Goto.htm similarity index 100% rename from _release/help/commands/2d_commands/Goto.htm rename to #Test/help/commands/2d_commands/Goto.htm diff --git a/_release/help/commands/2d_commands/GrabImage.htm b/#Test/help/commands/2d_commands/GrabImage.htm similarity index 100% rename from _release/help/commands/2d_commands/GrabImage.htm rename to #Test/help/commands/2d_commands/GrabImage.htm diff --git a/_release/help/commands/2d_commands/Graphics.htm b/#Test/help/commands/2d_commands/Graphics.htm similarity index 100% rename from _release/help/commands/2d_commands/Graphics.htm rename to #Test/help/commands/2d_commands/Graphics.htm diff --git a/_release/help/commands/2d_commands/GraphicsBuffer.htm b/#Test/help/commands/2d_commands/GraphicsBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/GraphicsBuffer.htm rename to #Test/help/commands/2d_commands/GraphicsBuffer.htm diff --git a/_release/help/commands/2d_commands/GraphicsDepth.htm b/#Test/help/commands/2d_commands/GraphicsDepth.htm similarity index 100% rename from _release/help/commands/2d_commands/GraphicsDepth.htm rename to #Test/help/commands/2d_commands/GraphicsDepth.htm diff --git a/_release/help/commands/2d_commands/GraphicsHeight.htm b/#Test/help/commands/2d_commands/GraphicsHeight.htm similarity index 100% rename from _release/help/commands/2d_commands/GraphicsHeight.htm rename to #Test/help/commands/2d_commands/GraphicsHeight.htm diff --git a/_release/help/commands/2d_commands/GraphicsWidth.htm b/#Test/help/commands/2d_commands/GraphicsWidth.htm similarity index 100% rename from _release/help/commands/2d_commands/GraphicsWidth.htm rename to #Test/help/commands/2d_commands/GraphicsWidth.htm diff --git a/_release/help/commands/2d_commands/HandleImage.htm b/#Test/help/commands/2d_commands/HandleImage.htm similarity index 100% rename from _release/help/commands/2d_commands/HandleImage.htm rename to #Test/help/commands/2d_commands/HandleImage.htm diff --git a/_release/help/commands/2d_commands/Hex.htm b/#Test/help/commands/2d_commands/Hex.htm similarity index 100% rename from _release/help/commands/2d_commands/Hex.htm rename to #Test/help/commands/2d_commands/Hex.htm diff --git a/_release/help/commands/2d_commands/HidePointer.htm b/#Test/help/commands/2d_commands/HidePointer.htm similarity index 100% rename from _release/help/commands/2d_commands/HidePointer.htm rename to #Test/help/commands/2d_commands/HidePointer.htm diff --git a/_release/help/commands/2d_commands/HostNetGame.htm b/#Test/help/commands/2d_commands/HostNetGame.htm similarity index 100% rename from _release/help/commands/2d_commands/HostNetGame.htm rename to #Test/help/commands/2d_commands/HostNetGame.htm diff --git a/_release/help/commands/2d_commands/If.htm b/#Test/help/commands/2d_commands/If.htm similarity index 100% rename from _release/help/commands/2d_commands/If.htm rename to #Test/help/commands/2d_commands/If.htm diff --git a/_release/help/commands/2d_commands/ImageBuffer.htm b/#Test/help/commands/2d_commands/ImageBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageBuffer.htm rename to #Test/help/commands/2d_commands/ImageBuffer.htm diff --git a/_release/help/commands/2d_commands/ImageHeight.htm b/#Test/help/commands/2d_commands/ImageHeight.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageHeight.htm rename to #Test/help/commands/2d_commands/ImageHeight.htm diff --git a/_release/help/commands/2d_commands/ImageRectCollide.htm b/#Test/help/commands/2d_commands/ImageRectCollide.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageRectCollide.htm rename to #Test/help/commands/2d_commands/ImageRectCollide.htm diff --git a/_release/help/commands/2d_commands/ImageRectOverlap.htm b/#Test/help/commands/2d_commands/ImageRectOverlap.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageRectOverlap.htm rename to #Test/help/commands/2d_commands/ImageRectOverlap.htm diff --git a/_release/help/commands/2d_commands/ImageWidth.htm b/#Test/help/commands/2d_commands/ImageWidth.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageWidth.htm rename to #Test/help/commands/2d_commands/ImageWidth.htm diff --git a/_release/help/commands/2d_commands/ImageXHandle.htm b/#Test/help/commands/2d_commands/ImageXHandle.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageXHandle.htm rename to #Test/help/commands/2d_commands/ImageXHandle.htm diff --git a/_release/help/commands/2d_commands/ImageYHandle.htm b/#Test/help/commands/2d_commands/ImageYHandle.htm similarity index 100% rename from _release/help/commands/2d_commands/ImageYHandle.htm rename to #Test/help/commands/2d_commands/ImageYHandle.htm diff --git a/_release/help/commands/2d_commands/ImagesCollide.htm b/#Test/help/commands/2d_commands/ImagesCollide.htm similarity index 100% rename from _release/help/commands/2d_commands/ImagesCollide.htm rename to #Test/help/commands/2d_commands/ImagesCollide.htm diff --git a/_release/help/commands/2d_commands/ImagesOverlap.htm b/#Test/help/commands/2d_commands/ImagesOverlap.htm similarity index 100% rename from _release/help/commands/2d_commands/ImagesOverlap.htm rename to #Test/help/commands/2d_commands/ImagesOverlap.htm diff --git a/_release/help/commands/2d_commands/Include.htm b/#Test/help/commands/2d_commands/Include.htm similarity index 100% rename from _release/help/commands/2d_commands/Include.htm rename to #Test/help/commands/2d_commands/Include.htm diff --git a/_release/help/commands/2d_commands/Input.htm b/#Test/help/commands/2d_commands/Input.htm similarity index 100% rename from _release/help/commands/2d_commands/Input.htm rename to #Test/help/commands/2d_commands/Input.htm diff --git a/_release/help/commands/2d_commands/Insert.htm b/#Test/help/commands/2d_commands/Insert.htm similarity index 100% rename from _release/help/commands/2d_commands/Insert.htm rename to #Test/help/commands/2d_commands/Insert.htm diff --git a/_release/help/commands/2d_commands/Instr.htm b/#Test/help/commands/2d_commands/Instr.htm similarity index 100% rename from _release/help/commands/2d_commands/Instr.htm rename to #Test/help/commands/2d_commands/Instr.htm diff --git a/_release/help/commands/2d_commands/Int.htm b/#Test/help/commands/2d_commands/Int.htm similarity index 100% rename from _release/help/commands/2d_commands/Int.htm rename to #Test/help/commands/2d_commands/Int.htm diff --git a/_release/help/commands/2d_commands/JoinNetGame.htm b/#Test/help/commands/2d_commands/JoinNetGame.htm similarity index 100% rename from _release/help/commands/2d_commands/JoinNetGame.htm rename to #Test/help/commands/2d_commands/JoinNetGame.htm diff --git a/_release/help/commands/2d_commands/JoyDown.htm b/#Test/help/commands/2d_commands/JoyDown.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyDown.htm rename to #Test/help/commands/2d_commands/JoyDown.htm diff --git a/_release/help/commands/2d_commands/JoyHit.htm b/#Test/help/commands/2d_commands/JoyHit.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyHit.htm rename to #Test/help/commands/2d_commands/JoyHit.htm diff --git a/_release/help/commands/2d_commands/JoyType.htm b/#Test/help/commands/2d_commands/JoyType.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyType.htm rename to #Test/help/commands/2d_commands/JoyType.htm diff --git a/_release/help/commands/2d_commands/JoyWait.htm b/#Test/help/commands/2d_commands/JoyWait.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyWait.htm rename to #Test/help/commands/2d_commands/JoyWait.htm diff --git a/_release/help/commands/2d_commands/JoyX.htm b/#Test/help/commands/2d_commands/JoyX.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyX.htm rename to #Test/help/commands/2d_commands/JoyX.htm diff --git a/_release/help/commands/2d_commands/JoyXDir.htm b/#Test/help/commands/2d_commands/JoyXDir.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyXDir.htm rename to #Test/help/commands/2d_commands/JoyXDir.htm diff --git a/_release/help/commands/2d_commands/JoyY.htm b/#Test/help/commands/2d_commands/JoyY.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyY.htm rename to #Test/help/commands/2d_commands/JoyY.htm diff --git a/_release/help/commands/2d_commands/JoyYDir.htm b/#Test/help/commands/2d_commands/JoyYDir.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyYDir.htm rename to #Test/help/commands/2d_commands/JoyYDir.htm diff --git a/_release/help/commands/2d_commands/JoyZ.htm b/#Test/help/commands/2d_commands/JoyZ.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyZ.htm rename to #Test/help/commands/2d_commands/JoyZ.htm diff --git a/_release/help/commands/2d_commands/JoyZDir.htm b/#Test/help/commands/2d_commands/JoyZDir.htm similarity index 100% rename from _release/help/commands/2d_commands/JoyZDir.htm rename to #Test/help/commands/2d_commands/JoyZDir.htm diff --git a/_release/help/commands/2d_commands/KeyDown.htm b/#Test/help/commands/2d_commands/KeyDown.htm similarity index 100% rename from _release/help/commands/2d_commands/KeyDown.htm rename to #Test/help/commands/2d_commands/KeyDown.htm diff --git a/_release/help/commands/2d_commands/KeyHit.htm b/#Test/help/commands/2d_commands/KeyHit.htm similarity index 100% rename from _release/help/commands/2d_commands/KeyHit.htm rename to #Test/help/commands/2d_commands/KeyHit.htm diff --git a/_release/help/commands/2d_commands/LSet.htm b/#Test/help/commands/2d_commands/LSet.htm similarity index 100% rename from _release/help/commands/2d_commands/LSet.htm rename to #Test/help/commands/2d_commands/LSet.htm diff --git a/_release/help/commands/2d_commands/Last.htm b/#Test/help/commands/2d_commands/Last.htm similarity index 100% rename from _release/help/commands/2d_commands/Last.htm rename to #Test/help/commands/2d_commands/Last.htm diff --git a/_release/help/commands/2d_commands/Left.htm b/#Test/help/commands/2d_commands/Left.htm similarity index 100% rename from _release/help/commands/2d_commands/Left.htm rename to #Test/help/commands/2d_commands/Left.htm diff --git a/_release/help/commands/2d_commands/Len.htm b/#Test/help/commands/2d_commands/Len.htm similarity index 100% rename from _release/help/commands/2d_commands/Len.htm rename to #Test/help/commands/2d_commands/Len.htm diff --git a/_release/help/commands/2d_commands/Line.htm b/#Test/help/commands/2d_commands/Line.htm similarity index 100% rename from _release/help/commands/2d_commands/Line.htm rename to #Test/help/commands/2d_commands/Line.htm diff --git a/_release/help/commands/2d_commands/LoadAnimImage.htm b/#Test/help/commands/2d_commands/LoadAnimImage.htm similarity index 100% rename from _release/help/commands/2d_commands/LoadAnimImage.htm rename to #Test/help/commands/2d_commands/LoadAnimImage.htm diff --git a/_release/help/commands/2d_commands/LoadBuffer.htm b/#Test/help/commands/2d_commands/LoadBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/LoadBuffer.htm rename to #Test/help/commands/2d_commands/LoadBuffer.htm diff --git a/_release/help/commands/2d_commands/LoadFont.htm b/#Test/help/commands/2d_commands/LoadFont.htm similarity index 100% rename from _release/help/commands/2d_commands/LoadFont.htm rename to #Test/help/commands/2d_commands/LoadFont.htm diff --git a/_release/help/commands/2d_commands/LoadImage.htm b/#Test/help/commands/2d_commands/LoadImage.htm similarity index 100% rename from _release/help/commands/2d_commands/LoadImage.htm rename to #Test/help/commands/2d_commands/LoadImage.htm diff --git a/_release/help/commands/2d_commands/LoadSound.htm b/#Test/help/commands/2d_commands/LoadSound.htm similarity index 100% rename from _release/help/commands/2d_commands/LoadSound.htm rename to #Test/help/commands/2d_commands/LoadSound.htm diff --git a/_release/help/commands/2d_commands/Local.htm b/#Test/help/commands/2d_commands/Local.htm similarity index 100% rename from _release/help/commands/2d_commands/Local.htm rename to #Test/help/commands/2d_commands/Local.htm diff --git a/_release/help/commands/2d_commands/Locate.htm b/#Test/help/commands/2d_commands/Locate.htm similarity index 100% rename from _release/help/commands/2d_commands/Locate.htm rename to #Test/help/commands/2d_commands/Locate.htm diff --git a/_release/help/commands/2d_commands/LockBuffer.htm b/#Test/help/commands/2d_commands/LockBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/LockBuffer.htm rename to #Test/help/commands/2d_commands/LockBuffer.htm diff --git a/_release/help/commands/2d_commands/Log.htm b/#Test/help/commands/2d_commands/Log.htm similarity index 100% rename from _release/help/commands/2d_commands/Log.htm rename to #Test/help/commands/2d_commands/Log.htm diff --git a/_release/help/commands/2d_commands/Log10.htm b/#Test/help/commands/2d_commands/Log10.htm similarity index 100% rename from _release/help/commands/2d_commands/Log10.htm rename to #Test/help/commands/2d_commands/Log10.htm diff --git a/_release/help/commands/2d_commands/LoopSound.htm b/#Test/help/commands/2d_commands/LoopSound.htm similarity index 100% rename from _release/help/commands/2d_commands/LoopSound.htm rename to #Test/help/commands/2d_commands/LoopSound.htm diff --git a/_release/help/commands/2d_commands/Lower.htm b/#Test/help/commands/2d_commands/Lower.htm similarity index 100% rename from _release/help/commands/2d_commands/Lower.htm rename to #Test/help/commands/2d_commands/Lower.htm diff --git a/_release/help/commands/2d_commands/MaskImage.htm b/#Test/help/commands/2d_commands/MaskImage.htm similarity index 100% rename from _release/help/commands/2d_commands/MaskImage.htm rename to #Test/help/commands/2d_commands/MaskImage.htm diff --git a/_release/help/commands/2d_commands/Mid.htm b/#Test/help/commands/2d_commands/Mid.htm similarity index 100% rename from _release/help/commands/2d_commands/Mid.htm rename to #Test/help/commands/2d_commands/Mid.htm diff --git a/_release/help/commands/2d_commands/MidHandle .htm b/#Test/help/commands/2d_commands/MidHandle .htm similarity index 100% rename from _release/help/commands/2d_commands/MidHandle .htm rename to #Test/help/commands/2d_commands/MidHandle .htm diff --git a/_release/help/commands/2d_commands/Millisecs.htm b/#Test/help/commands/2d_commands/Millisecs.htm similarity index 100% rename from _release/help/commands/2d_commands/Millisecs.htm rename to #Test/help/commands/2d_commands/Millisecs.htm diff --git a/_release/help/commands/2d_commands/Mod.htm b/#Test/help/commands/2d_commands/Mod.htm similarity index 100% rename from _release/help/commands/2d_commands/Mod.htm rename to #Test/help/commands/2d_commands/Mod.htm diff --git a/_release/help/commands/2d_commands/MouseDown.htm b/#Test/help/commands/2d_commands/MouseDown.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseDown.htm rename to #Test/help/commands/2d_commands/MouseDown.htm diff --git a/_release/help/commands/2d_commands/MouseHit.htm b/#Test/help/commands/2d_commands/MouseHit.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseHit.htm rename to #Test/help/commands/2d_commands/MouseHit.htm diff --git a/_release/help/commands/2d_commands/MouseWait.htm b/#Test/help/commands/2d_commands/MouseWait.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseWait.htm rename to #Test/help/commands/2d_commands/MouseWait.htm diff --git a/_release/help/commands/2d_commands/MouseX.htm b/#Test/help/commands/2d_commands/MouseX.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseX.htm rename to #Test/help/commands/2d_commands/MouseX.htm diff --git a/_release/help/commands/2d_commands/MouseXSpeed.htm b/#Test/help/commands/2d_commands/MouseXSpeed.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseXSpeed.htm rename to #Test/help/commands/2d_commands/MouseXSpeed.htm diff --git a/_release/help/commands/2d_commands/MouseY.htm b/#Test/help/commands/2d_commands/MouseY.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseY.htm rename to #Test/help/commands/2d_commands/MouseY.htm diff --git a/_release/help/commands/2d_commands/MouseYSpeed.htm b/#Test/help/commands/2d_commands/MouseYSpeed.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseYSpeed.htm rename to #Test/help/commands/2d_commands/MouseYSpeed.htm diff --git a/_release/help/commands/2d_commands/MouseZ.htm b/#Test/help/commands/2d_commands/MouseZ.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseZ.htm rename to #Test/help/commands/2d_commands/MouseZ.htm diff --git a/_release/help/commands/2d_commands/MouseZSpeed.htm b/#Test/help/commands/2d_commands/MouseZSpeed.htm similarity index 100% rename from _release/help/commands/2d_commands/MouseZSpeed.htm rename to #Test/help/commands/2d_commands/MouseZSpeed.htm diff --git a/_release/help/commands/2d_commands/MoveMouse.htm b/#Test/help/commands/2d_commands/MoveMouse.htm similarity index 100% rename from _release/help/commands/2d_commands/MoveMouse.htm rename to #Test/help/commands/2d_commands/MoveMouse.htm diff --git a/_release/help/commands/2d_commands/NetMsgData.htm b/#Test/help/commands/2d_commands/NetMsgData.htm similarity index 100% rename from _release/help/commands/2d_commands/NetMsgData.htm rename to #Test/help/commands/2d_commands/NetMsgData.htm diff --git a/_release/help/commands/2d_commands/NetMsgFrom().htm b/#Test/help/commands/2d_commands/NetMsgFrom().htm similarity index 100% rename from _release/help/commands/2d_commands/NetMsgFrom().htm rename to #Test/help/commands/2d_commands/NetMsgFrom().htm diff --git a/_release/help/commands/2d_commands/NetMsgTo().htm b/#Test/help/commands/2d_commands/NetMsgTo().htm similarity index 100% rename from _release/help/commands/2d_commands/NetMsgTo().htm rename to #Test/help/commands/2d_commands/NetMsgTo().htm diff --git a/_release/help/commands/2d_commands/NetMsgType().htm b/#Test/help/commands/2d_commands/NetMsgType().htm similarity index 100% rename from _release/help/commands/2d_commands/NetMsgType().htm rename to #Test/help/commands/2d_commands/NetMsgType().htm diff --git a/_release/help/commands/2d_commands/NetPlayerLocal.htm b/#Test/help/commands/2d_commands/NetPlayerLocal.htm similarity index 100% rename from _release/help/commands/2d_commands/NetPlayerLocal.htm rename to #Test/help/commands/2d_commands/NetPlayerLocal.htm diff --git a/_release/help/commands/2d_commands/NetPlayerName.htm b/#Test/help/commands/2d_commands/NetPlayerName.htm similarity index 100% rename from _release/help/commands/2d_commands/NetPlayerName.htm rename to #Test/help/commands/2d_commands/NetPlayerName.htm diff --git a/_release/help/commands/2d_commands/New.htm b/#Test/help/commands/2d_commands/New.htm similarity index 100% rename from _release/help/commands/2d_commands/New.htm rename to #Test/help/commands/2d_commands/New.htm diff --git a/_release/help/commands/2d_commands/Next.htm b/#Test/help/commands/2d_commands/Next.htm similarity index 100% rename from _release/help/commands/2d_commands/Next.htm rename to #Test/help/commands/2d_commands/Next.htm diff --git a/_release/help/commands/2d_commands/NextFile.htm b/#Test/help/commands/2d_commands/NextFile.htm similarity index 100% rename from _release/help/commands/2d_commands/NextFile.htm rename to #Test/help/commands/2d_commands/NextFile.htm diff --git a/_release/help/commands/2d_commands/Not.htm b/#Test/help/commands/2d_commands/Not.htm similarity index 100% rename from _release/help/commands/2d_commands/Not.htm rename to #Test/help/commands/2d_commands/Not.htm diff --git a/_release/help/commands/2d_commands/Null.htm b/#Test/help/commands/2d_commands/Null.htm similarity index 100% rename from _release/help/commands/2d_commands/Null.htm rename to #Test/help/commands/2d_commands/Null.htm diff --git a/_release/help/commands/2d_commands/OpenFile.htm b/#Test/help/commands/2d_commands/OpenFile.htm similarity index 100% rename from _release/help/commands/2d_commands/OpenFile.htm rename to #Test/help/commands/2d_commands/OpenFile.htm diff --git a/_release/help/commands/2d_commands/OpenTCPStream.htm b/#Test/help/commands/2d_commands/OpenTCPStream.htm similarity index 100% rename from _release/help/commands/2d_commands/OpenTCPStream.htm rename to #Test/help/commands/2d_commands/OpenTCPStream.htm diff --git a/_release/help/commands/2d_commands/Or.htm b/#Test/help/commands/2d_commands/Or.htm similarity index 100% rename from _release/help/commands/2d_commands/Or.htm rename to #Test/help/commands/2d_commands/Or.htm diff --git a/_release/help/commands/2d_commands/Origin.htm b/#Test/help/commands/2d_commands/Origin.htm similarity index 100% rename from _release/help/commands/2d_commands/Origin.htm rename to #Test/help/commands/2d_commands/Origin.htm diff --git a/_release/help/commands/2d_commands/Oval.htm b/#Test/help/commands/2d_commands/Oval.htm similarity index 100% rename from _release/help/commands/2d_commands/Oval.htm rename to #Test/help/commands/2d_commands/Oval.htm diff --git a/_release/help/commands/2d_commands/PauseChannel.htm b/#Test/help/commands/2d_commands/PauseChannel.htm similarity index 100% rename from _release/help/commands/2d_commands/PauseChannel.htm rename to #Test/help/commands/2d_commands/PauseChannel.htm diff --git a/_release/help/commands/2d_commands/PeekByte.htm b/#Test/help/commands/2d_commands/PeekByte.htm similarity index 100% rename from _release/help/commands/2d_commands/PeekByte.htm rename to #Test/help/commands/2d_commands/PeekByte.htm diff --git a/_release/help/commands/2d_commands/PeekFloat.htm b/#Test/help/commands/2d_commands/PeekFloat.htm similarity index 100% rename from _release/help/commands/2d_commands/PeekFloat.htm rename to #Test/help/commands/2d_commands/PeekFloat.htm diff --git a/_release/help/commands/2d_commands/PeekInt.htm b/#Test/help/commands/2d_commands/PeekInt.htm similarity index 100% rename from _release/help/commands/2d_commands/PeekInt.htm rename to #Test/help/commands/2d_commands/PeekInt.htm diff --git a/_release/help/commands/2d_commands/PeekShort.htm b/#Test/help/commands/2d_commands/PeekShort.htm similarity index 100% rename from _release/help/commands/2d_commands/PeekShort.htm rename to #Test/help/commands/2d_commands/PeekShort.htm diff --git a/_release/help/commands/2d_commands/Pi.htm b/#Test/help/commands/2d_commands/Pi.htm similarity index 100% rename from _release/help/commands/2d_commands/Pi.htm rename to #Test/help/commands/2d_commands/Pi.htm diff --git a/_release/help/commands/2d_commands/PlayCDTrack.htm b/#Test/help/commands/2d_commands/PlayCDTrack.htm similarity index 100% rename from _release/help/commands/2d_commands/PlayCDTrack.htm rename to #Test/help/commands/2d_commands/PlayCDTrack.htm diff --git a/_release/help/commands/2d_commands/PlayMusic.htm b/#Test/help/commands/2d_commands/PlayMusic.htm similarity index 100% rename from _release/help/commands/2d_commands/PlayMusic.htm rename to #Test/help/commands/2d_commands/PlayMusic.htm diff --git a/_release/help/commands/2d_commands/PlaySound.htm b/#Test/help/commands/2d_commands/PlaySound.htm similarity index 100% rename from _release/help/commands/2d_commands/PlaySound.htm rename to #Test/help/commands/2d_commands/PlaySound.htm diff --git a/_release/help/commands/2d_commands/Plot.htm b/#Test/help/commands/2d_commands/Plot.htm similarity index 100% rename from _release/help/commands/2d_commands/Plot.htm rename to #Test/help/commands/2d_commands/Plot.htm diff --git a/_release/help/commands/2d_commands/PokeByte.htm b/#Test/help/commands/2d_commands/PokeByte.htm similarity index 100% rename from _release/help/commands/2d_commands/PokeByte.htm rename to #Test/help/commands/2d_commands/PokeByte.htm diff --git a/_release/help/commands/2d_commands/PokeFloat.htm b/#Test/help/commands/2d_commands/PokeFloat.htm similarity index 100% rename from _release/help/commands/2d_commands/PokeFloat.htm rename to #Test/help/commands/2d_commands/PokeFloat.htm diff --git a/_release/help/commands/2d_commands/PokeInt.htm b/#Test/help/commands/2d_commands/PokeInt.htm similarity index 100% rename from _release/help/commands/2d_commands/PokeInt.htm rename to #Test/help/commands/2d_commands/PokeInt.htm diff --git a/_release/help/commands/2d_commands/PokeShort.htm b/#Test/help/commands/2d_commands/PokeShort.htm similarity index 100% rename from _release/help/commands/2d_commands/PokeShort.htm rename to #Test/help/commands/2d_commands/PokeShort.htm diff --git a/_release/help/commands/2d_commands/Print.htm b/#Test/help/commands/2d_commands/Print.htm similarity index 100% rename from _release/help/commands/2d_commands/Print.htm rename to #Test/help/commands/2d_commands/Print.htm diff --git a/_release/help/commands/2d_commands/RSet.htm b/#Test/help/commands/2d_commands/RSet.htm similarity index 100% rename from _release/help/commands/2d_commands/RSet.htm rename to #Test/help/commands/2d_commands/RSet.htm diff --git a/_release/help/commands/2d_commands/Rand.htm b/#Test/help/commands/2d_commands/Rand.htm similarity index 100% rename from _release/help/commands/2d_commands/Rand.htm rename to #Test/help/commands/2d_commands/Rand.htm diff --git a/_release/help/commands/2d_commands/Read.htm b/#Test/help/commands/2d_commands/Read.htm similarity index 100% rename from _release/help/commands/2d_commands/Read.htm rename to #Test/help/commands/2d_commands/Read.htm diff --git a/_release/help/commands/2d_commands/ReadAvail.htm b/#Test/help/commands/2d_commands/ReadAvail.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadAvail.htm rename to #Test/help/commands/2d_commands/ReadAvail.htm diff --git a/_release/help/commands/2d_commands/ReadByte.htm b/#Test/help/commands/2d_commands/ReadByte.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadByte.htm rename to #Test/help/commands/2d_commands/ReadByte.htm diff --git a/_release/help/commands/2d_commands/ReadBytes.htm b/#Test/help/commands/2d_commands/ReadBytes.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadBytes.htm rename to #Test/help/commands/2d_commands/ReadBytes.htm diff --git a/_release/help/commands/2d_commands/ReadDir.htm b/#Test/help/commands/2d_commands/ReadDir.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadDir.htm rename to #Test/help/commands/2d_commands/ReadDir.htm diff --git a/_release/help/commands/2d_commands/ReadFile.htm b/#Test/help/commands/2d_commands/ReadFile.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadFile.htm rename to #Test/help/commands/2d_commands/ReadFile.htm diff --git a/_release/help/commands/2d_commands/ReadFloat.htm b/#Test/help/commands/2d_commands/ReadFloat.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadFloat.htm rename to #Test/help/commands/2d_commands/ReadFloat.htm diff --git a/_release/help/commands/2d_commands/ReadInt.htm b/#Test/help/commands/2d_commands/ReadInt.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadInt.htm rename to #Test/help/commands/2d_commands/ReadInt.htm diff --git a/_release/help/commands/2d_commands/ReadLine.htm b/#Test/help/commands/2d_commands/ReadLine.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadLine.htm rename to #Test/help/commands/2d_commands/ReadLine.htm diff --git a/_release/help/commands/2d_commands/ReadPixel.htm b/#Test/help/commands/2d_commands/ReadPixel.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadPixel.htm rename to #Test/help/commands/2d_commands/ReadPixel.htm diff --git a/_release/help/commands/2d_commands/ReadPixelFast.htm b/#Test/help/commands/2d_commands/ReadPixelFast.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadPixelFast.htm rename to #Test/help/commands/2d_commands/ReadPixelFast.htm diff --git a/_release/help/commands/2d_commands/ReadShort.htm b/#Test/help/commands/2d_commands/ReadShort.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadShort.htm rename to #Test/help/commands/2d_commands/ReadShort.htm diff --git a/_release/help/commands/2d_commands/ReadString.htm b/#Test/help/commands/2d_commands/ReadString.htm similarity index 100% rename from _release/help/commands/2d_commands/ReadString.htm rename to #Test/help/commands/2d_commands/ReadString.htm diff --git a/_release/help/commands/2d_commands/Rect.htm b/#Test/help/commands/2d_commands/Rect.htm similarity index 100% rename from _release/help/commands/2d_commands/Rect.htm rename to #Test/help/commands/2d_commands/Rect.htm diff --git a/_release/help/commands/2d_commands/RectsOverlap.htm b/#Test/help/commands/2d_commands/RectsOverlap.htm similarity index 100% rename from _release/help/commands/2d_commands/RectsOverlap.htm rename to #Test/help/commands/2d_commands/RectsOverlap.htm diff --git a/_release/help/commands/2d_commands/RecvNetMsg.htm b/#Test/help/commands/2d_commands/RecvNetMsg.htm similarity index 100% rename from _release/help/commands/2d_commands/RecvNetMsg.htm rename to #Test/help/commands/2d_commands/RecvNetMsg.htm diff --git a/_release/help/commands/2d_commands/Repeat.htm b/#Test/help/commands/2d_commands/Repeat.htm similarity index 100% rename from _release/help/commands/2d_commands/Repeat.htm rename to #Test/help/commands/2d_commands/Repeat.htm diff --git a/_release/help/commands/2d_commands/Replace.htm b/#Test/help/commands/2d_commands/Replace.htm similarity index 100% rename from _release/help/commands/2d_commands/Replace.htm rename to #Test/help/commands/2d_commands/Replace.htm diff --git a/_release/help/commands/2d_commands/ResizeBank.htm b/#Test/help/commands/2d_commands/ResizeBank.htm similarity index 100% rename from _release/help/commands/2d_commands/ResizeBank.htm rename to #Test/help/commands/2d_commands/ResizeBank.htm diff --git a/_release/help/commands/2d_commands/ResizeImage.htm b/#Test/help/commands/2d_commands/ResizeImage.htm similarity index 100% rename from _release/help/commands/2d_commands/ResizeImage.htm rename to #Test/help/commands/2d_commands/ResizeImage.htm diff --git a/_release/help/commands/2d_commands/Restore.htm b/#Test/help/commands/2d_commands/Restore.htm similarity index 100% rename from _release/help/commands/2d_commands/Restore.htm rename to #Test/help/commands/2d_commands/Restore.htm diff --git a/_release/help/commands/2d_commands/ResumeChannel.htm b/#Test/help/commands/2d_commands/ResumeChannel.htm similarity index 100% rename from _release/help/commands/2d_commands/ResumeChannel.htm rename to #Test/help/commands/2d_commands/ResumeChannel.htm diff --git a/_release/help/commands/2d_commands/Return.htm b/#Test/help/commands/2d_commands/Return.htm similarity index 100% rename from _release/help/commands/2d_commands/Return.htm rename to #Test/help/commands/2d_commands/Return.htm diff --git a/_release/help/commands/2d_commands/Right.htm b/#Test/help/commands/2d_commands/Right.htm similarity index 100% rename from _release/help/commands/2d_commands/Right.htm rename to #Test/help/commands/2d_commands/Right.htm diff --git a/_release/help/commands/2d_commands/Rnd.htm b/#Test/help/commands/2d_commands/Rnd.htm similarity index 100% rename from _release/help/commands/2d_commands/Rnd.htm rename to #Test/help/commands/2d_commands/Rnd.htm diff --git a/_release/help/commands/2d_commands/RotateImage.htm b/#Test/help/commands/2d_commands/RotateImage.htm similarity index 100% rename from _release/help/commands/2d_commands/RotateImage.htm rename to #Test/help/commands/2d_commands/RotateImage.htm diff --git a/_release/help/commands/2d_commands/RuntimeError.htm b/#Test/help/commands/2d_commands/RuntimeError.htm similarity index 100% rename from _release/help/commands/2d_commands/RuntimeError.htm rename to #Test/help/commands/2d_commands/RuntimeError.htm diff --git a/_release/help/commands/2d_commands/Sar.htm b/#Test/help/commands/2d_commands/Sar.htm similarity index 100% rename from _release/help/commands/2d_commands/Sar.htm rename to #Test/help/commands/2d_commands/Sar.htm diff --git a/_release/help/commands/2d_commands/SaveBuffer.htm b/#Test/help/commands/2d_commands/SaveBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/SaveBuffer.htm rename to #Test/help/commands/2d_commands/SaveBuffer.htm diff --git a/_release/help/commands/2d_commands/SaveImage.htm b/#Test/help/commands/2d_commands/SaveImage.htm similarity index 100% rename from _release/help/commands/2d_commands/SaveImage.htm rename to #Test/help/commands/2d_commands/SaveImage.htm diff --git a/_release/help/commands/2d_commands/ScaleImage.htm b/#Test/help/commands/2d_commands/ScaleImage.htm similarity index 100% rename from _release/help/commands/2d_commands/ScaleImage.htm rename to #Test/help/commands/2d_commands/ScaleImage.htm diff --git a/_release/help/commands/2d_commands/ScanCodes.htm b/#Test/help/commands/2d_commands/ScanCodes.htm similarity index 100% rename from _release/help/commands/2d_commands/ScanCodes.htm rename to #Test/help/commands/2d_commands/ScanCodes.htm diff --git a/_release/help/commands/2d_commands/ScanLine.htm b/#Test/help/commands/2d_commands/ScanLine.htm similarity index 100% rename from _release/help/commands/2d_commands/ScanLine.htm rename to #Test/help/commands/2d_commands/ScanLine.htm diff --git a/_release/help/commands/2d_commands/SeedRnd.htm b/#Test/help/commands/2d_commands/SeedRnd.htm similarity index 100% rename from _release/help/commands/2d_commands/SeedRnd.htm rename to #Test/help/commands/2d_commands/SeedRnd.htm diff --git a/_release/help/commands/2d_commands/SeekFile.htm b/#Test/help/commands/2d_commands/SeekFile.htm similarity index 100% rename from _release/help/commands/2d_commands/SeekFile.htm rename to #Test/help/commands/2d_commands/SeekFile.htm diff --git a/_release/help/commands/2d_commands/Select.htm b/#Test/help/commands/2d_commands/Select.htm similarity index 100% rename from _release/help/commands/2d_commands/Select.htm rename to #Test/help/commands/2d_commands/Select.htm diff --git a/_release/help/commands/2d_commands/SendNetMsg.htm b/#Test/help/commands/2d_commands/SendNetMsg.htm similarity index 100% rename from _release/help/commands/2d_commands/SendNetMsg.htm rename to #Test/help/commands/2d_commands/SendNetMsg.htm diff --git a/_release/help/commands/2d_commands/SetBuffer.htm b/#Test/help/commands/2d_commands/SetBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/SetBuffer.htm rename to #Test/help/commands/2d_commands/SetBuffer.htm diff --git a/_release/help/commands/2d_commands/SetFont.htm b/#Test/help/commands/2d_commands/SetFont.htm similarity index 100% rename from _release/help/commands/2d_commands/SetFont.htm rename to #Test/help/commands/2d_commands/SetFont.htm diff --git a/_release/help/commands/2d_commands/SetGfxDriver.htm b/#Test/help/commands/2d_commands/SetGfxDriver.htm similarity index 100% rename from _release/help/commands/2d_commands/SetGfxDriver.htm rename to #Test/help/commands/2d_commands/SetGfxDriver.htm diff --git a/_release/help/commands/2d_commands/Sgn.htm b/#Test/help/commands/2d_commands/Sgn.htm similarity index 100% rename from _release/help/commands/2d_commands/Sgn.htm rename to #Test/help/commands/2d_commands/Sgn.htm diff --git a/_release/help/commands/2d_commands/Shl.htm b/#Test/help/commands/2d_commands/Shl.htm similarity index 100% rename from _release/help/commands/2d_commands/Shl.htm rename to #Test/help/commands/2d_commands/Shl.htm diff --git a/_release/help/commands/2d_commands/ShowPointer.htm b/#Test/help/commands/2d_commands/ShowPointer.htm similarity index 100% rename from _release/help/commands/2d_commands/ShowPointer.htm rename to #Test/help/commands/2d_commands/ShowPointer.htm diff --git a/_release/help/commands/2d_commands/Shr.htm b/#Test/help/commands/2d_commands/Shr.htm similarity index 100% rename from _release/help/commands/2d_commands/Shr.htm rename to #Test/help/commands/2d_commands/Shr.htm diff --git a/_release/help/commands/2d_commands/Sin.htm b/#Test/help/commands/2d_commands/Sin.htm similarity index 100% rename from _release/help/commands/2d_commands/Sin.htm rename to #Test/help/commands/2d_commands/Sin.htm diff --git a/_release/help/commands/2d_commands/SoundPan.htm b/#Test/help/commands/2d_commands/SoundPan.htm similarity index 100% rename from _release/help/commands/2d_commands/SoundPan.htm rename to #Test/help/commands/2d_commands/SoundPan.htm diff --git a/_release/help/commands/2d_commands/SoundPitch.htm b/#Test/help/commands/2d_commands/SoundPitch.htm similarity index 100% rename from _release/help/commands/2d_commands/SoundPitch.htm rename to #Test/help/commands/2d_commands/SoundPitch.htm diff --git a/_release/help/commands/2d_commands/SoundVolume.htm b/#Test/help/commands/2d_commands/SoundVolume.htm similarity index 100% rename from _release/help/commands/2d_commands/SoundVolume.htm rename to #Test/help/commands/2d_commands/SoundVolume.htm diff --git a/_release/help/commands/2d_commands/Sqr.htm b/#Test/help/commands/2d_commands/Sqr.htm similarity index 100% rename from _release/help/commands/2d_commands/Sqr.htm rename to #Test/help/commands/2d_commands/Sqr.htm diff --git a/_release/help/commands/2d_commands/StartNetGame.htm b/#Test/help/commands/2d_commands/StartNetGame.htm similarity index 100% rename from _release/help/commands/2d_commands/StartNetGame.htm rename to #Test/help/commands/2d_commands/StartNetGame.htm diff --git a/_release/help/commands/2d_commands/Step.htm b/#Test/help/commands/2d_commands/Step.htm similarity index 100% rename from _release/help/commands/2d_commands/Step.htm rename to #Test/help/commands/2d_commands/Step.htm diff --git a/_release/help/commands/2d_commands/Stop.htm b/#Test/help/commands/2d_commands/Stop.htm similarity index 100% rename from _release/help/commands/2d_commands/Stop.htm rename to #Test/help/commands/2d_commands/Stop.htm diff --git a/_release/help/commands/2d_commands/StopChannel.htm b/#Test/help/commands/2d_commands/StopChannel.htm similarity index 100% rename from _release/help/commands/2d_commands/StopChannel.htm rename to #Test/help/commands/2d_commands/StopChannel.htm diff --git a/_release/help/commands/2d_commands/StopNetGame.htm b/#Test/help/commands/2d_commands/StopNetGame.htm similarity index 100% rename from _release/help/commands/2d_commands/StopNetGame.htm rename to #Test/help/commands/2d_commands/StopNetGame.htm diff --git a/_release/help/commands/2d_commands/Str.htm b/#Test/help/commands/2d_commands/Str.htm similarity index 100% rename from _release/help/commands/2d_commands/Str.htm rename to #Test/help/commands/2d_commands/Str.htm diff --git a/_release/help/commands/2d_commands/String.htm b/#Test/help/commands/2d_commands/String.htm similarity index 100% rename from _release/help/commands/2d_commands/String.htm rename to #Test/help/commands/2d_commands/String.htm diff --git a/_release/help/commands/2d_commands/StringHeight.htm b/#Test/help/commands/2d_commands/StringHeight.htm similarity index 100% rename from _release/help/commands/2d_commands/StringHeight.htm rename to #Test/help/commands/2d_commands/StringHeight.htm diff --git a/_release/help/commands/2d_commands/StringWidth.htm b/#Test/help/commands/2d_commands/StringWidth.htm similarity index 100% rename from _release/help/commands/2d_commands/StringWidth.htm rename to #Test/help/commands/2d_commands/StringWidth.htm diff --git a/_release/help/commands/2d_commands/SystemProperty.htm b/#Test/help/commands/2d_commands/SystemProperty.htm similarity index 100% rename from _release/help/commands/2d_commands/SystemProperty.htm rename to #Test/help/commands/2d_commands/SystemProperty.htm diff --git a/_release/help/commands/2d_commands/TCPTimeOuts.htm b/#Test/help/commands/2d_commands/TCPTimeOuts.htm similarity index 100% rename from _release/help/commands/2d_commands/TCPTimeOuts.htm rename to #Test/help/commands/2d_commands/TCPTimeOuts.htm diff --git a/_release/help/commands/2d_commands/TFormFilter.htm b/#Test/help/commands/2d_commands/TFormFilter.htm similarity index 100% rename from _release/help/commands/2d_commands/TFormFilter.htm rename to #Test/help/commands/2d_commands/TFormFilter.htm diff --git a/_release/help/commands/2d_commands/Tan.htm b/#Test/help/commands/2d_commands/Tan.htm similarity index 100% rename from _release/help/commands/2d_commands/Tan.htm rename to #Test/help/commands/2d_commands/Tan.htm diff --git a/_release/help/commands/2d_commands/Text.htm b/#Test/help/commands/2d_commands/Text.htm similarity index 100% rename from _release/help/commands/2d_commands/Text.htm rename to #Test/help/commands/2d_commands/Text.htm diff --git a/_release/help/commands/2d_commands/Then.htm b/#Test/help/commands/2d_commands/Then.htm similarity index 100% rename from _release/help/commands/2d_commands/Then.htm rename to #Test/help/commands/2d_commands/Then.htm diff --git a/_release/help/commands/2d_commands/TileBlock.htm b/#Test/help/commands/2d_commands/TileBlock.htm similarity index 100% rename from _release/help/commands/2d_commands/TileBlock.htm rename to #Test/help/commands/2d_commands/TileBlock.htm diff --git a/_release/help/commands/2d_commands/TileImage.htm b/#Test/help/commands/2d_commands/TileImage.htm similarity index 100% rename from _release/help/commands/2d_commands/TileImage.htm rename to #Test/help/commands/2d_commands/TileImage.htm diff --git a/_release/help/commands/2d_commands/To.htm b/#Test/help/commands/2d_commands/To.htm similarity index 100% rename from _release/help/commands/2d_commands/To.htm rename to #Test/help/commands/2d_commands/To.htm diff --git a/_release/help/commands/2d_commands/TotalVidMem.htm b/#Test/help/commands/2d_commands/TotalVidMem.htm similarity index 100% rename from _release/help/commands/2d_commands/TotalVidMem.htm rename to #Test/help/commands/2d_commands/TotalVidMem.htm diff --git a/_release/help/commands/2d_commands/Trim.htm b/#Test/help/commands/2d_commands/Trim.htm similarity index 100% rename from _release/help/commands/2d_commands/Trim.htm rename to #Test/help/commands/2d_commands/Trim.htm diff --git a/_release/help/commands/2d_commands/True.htm b/#Test/help/commands/2d_commands/True.htm similarity index 100% rename from _release/help/commands/2d_commands/True.htm rename to #Test/help/commands/2d_commands/True.htm diff --git a/_release/help/commands/2d_commands/Type.htm b/#Test/help/commands/2d_commands/Type.htm similarity index 100% rename from _release/help/commands/2d_commands/Type.htm rename to #Test/help/commands/2d_commands/Type.htm diff --git a/_release/help/commands/2d_commands/UnlockBuffer.htm b/#Test/help/commands/2d_commands/UnlockBuffer.htm similarity index 100% rename from _release/help/commands/2d_commands/UnlockBuffer.htm rename to #Test/help/commands/2d_commands/UnlockBuffer.htm diff --git a/_release/help/commands/2d_commands/Until.htm b/#Test/help/commands/2d_commands/Until.htm similarity index 100% rename from _release/help/commands/2d_commands/Until.htm rename to #Test/help/commands/2d_commands/Until.htm diff --git a/_release/help/commands/2d_commands/Upper.htm b/#Test/help/commands/2d_commands/Upper.htm similarity index 100% rename from _release/help/commands/2d_commands/Upper.htm rename to #Test/help/commands/2d_commands/Upper.htm diff --git a/_release/help/commands/2d_commands/VWait.htm b/#Test/help/commands/2d_commands/VWait.htm similarity index 100% rename from _release/help/commands/2d_commands/VWait.htm rename to #Test/help/commands/2d_commands/VWait.htm diff --git a/_release/help/commands/2d_commands/Viewport.htm b/#Test/help/commands/2d_commands/Viewport.htm similarity index 100% rename from _release/help/commands/2d_commands/Viewport.htm rename to #Test/help/commands/2d_commands/Viewport.htm diff --git a/_release/help/commands/2d_commands/WaitJoy.htm b/#Test/help/commands/2d_commands/WaitJoy.htm similarity index 100% rename from _release/help/commands/2d_commands/WaitJoy.htm rename to #Test/help/commands/2d_commands/WaitJoy.htm diff --git a/_release/help/commands/2d_commands/WaitKey.htm b/#Test/help/commands/2d_commands/WaitKey.htm similarity index 100% rename from _release/help/commands/2d_commands/WaitKey.htm rename to #Test/help/commands/2d_commands/WaitKey.htm diff --git a/_release/help/commands/2d_commands/WaitMouse.htm b/#Test/help/commands/2d_commands/WaitMouse.htm similarity index 100% rename from _release/help/commands/2d_commands/WaitMouse.htm rename to #Test/help/commands/2d_commands/WaitMouse.htm diff --git a/_release/help/commands/2d_commands/WaitTimer.htm b/#Test/help/commands/2d_commands/WaitTimer.htm similarity index 100% rename from _release/help/commands/2d_commands/WaitTimer.htm rename to #Test/help/commands/2d_commands/WaitTimer.htm diff --git a/_release/help/commands/2d_commands/Wend.htm b/#Test/help/commands/2d_commands/Wend.htm similarity index 100% rename from _release/help/commands/2d_commands/Wend.htm rename to #Test/help/commands/2d_commands/Wend.htm diff --git a/_release/help/commands/2d_commands/While.htm b/#Test/help/commands/2d_commands/While.htm similarity index 100% rename from _release/help/commands/2d_commands/While.htm rename to #Test/help/commands/2d_commands/While.htm diff --git a/_release/help/commands/2d_commands/Write.htm b/#Test/help/commands/2d_commands/Write.htm similarity index 100% rename from _release/help/commands/2d_commands/Write.htm rename to #Test/help/commands/2d_commands/Write.htm diff --git a/_release/help/commands/2d_commands/WriteByte.htm b/#Test/help/commands/2d_commands/WriteByte.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteByte.htm rename to #Test/help/commands/2d_commands/WriteByte.htm diff --git a/_release/help/commands/2d_commands/WriteBytes.htm b/#Test/help/commands/2d_commands/WriteBytes.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteBytes.htm rename to #Test/help/commands/2d_commands/WriteBytes.htm diff --git a/_release/help/commands/2d_commands/WriteFile.htm b/#Test/help/commands/2d_commands/WriteFile.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteFile.htm rename to #Test/help/commands/2d_commands/WriteFile.htm diff --git a/_release/help/commands/2d_commands/WriteFloat.htm b/#Test/help/commands/2d_commands/WriteFloat.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteFloat.htm rename to #Test/help/commands/2d_commands/WriteFloat.htm diff --git a/_release/help/commands/2d_commands/WriteInt.htm b/#Test/help/commands/2d_commands/WriteInt.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteInt.htm rename to #Test/help/commands/2d_commands/WriteInt.htm diff --git a/_release/help/commands/2d_commands/WriteLine.htm b/#Test/help/commands/2d_commands/WriteLine.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteLine.htm rename to #Test/help/commands/2d_commands/WriteLine.htm diff --git a/_release/help/commands/2d_commands/WritePixel.htm b/#Test/help/commands/2d_commands/WritePixel.htm similarity index 100% rename from _release/help/commands/2d_commands/WritePixel.htm rename to #Test/help/commands/2d_commands/WritePixel.htm diff --git a/_release/help/commands/2d_commands/WritePixelFast.htm b/#Test/help/commands/2d_commands/WritePixelFast.htm similarity index 100% rename from _release/help/commands/2d_commands/WritePixelFast.htm rename to #Test/help/commands/2d_commands/WritePixelFast.htm diff --git a/_release/help/commands/2d_commands/WriteShort.htm b/#Test/help/commands/2d_commands/WriteShort.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteShort.htm rename to #Test/help/commands/2d_commands/WriteShort.htm diff --git a/_release/help/commands/2d_commands/WriteString.htm b/#Test/help/commands/2d_commands/WriteString.htm similarity index 100% rename from _release/help/commands/2d_commands/WriteString.htm rename to #Test/help/commands/2d_commands/WriteString.htm diff --git a/_release/help/commands/2d_commands/Xor.htm b/#Test/help/commands/2d_commands/Xor.htm similarity index 100% rename from _release/help/commands/2d_commands/Xor.htm rename to #Test/help/commands/2d_commands/Xor.htm diff --git a/_release/help/commands/2d_commands/template.htm b/#Test/help/commands/2d_commands/template.htm similarity index 100% rename from _release/help/commands/2d_commands/template.htm rename to #Test/help/commands/2d_commands/template.htm diff --git a/_release/help/commands/3d_commands/AddAnimSeq.htm b/#Test/help/commands/3d_commands/AddAnimSeq.htm similarity index 100% rename from _release/help/commands/3d_commands/AddAnimSeq.htm rename to #Test/help/commands/3d_commands/AddAnimSeq.htm diff --git a/_release/help/commands/3d_commands/AddTriangle.htm b/#Test/help/commands/3d_commands/AddTriangle.htm similarity index 100% rename from _release/help/commands/3d_commands/AddTriangle.htm rename to #Test/help/commands/3d_commands/AddTriangle.htm diff --git a/_release/help/commands/3d_commands/AddVertex.htm b/#Test/help/commands/3d_commands/AddVertex.htm similarity index 100% rename from _release/help/commands/3d_commands/AddVertex.htm rename to #Test/help/commands/3d_commands/AddVertex.htm diff --git a/_release/help/commands/3d_commands/AlignToVector.htm b/#Test/help/commands/3d_commands/AlignToVector.htm similarity index 100% rename from _release/help/commands/3d_commands/AlignToVector.htm rename to #Test/help/commands/3d_commands/AlignToVector.htm diff --git a/_release/help/commands/3d_commands/AmbientLight.htm b/#Test/help/commands/3d_commands/AmbientLight.htm similarity index 100% rename from _release/help/commands/3d_commands/AmbientLight.htm rename to #Test/help/commands/3d_commands/AmbientLight.htm diff --git a/_release/help/commands/3d_commands/AnimLength.htm b/#Test/help/commands/3d_commands/AnimLength.htm similarity index 100% rename from _release/help/commands/3d_commands/AnimLength.htm rename to #Test/help/commands/3d_commands/AnimLength.htm diff --git a/_release/help/commands/3d_commands/AnimSeq.htm b/#Test/help/commands/3d_commands/AnimSeq.htm similarity index 100% rename from _release/help/commands/3d_commands/AnimSeq.htm rename to #Test/help/commands/3d_commands/AnimSeq.htm diff --git a/_release/help/commands/3d_commands/AnimTime.htm b/#Test/help/commands/3d_commands/AnimTime.htm similarity index 100% rename from _release/help/commands/3d_commands/AnimTime.htm rename to #Test/help/commands/3d_commands/AnimTime.htm diff --git a/_release/help/commands/3d_commands/Animate.htm b/#Test/help/commands/3d_commands/Animate.htm similarity index 100% rename from _release/help/commands/3d_commands/Animate.htm rename to #Test/help/commands/3d_commands/Animate.htm diff --git a/_release/help/commands/3d_commands/AnimateMD2.htm b/#Test/help/commands/3d_commands/AnimateMD2.htm similarity index 100% rename from _release/help/commands/3d_commands/AnimateMD2.htm rename to #Test/help/commands/3d_commands/AnimateMD2.htm diff --git a/_release/help/commands/3d_commands/Animating.htm b/#Test/help/commands/3d_commands/Animating.htm similarity index 100% rename from _release/help/commands/3d_commands/Animating.htm rename to #Test/help/commands/3d_commands/Animating.htm diff --git a/_release/help/commands/3d_commands/AntiAlias.htm b/#Test/help/commands/3d_commands/AntiAlias.htm similarity index 100% rename from _release/help/commands/3d_commands/AntiAlias.htm rename to #Test/help/commands/3d_commands/AntiAlias.htm diff --git a/_release/help/commands/3d_commands/BrushAlpha.htm b/#Test/help/commands/3d_commands/BrushAlpha.htm similarity index 100% rename from _release/help/commands/3d_commands/BrushAlpha.htm rename to #Test/help/commands/3d_commands/BrushAlpha.htm diff --git a/_release/help/commands/3d_commands/BrushBlend.htm b/#Test/help/commands/3d_commands/BrushBlend.htm similarity index 100% rename from _release/help/commands/3d_commands/BrushBlend.htm rename to #Test/help/commands/3d_commands/BrushBlend.htm diff --git a/_release/help/commands/3d_commands/BrushColor.htm b/#Test/help/commands/3d_commands/BrushColor.htm similarity index 100% rename from _release/help/commands/3d_commands/BrushColor.htm rename to #Test/help/commands/3d_commands/BrushColor.htm diff --git a/_release/help/commands/3d_commands/BrushFX.htm b/#Test/help/commands/3d_commands/BrushFX.htm similarity index 100% rename from _release/help/commands/3d_commands/BrushFX.htm rename to #Test/help/commands/3d_commands/BrushFX.htm diff --git a/_release/help/commands/3d_commands/BrushShininess.htm b/#Test/help/commands/3d_commands/BrushShininess.htm similarity index 100% rename from _release/help/commands/3d_commands/BrushShininess.htm rename to #Test/help/commands/3d_commands/BrushShininess.htm diff --git a/_release/help/commands/3d_commands/BrushTexture.htm b/#Test/help/commands/3d_commands/BrushTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/BrushTexture.htm rename to #Test/help/commands/3d_commands/BrushTexture.htm diff --git a/_release/help/commands/3d_commands/CameraClsColor.htm b/#Test/help/commands/3d_commands/CameraClsColor.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraClsColor.htm rename to #Test/help/commands/3d_commands/CameraClsColor.htm diff --git a/_release/help/commands/3d_commands/CameraClsMode.htm b/#Test/help/commands/3d_commands/CameraClsMode.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraClsMode.htm rename to #Test/help/commands/3d_commands/CameraClsMode.htm diff --git a/_release/help/commands/3d_commands/CameraFogColor.htm b/#Test/help/commands/3d_commands/CameraFogColor.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraFogColor.htm rename to #Test/help/commands/3d_commands/CameraFogColor.htm diff --git a/_release/help/commands/3d_commands/CameraFogMode.htm b/#Test/help/commands/3d_commands/CameraFogMode.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraFogMode.htm rename to #Test/help/commands/3d_commands/CameraFogMode.htm diff --git a/_release/help/commands/3d_commands/CameraFogRange.htm b/#Test/help/commands/3d_commands/CameraFogRange.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraFogRange.htm rename to #Test/help/commands/3d_commands/CameraFogRange.htm diff --git a/_release/help/commands/3d_commands/CameraPick.htm b/#Test/help/commands/3d_commands/CameraPick.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraPick.htm rename to #Test/help/commands/3d_commands/CameraPick.htm diff --git a/_release/help/commands/3d_commands/CameraProject.htm b/#Test/help/commands/3d_commands/CameraProject.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraProject.htm rename to #Test/help/commands/3d_commands/CameraProject.htm diff --git a/_release/help/commands/3d_commands/CameraRange.htm b/#Test/help/commands/3d_commands/CameraRange.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraRange.htm rename to #Test/help/commands/3d_commands/CameraRange.htm diff --git a/_release/help/commands/3d_commands/CameraViewport.htm b/#Test/help/commands/3d_commands/CameraViewport.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraViewport.htm rename to #Test/help/commands/3d_commands/CameraViewport.htm diff --git a/_release/help/commands/3d_commands/CameraZoom.htm b/#Test/help/commands/3d_commands/CameraZoom.htm similarity index 100% rename from _release/help/commands/3d_commands/CameraZoom.htm rename to #Test/help/commands/3d_commands/CameraZoom.htm diff --git a/_release/help/commands/3d_commands/CaptureWorld.htm b/#Test/help/commands/3d_commands/CaptureWorld.htm similarity index 100% rename from _release/help/commands/3d_commands/CaptureWorld.htm rename to #Test/help/commands/3d_commands/CaptureWorld.htm diff --git a/_release/help/commands/3d_commands/ClearCollisions.htm b/#Test/help/commands/3d_commands/ClearCollisions.htm similarity index 100% rename from _release/help/commands/3d_commands/ClearCollisions.htm rename to #Test/help/commands/3d_commands/ClearCollisions.htm diff --git a/_release/help/commands/3d_commands/ClearSurface.htm b/#Test/help/commands/3d_commands/ClearSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/ClearSurface.htm rename to #Test/help/commands/3d_commands/ClearSurface.htm diff --git a/_release/help/commands/3d_commands/ClearTextureFilters.htm b/#Test/help/commands/3d_commands/ClearTextureFilters.htm similarity index 100% rename from _release/help/commands/3d_commands/ClearTextureFilters.htm rename to #Test/help/commands/3d_commands/ClearTextureFilters.htm diff --git a/_release/help/commands/3d_commands/ClearWorld.htm b/#Test/help/commands/3d_commands/ClearWorld.htm similarity index 100% rename from _release/help/commands/3d_commands/ClearWorld.htm rename to #Test/help/commands/3d_commands/ClearWorld.htm diff --git a/_release/help/commands/3d_commands/CollisionEntity.htm b/#Test/help/commands/3d_commands/CollisionEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionEntity.htm rename to #Test/help/commands/3d_commands/CollisionEntity.htm diff --git a/_release/help/commands/3d_commands/CollisionNX.htm b/#Test/help/commands/3d_commands/CollisionNX.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionNX.htm rename to #Test/help/commands/3d_commands/CollisionNX.htm diff --git a/_release/help/commands/3d_commands/CollisionNY.htm b/#Test/help/commands/3d_commands/CollisionNY.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionNY.htm rename to #Test/help/commands/3d_commands/CollisionNY.htm diff --git a/_release/help/commands/3d_commands/CollisionNZ.htm b/#Test/help/commands/3d_commands/CollisionNZ.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionNZ.htm rename to #Test/help/commands/3d_commands/CollisionNZ.htm diff --git a/_release/help/commands/3d_commands/CollisionSurface.htm b/#Test/help/commands/3d_commands/CollisionSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionSurface.htm rename to #Test/help/commands/3d_commands/CollisionSurface.htm diff --git a/_release/help/commands/3d_commands/CollisionTime.htm b/#Test/help/commands/3d_commands/CollisionTime.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionTime.htm rename to #Test/help/commands/3d_commands/CollisionTime.htm diff --git a/_release/help/commands/3d_commands/CollisionTriangle.htm b/#Test/help/commands/3d_commands/CollisionTriangle.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionTriangle.htm rename to #Test/help/commands/3d_commands/CollisionTriangle.htm diff --git a/_release/help/commands/3d_commands/CollisionX.htm b/#Test/help/commands/3d_commands/CollisionX.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionX.htm rename to #Test/help/commands/3d_commands/CollisionX.htm diff --git a/_release/help/commands/3d_commands/CollisionY.htm b/#Test/help/commands/3d_commands/CollisionY.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionY.htm rename to #Test/help/commands/3d_commands/CollisionY.htm diff --git a/_release/help/commands/3d_commands/CollisionZ.htm b/#Test/help/commands/3d_commands/CollisionZ.htm similarity index 100% rename from _release/help/commands/3d_commands/CollisionZ.htm rename to #Test/help/commands/3d_commands/CollisionZ.htm diff --git a/_release/help/commands/3d_commands/Collisions.htm b/#Test/help/commands/3d_commands/Collisions.htm similarity index 100% rename from _release/help/commands/3d_commands/Collisions.htm rename to #Test/help/commands/3d_commands/Collisions.htm diff --git a/_release/help/commands/3d_commands/CopyEntity.htm b/#Test/help/commands/3d_commands/CopyEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/CopyEntity.htm rename to #Test/help/commands/3d_commands/CopyEntity.htm diff --git a/_release/help/commands/3d_commands/CountChildren.htm b/#Test/help/commands/3d_commands/CountChildren.htm similarity index 100% rename from _release/help/commands/3d_commands/CountChildren.htm rename to #Test/help/commands/3d_commands/CountChildren.htm diff --git a/_release/help/commands/3d_commands/CountCollisions.htm b/#Test/help/commands/3d_commands/CountCollisions.htm similarity index 100% rename from _release/help/commands/3d_commands/CountCollisions.htm rename to #Test/help/commands/3d_commands/CountCollisions.htm diff --git a/_release/help/commands/3d_commands/CountSurfaces.htm b/#Test/help/commands/3d_commands/CountSurfaces.htm similarity index 100% rename from _release/help/commands/3d_commands/CountSurfaces.htm rename to #Test/help/commands/3d_commands/CountSurfaces.htm diff --git a/_release/help/commands/3d_commands/CountTriangles.htm b/#Test/help/commands/3d_commands/CountTriangles.htm similarity index 100% rename from _release/help/commands/3d_commands/CountTriangles.htm rename to #Test/help/commands/3d_commands/CountTriangles.htm diff --git a/_release/help/commands/3d_commands/CountVertices.htm b/#Test/help/commands/3d_commands/CountVertices.htm similarity index 100% rename from _release/help/commands/3d_commands/CountVertices.htm rename to #Test/help/commands/3d_commands/CountVertices.htm diff --git a/_release/help/commands/3d_commands/CreateBrush.htm b/#Test/help/commands/3d_commands/CreateBrush.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateBrush.htm rename to #Test/help/commands/3d_commands/CreateBrush.htm diff --git a/_release/help/commands/3d_commands/CreateCamera.htm b/#Test/help/commands/3d_commands/CreateCamera.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateCamera.htm rename to #Test/help/commands/3d_commands/CreateCamera.htm diff --git a/_release/help/commands/3d_commands/CreateCone.htm b/#Test/help/commands/3d_commands/CreateCone.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateCone.htm rename to #Test/help/commands/3d_commands/CreateCone.htm diff --git a/_release/help/commands/3d_commands/CreateCube.htm b/#Test/help/commands/3d_commands/CreateCube.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateCube.htm rename to #Test/help/commands/3d_commands/CreateCube.htm diff --git a/_release/help/commands/3d_commands/CreateCylinder.htm b/#Test/help/commands/3d_commands/CreateCylinder.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateCylinder.htm rename to #Test/help/commands/3d_commands/CreateCylinder.htm diff --git a/_release/help/commands/3d_commands/CreateLight.htm b/#Test/help/commands/3d_commands/CreateLight.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateLight.htm rename to #Test/help/commands/3d_commands/CreateLight.htm diff --git a/_release/help/commands/3d_commands/CreateListener.htm b/#Test/help/commands/3d_commands/CreateListener.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateListener.htm rename to #Test/help/commands/3d_commands/CreateListener.htm diff --git a/_release/help/commands/3d_commands/CreateMesh.htm b/#Test/help/commands/3d_commands/CreateMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateMesh.htm rename to #Test/help/commands/3d_commands/CreateMesh.htm diff --git a/_release/help/commands/3d_commands/CreateMirror.htm b/#Test/help/commands/3d_commands/CreateMirror.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateMirror.htm rename to #Test/help/commands/3d_commands/CreateMirror.htm diff --git a/_release/help/commands/3d_commands/CreatePivot.htm b/#Test/help/commands/3d_commands/CreatePivot.htm similarity index 100% rename from _release/help/commands/3d_commands/CreatePivot.htm rename to #Test/help/commands/3d_commands/CreatePivot.htm diff --git a/_release/help/commands/3d_commands/CreatePlane.htm b/#Test/help/commands/3d_commands/CreatePlane.htm similarity index 100% rename from _release/help/commands/3d_commands/CreatePlane.htm rename to #Test/help/commands/3d_commands/CreatePlane.htm diff --git a/_release/help/commands/3d_commands/CreateSphere.htm b/#Test/help/commands/3d_commands/CreateSphere.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateSphere.htm rename to #Test/help/commands/3d_commands/CreateSphere.htm diff --git a/_release/help/commands/3d_commands/CreateSprite.htm b/#Test/help/commands/3d_commands/CreateSprite.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateSprite.htm rename to #Test/help/commands/3d_commands/CreateSprite.htm diff --git a/_release/help/commands/3d_commands/CreateSurface.htm b/#Test/help/commands/3d_commands/CreateSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateSurface.htm rename to #Test/help/commands/3d_commands/CreateSurface.htm diff --git a/_release/help/commands/3d_commands/CreateTerrain.htm b/#Test/help/commands/3d_commands/CreateTerrain.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateTerrain.htm rename to #Test/help/commands/3d_commands/CreateTerrain.htm diff --git a/_release/help/commands/3d_commands/CreateTexture.htm b/#Test/help/commands/3d_commands/CreateTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/CreateTexture.htm rename to #Test/help/commands/3d_commands/CreateTexture.htm diff --git a/_release/help/commands/3d_commands/Dither.htm b/#Test/help/commands/3d_commands/Dither.htm similarity index 100% rename from _release/help/commands/3d_commands/Dither.htm rename to #Test/help/commands/3d_commands/Dither.htm diff --git a/_release/help/commands/3d_commands/EmitSound.htm b/#Test/help/commands/3d_commands/EmitSound.htm similarity index 100% rename from _release/help/commands/3d_commands/EmitSound.htm rename to #Test/help/commands/3d_commands/EmitSound.htm diff --git a/_release/help/commands/3d_commands/EntityAlpha.htm b/#Test/help/commands/3d_commands/EntityAlpha.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityAlpha.htm rename to #Test/help/commands/3d_commands/EntityAlpha.htm diff --git a/_release/help/commands/3d_commands/EntityAnimTime.htm b/#Test/help/commands/3d_commands/EntityAnimTime.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityAnimTime.htm rename to #Test/help/commands/3d_commands/EntityAnimTime.htm diff --git a/_release/help/commands/3d_commands/EntityAnimating.htm b/#Test/help/commands/3d_commands/EntityAnimating.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityAnimating.htm rename to #Test/help/commands/3d_commands/EntityAnimating.htm diff --git a/_release/help/commands/3d_commands/EntityAutoFade.htm b/#Test/help/commands/3d_commands/EntityAutoFade.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityAutoFade.htm rename to #Test/help/commands/3d_commands/EntityAutoFade.htm diff --git a/_release/help/commands/3d_commands/EntityBlend.htm b/#Test/help/commands/3d_commands/EntityBlend.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityBlend.htm rename to #Test/help/commands/3d_commands/EntityBlend.htm diff --git a/_release/help/commands/3d_commands/EntityBox.htm b/#Test/help/commands/3d_commands/EntityBox.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityBox.htm rename to #Test/help/commands/3d_commands/EntityBox.htm diff --git a/_release/help/commands/3d_commands/EntityCollided.htm b/#Test/help/commands/3d_commands/EntityCollided.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityCollided.htm rename to #Test/help/commands/3d_commands/EntityCollided.htm diff --git a/_release/help/commands/3d_commands/EntityColor.htm b/#Test/help/commands/3d_commands/EntityColor.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityColor.htm rename to #Test/help/commands/3d_commands/EntityColor.htm diff --git a/_release/help/commands/3d_commands/EntityDistance.htm b/#Test/help/commands/3d_commands/EntityDistance.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityDistance.htm rename to #Test/help/commands/3d_commands/EntityDistance.htm diff --git a/_release/help/commands/3d_commands/EntityFX.htm b/#Test/help/commands/3d_commands/EntityFX.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityFX.htm rename to #Test/help/commands/3d_commands/EntityFX.htm diff --git a/_release/help/commands/3d_commands/EntityInView.htm b/#Test/help/commands/3d_commands/EntityInView.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityInView.htm rename to #Test/help/commands/3d_commands/EntityInView.htm diff --git a/_release/help/commands/3d_commands/EntityName.htm b/#Test/help/commands/3d_commands/EntityName.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityName.htm rename to #Test/help/commands/3d_commands/EntityName.htm diff --git a/_release/help/commands/3d_commands/EntityOrder.htm b/#Test/help/commands/3d_commands/EntityOrder.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityOrder.htm rename to #Test/help/commands/3d_commands/EntityOrder.htm diff --git a/_release/help/commands/3d_commands/EntityParent.htm b/#Test/help/commands/3d_commands/EntityParent.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityParent.htm rename to #Test/help/commands/3d_commands/EntityParent.htm diff --git a/_release/help/commands/3d_commands/EntityPick.htm b/#Test/help/commands/3d_commands/EntityPick.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityPick.htm rename to #Test/help/commands/3d_commands/EntityPick.htm diff --git a/_release/help/commands/3d_commands/EntityPickMode.htm b/#Test/help/commands/3d_commands/EntityPickMode.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityPickMode.htm rename to #Test/help/commands/3d_commands/EntityPickMode.htm diff --git a/_release/help/commands/3d_commands/EntityPitch.htm b/#Test/help/commands/3d_commands/EntityPitch.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityPitch.htm rename to #Test/help/commands/3d_commands/EntityPitch.htm diff --git a/_release/help/commands/3d_commands/EntityRadius.htm b/#Test/help/commands/3d_commands/EntityRadius.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityRadius.htm rename to #Test/help/commands/3d_commands/EntityRadius.htm diff --git a/_release/help/commands/3d_commands/EntityRoll.htm b/#Test/help/commands/3d_commands/EntityRoll.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityRoll.htm rename to #Test/help/commands/3d_commands/EntityRoll.htm diff --git a/_release/help/commands/3d_commands/EntityShininess.htm b/#Test/help/commands/3d_commands/EntityShininess.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityShininess.htm rename to #Test/help/commands/3d_commands/EntityShininess.htm diff --git a/_release/help/commands/3d_commands/EntityTexture.htm b/#Test/help/commands/3d_commands/EntityTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityTexture.htm rename to #Test/help/commands/3d_commands/EntityTexture.htm diff --git a/_release/help/commands/3d_commands/EntityType.htm b/#Test/help/commands/3d_commands/EntityType.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityType.htm rename to #Test/help/commands/3d_commands/EntityType.htm diff --git a/_release/help/commands/3d_commands/EntityVisible.htm b/#Test/help/commands/3d_commands/EntityVisible.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityVisible.htm rename to #Test/help/commands/3d_commands/EntityVisible.htm diff --git a/_release/help/commands/3d_commands/EntityX.htm b/#Test/help/commands/3d_commands/EntityX.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityX.htm rename to #Test/help/commands/3d_commands/EntityX.htm diff --git a/_release/help/commands/3d_commands/EntityY.htm b/#Test/help/commands/3d_commands/EntityY.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityY.htm rename to #Test/help/commands/3d_commands/EntityY.htm diff --git a/_release/help/commands/3d_commands/EntityYaw.htm b/#Test/help/commands/3d_commands/EntityYaw.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityYaw.htm rename to #Test/help/commands/3d_commands/EntityYaw.htm diff --git a/_release/help/commands/3d_commands/EntityZ.htm b/#Test/help/commands/3d_commands/EntityZ.htm similarity index 100% rename from _release/help/commands/3d_commands/EntityZ.htm rename to #Test/help/commands/3d_commands/EntityZ.htm diff --git a/_release/help/commands/3d_commands/FindChild.htm b/#Test/help/commands/3d_commands/FindChild.htm similarity index 100% rename from _release/help/commands/3d_commands/FindChild.htm rename to #Test/help/commands/3d_commands/FindChild.htm diff --git a/_release/help/commands/3d_commands/FindSurface.htm b/#Test/help/commands/3d_commands/FindSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/FindSurface.htm rename to #Test/help/commands/3d_commands/FindSurface.htm diff --git a/_release/help/commands/3d_commands/FitMesh.htm b/#Test/help/commands/3d_commands/FitMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/FitMesh.htm rename to #Test/help/commands/3d_commands/FitMesh.htm diff --git a/_release/help/commands/3d_commands/FlipMesh.htm b/#Test/help/commands/3d_commands/FlipMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/FlipMesh.htm rename to #Test/help/commands/3d_commands/FlipMesh.htm diff --git a/_release/help/commands/3d_commands/FreeBrush.htm b/#Test/help/commands/3d_commands/FreeBrush.htm similarity index 100% rename from _release/help/commands/3d_commands/FreeBrush.htm rename to #Test/help/commands/3d_commands/FreeBrush.htm diff --git a/_release/help/commands/3d_commands/FreeEntity.htm b/#Test/help/commands/3d_commands/FreeEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/FreeEntity.htm rename to #Test/help/commands/3d_commands/FreeEntity.htm diff --git a/_release/help/commands/3d_commands/FreeTexture.htm b/#Test/help/commands/3d_commands/FreeTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/FreeTexture.htm rename to #Test/help/commands/3d_commands/FreeTexture.htm diff --git a/_release/help/commands/3d_commands/GetChild.htm b/#Test/help/commands/3d_commands/GetChild.htm similarity index 100% rename from _release/help/commands/3d_commands/GetChild.htm rename to #Test/help/commands/3d_commands/GetChild.htm diff --git a/_release/help/commands/3d_commands/GetEntityType.htm b/#Test/help/commands/3d_commands/GetEntityType.htm similarity index 100% rename from _release/help/commands/3d_commands/GetEntityType.htm rename to #Test/help/commands/3d_commands/GetEntityType.htm diff --git a/_release/help/commands/3d_commands/GetParent.htm b/#Test/help/commands/3d_commands/GetParent.htm similarity index 100% rename from _release/help/commands/3d_commands/GetParent.htm rename to #Test/help/commands/3d_commands/GetParent.htm diff --git a/_release/help/commands/3d_commands/GetSurface.htm b/#Test/help/commands/3d_commands/GetSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/GetSurface.htm rename to #Test/help/commands/3d_commands/GetSurface.htm diff --git a/_release/help/commands/3d_commands/GfxDriver3D.htm b/#Test/help/commands/3d_commands/GfxDriver3D.htm similarity index 100% rename from _release/help/commands/3d_commands/GfxDriver3D.htm rename to #Test/help/commands/3d_commands/GfxDriver3D.htm diff --git a/_release/help/commands/3d_commands/GfxMode3D.htm b/#Test/help/commands/3d_commands/GfxMode3D.htm similarity index 100% rename from _release/help/commands/3d_commands/GfxMode3D.htm rename to #Test/help/commands/3d_commands/GfxMode3D.htm diff --git a/_release/help/commands/3d_commands/GfxModeExists.htm b/#Test/help/commands/3d_commands/GfxModeExists.htm similarity index 100% rename from _release/help/commands/3d_commands/GfxModeExists.htm rename to #Test/help/commands/3d_commands/GfxModeExists.htm diff --git a/_release/help/commands/3d_commands/Graphics3D.htm b/#Test/help/commands/3d_commands/Graphics3D.htm similarity index 100% rename from _release/help/commands/3d_commands/Graphics3D.htm rename to #Test/help/commands/3d_commands/Graphics3D.htm diff --git a/_release/help/commands/3d_commands/HWMultiTex.htm b/#Test/help/commands/3d_commands/HWMultiTex.htm similarity index 100% rename from _release/help/commands/3d_commands/HWMultiTex.htm rename to #Test/help/commands/3d_commands/HWMultiTex.htm diff --git a/_release/help/commands/3d_commands/HandleSprite.htm b/#Test/help/commands/3d_commands/HandleSprite.htm similarity index 100% rename from _release/help/commands/3d_commands/HandleSprite.htm rename to #Test/help/commands/3d_commands/HandleSprite.htm diff --git a/_release/help/commands/3d_commands/HideEntity.htm b/#Test/help/commands/3d_commands/HideEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/HideEntity.htm rename to #Test/help/commands/3d_commands/HideEntity.htm diff --git a/_release/help/commands/3d_commands/LightColor.htm b/#Test/help/commands/3d_commands/LightColor.htm similarity index 100% rename from _release/help/commands/3d_commands/LightColor.htm rename to #Test/help/commands/3d_commands/LightColor.htm diff --git a/_release/help/commands/3d_commands/LightConeAngles.htm b/#Test/help/commands/3d_commands/LightConeAngles.htm similarity index 100% rename from _release/help/commands/3d_commands/LightConeAngles.htm rename to #Test/help/commands/3d_commands/LightConeAngles.htm diff --git a/_release/help/commands/3d_commands/LightMesh.htm b/#Test/help/commands/3d_commands/LightMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/LightMesh.htm rename to #Test/help/commands/3d_commands/LightMesh.htm diff --git a/_release/help/commands/3d_commands/LightRange.htm b/#Test/help/commands/3d_commands/LightRange.htm similarity index 100% rename from _release/help/commands/3d_commands/LightRange.htm rename to #Test/help/commands/3d_commands/LightRange.htm diff --git a/_release/help/commands/3d_commands/LinePick.htm b/#Test/help/commands/3d_commands/LinePick.htm similarity index 100% rename from _release/help/commands/3d_commands/LinePick.htm rename to #Test/help/commands/3d_commands/LinePick.htm diff --git a/_release/help/commands/3d_commands/Load3DSound.htm b/#Test/help/commands/3d_commands/Load3DSound.htm similarity index 100% rename from _release/help/commands/3d_commands/Load3DSound.htm rename to #Test/help/commands/3d_commands/Load3DSound.htm diff --git a/_release/help/commands/3d_commands/LoadAnimMesh.htm b/#Test/help/commands/3d_commands/LoadAnimMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadAnimMesh.htm rename to #Test/help/commands/3d_commands/LoadAnimMesh.htm diff --git a/_release/help/commands/3d_commands/LoadAnimSeq.htm b/#Test/help/commands/3d_commands/LoadAnimSeq.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadAnimSeq.htm rename to #Test/help/commands/3d_commands/LoadAnimSeq.htm diff --git a/_release/help/commands/3d_commands/LoadAnimTexture.htm b/#Test/help/commands/3d_commands/LoadAnimTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadAnimTexture.htm rename to #Test/help/commands/3d_commands/LoadAnimTexture.htm diff --git a/_release/help/commands/3d_commands/LoadBrush.htm b/#Test/help/commands/3d_commands/LoadBrush.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadBrush.htm rename to #Test/help/commands/3d_commands/LoadBrush.htm diff --git a/_release/help/commands/3d_commands/LoadMD2.htm b/#Test/help/commands/3d_commands/LoadMD2.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadMD2.htm rename to #Test/help/commands/3d_commands/LoadMD2.htm diff --git a/_release/help/commands/3d_commands/LoadMesh.htm b/#Test/help/commands/3d_commands/LoadMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadMesh.htm rename to #Test/help/commands/3d_commands/LoadMesh.htm diff --git a/_release/help/commands/3d_commands/LoadSprite.htm b/#Test/help/commands/3d_commands/LoadSprite.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadSprite.htm rename to #Test/help/commands/3d_commands/LoadSprite.htm diff --git a/_release/help/commands/3d_commands/LoadTerrain.htm b/#Test/help/commands/3d_commands/LoadTerrain.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadTerrain.htm rename to #Test/help/commands/3d_commands/LoadTerrain.htm diff --git a/_release/help/commands/3d_commands/LoadTexture.htm b/#Test/help/commands/3d_commands/LoadTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/LoadTexture.htm rename to #Test/help/commands/3d_commands/LoadTexture.htm diff --git a/_release/help/commands/3d_commands/LoaderMatrix.htm b/#Test/help/commands/3d_commands/LoaderMatrix.htm similarity index 100% rename from _release/help/commands/3d_commands/LoaderMatrix.htm rename to #Test/help/commands/3d_commands/LoaderMatrix.htm diff --git a/_release/help/commands/3d_commands/MD2AnimLength.htm b/#Test/help/commands/3d_commands/MD2AnimLength.htm similarity index 100% rename from _release/help/commands/3d_commands/MD2AnimLength.htm rename to #Test/help/commands/3d_commands/MD2AnimLength.htm diff --git a/_release/help/commands/3d_commands/MD2AnimTime.htm b/#Test/help/commands/3d_commands/MD2AnimTime.htm similarity index 100% rename from _release/help/commands/3d_commands/MD2AnimTime.htm rename to #Test/help/commands/3d_commands/MD2AnimTime.htm diff --git a/_release/help/commands/3d_commands/MD2Animating.htm b/#Test/help/commands/3d_commands/MD2Animating.htm similarity index 100% rename from _release/help/commands/3d_commands/MD2Animating.htm rename to #Test/help/commands/3d_commands/MD2Animating.htm diff --git a/_release/help/commands/3d_commands/MeshDepth.htm b/#Test/help/commands/3d_commands/MeshDepth.htm similarity index 100% rename from _release/help/commands/3d_commands/MeshDepth.htm rename to #Test/help/commands/3d_commands/MeshDepth.htm diff --git a/_release/help/commands/3d_commands/MeshHeight.htm b/#Test/help/commands/3d_commands/MeshHeight.htm similarity index 100% rename from _release/help/commands/3d_commands/MeshHeight.htm rename to #Test/help/commands/3d_commands/MeshHeight.htm diff --git a/_release/help/commands/3d_commands/MeshWidth.htm b/#Test/help/commands/3d_commands/MeshWidth.htm similarity index 100% rename from _release/help/commands/3d_commands/MeshWidth.htm rename to #Test/help/commands/3d_commands/MeshWidth.htm diff --git a/_release/help/commands/3d_commands/MeshesIntersect.htm b/#Test/help/commands/3d_commands/MeshesIntersect.htm similarity index 100% rename from _release/help/commands/3d_commands/MeshesIntersect.htm rename to #Test/help/commands/3d_commands/MeshesIntersect.htm diff --git a/_release/help/commands/3d_commands/ModifyTerrain.htm b/#Test/help/commands/3d_commands/ModifyTerrain.htm similarity index 100% rename from _release/help/commands/3d_commands/ModifyTerrain.htm rename to #Test/help/commands/3d_commands/ModifyTerrain.htm diff --git a/_release/help/commands/3d_commands/MoveEntity.htm b/#Test/help/commands/3d_commands/MoveEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/MoveEntity.htm rename to #Test/help/commands/3d_commands/MoveEntity.htm diff --git a/_release/help/commands/3d_commands/NameEntity.htm b/#Test/help/commands/3d_commands/NameEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/NameEntity.htm rename to #Test/help/commands/3d_commands/NameEntity.htm diff --git a/_release/help/commands/3d_commands/PaintEntity.htm b/#Test/help/commands/3d_commands/PaintEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/PaintEntity.htm rename to #Test/help/commands/3d_commands/PaintEntity.htm diff --git a/_release/help/commands/3d_commands/PaintMesh.htm b/#Test/help/commands/3d_commands/PaintMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/PaintMesh.htm rename to #Test/help/commands/3d_commands/PaintMesh.htm diff --git a/_release/help/commands/3d_commands/PaintSurface.htm b/#Test/help/commands/3d_commands/PaintSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/PaintSurface.htm rename to #Test/help/commands/3d_commands/PaintSurface.htm diff --git a/_release/help/commands/3d_commands/PickedEntity.htm b/#Test/help/commands/3d_commands/PickedEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedEntity.htm rename to #Test/help/commands/3d_commands/PickedEntity.htm diff --git a/_release/help/commands/3d_commands/PickedNX.htm b/#Test/help/commands/3d_commands/PickedNX.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedNX.htm rename to #Test/help/commands/3d_commands/PickedNX.htm diff --git a/_release/help/commands/3d_commands/PickedNY.htm b/#Test/help/commands/3d_commands/PickedNY.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedNY.htm rename to #Test/help/commands/3d_commands/PickedNY.htm diff --git a/_release/help/commands/3d_commands/PickedNZ.htm b/#Test/help/commands/3d_commands/PickedNZ.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedNZ.htm rename to #Test/help/commands/3d_commands/PickedNZ.htm diff --git a/_release/help/commands/3d_commands/PickedSurface.htm b/#Test/help/commands/3d_commands/PickedSurface.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedSurface.htm rename to #Test/help/commands/3d_commands/PickedSurface.htm diff --git a/_release/help/commands/3d_commands/PickedTime.htm b/#Test/help/commands/3d_commands/PickedTime.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedTime.htm rename to #Test/help/commands/3d_commands/PickedTime.htm diff --git a/_release/help/commands/3d_commands/PickedTriangle.htm b/#Test/help/commands/3d_commands/PickedTriangle.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedTriangle.htm rename to #Test/help/commands/3d_commands/PickedTriangle.htm diff --git a/_release/help/commands/3d_commands/PickedX.htm b/#Test/help/commands/3d_commands/PickedX.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedX.htm rename to #Test/help/commands/3d_commands/PickedX.htm diff --git a/_release/help/commands/3d_commands/PickedY.htm b/#Test/help/commands/3d_commands/PickedY.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedY.htm rename to #Test/help/commands/3d_commands/PickedY.htm diff --git a/_release/help/commands/3d_commands/PickedZ.htm b/#Test/help/commands/3d_commands/PickedZ.htm similarity index 100% rename from _release/help/commands/3d_commands/PickedZ.htm rename to #Test/help/commands/3d_commands/PickedZ.htm diff --git a/_release/help/commands/3d_commands/PointEntity.htm b/#Test/help/commands/3d_commands/PointEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/PointEntity.htm rename to #Test/help/commands/3d_commands/PointEntity.htm diff --git a/_release/help/commands/3d_commands/PositionEntity.htm b/#Test/help/commands/3d_commands/PositionEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/PositionEntity.htm rename to #Test/help/commands/3d_commands/PositionEntity.htm diff --git a/_release/help/commands/3d_commands/PositionMesh.htm b/#Test/help/commands/3d_commands/PositionMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/PositionMesh.htm rename to #Test/help/commands/3d_commands/PositionMesh.htm diff --git a/_release/help/commands/3d_commands/PositionTexture.htm b/#Test/help/commands/3d_commands/PositionTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/PositionTexture.htm rename to #Test/help/commands/3d_commands/PositionTexture.htm diff --git a/_release/help/commands/3d_commands/ProjectedX.htm b/#Test/help/commands/3d_commands/ProjectedX.htm similarity index 100% rename from _release/help/commands/3d_commands/ProjectedX.htm rename to #Test/help/commands/3d_commands/ProjectedX.htm diff --git a/_release/help/commands/3d_commands/ProjectedY.htm b/#Test/help/commands/3d_commands/ProjectedY.htm similarity index 100% rename from _release/help/commands/3d_commands/ProjectedY.htm rename to #Test/help/commands/3d_commands/ProjectedY.htm diff --git a/_release/help/commands/3d_commands/ProjectedZ.htm b/#Test/help/commands/3d_commands/ProjectedZ.htm similarity index 100% rename from _release/help/commands/3d_commands/ProjectedZ.htm rename to #Test/help/commands/3d_commands/ProjectedZ.htm diff --git a/_release/help/commands/3d_commands/RenderWorld.htm b/#Test/help/commands/3d_commands/RenderWorld.htm similarity index 100% rename from _release/help/commands/3d_commands/RenderWorld.htm rename to #Test/help/commands/3d_commands/RenderWorld.htm diff --git a/_release/help/commands/3d_commands/ResetEntity.htm b/#Test/help/commands/3d_commands/ResetEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/ResetEntity.htm rename to #Test/help/commands/3d_commands/ResetEntity.htm diff --git a/_release/help/commands/3d_commands/RotateEntity.htm b/#Test/help/commands/3d_commands/RotateEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/RotateEntity.htm rename to #Test/help/commands/3d_commands/RotateEntity.htm diff --git a/_release/help/commands/3d_commands/RotateMesh.htm b/#Test/help/commands/3d_commands/RotateMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/RotateMesh.htm rename to #Test/help/commands/3d_commands/RotateMesh.htm diff --git a/_release/help/commands/3d_commands/RotateSprite.htm b/#Test/help/commands/3d_commands/RotateSprite.htm similarity index 100% rename from _release/help/commands/3d_commands/RotateSprite.htm rename to #Test/help/commands/3d_commands/RotateSprite.htm diff --git a/_release/help/commands/3d_commands/RotateTexture.htm b/#Test/help/commands/3d_commands/RotateTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/RotateTexture.htm rename to #Test/help/commands/3d_commands/RotateTexture.htm diff --git a/_release/help/commands/3d_commands/ScaleEntity.htm b/#Test/help/commands/3d_commands/ScaleEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/ScaleEntity.htm rename to #Test/help/commands/3d_commands/ScaleEntity.htm diff --git a/_release/help/commands/3d_commands/ScaleMesh.htm b/#Test/help/commands/3d_commands/ScaleMesh.htm similarity index 100% rename from _release/help/commands/3d_commands/ScaleMesh.htm rename to #Test/help/commands/3d_commands/ScaleMesh.htm diff --git a/_release/help/commands/3d_commands/ScaleSprite.htm b/#Test/help/commands/3d_commands/ScaleSprite.htm similarity index 100% rename from _release/help/commands/3d_commands/ScaleSprite.htm rename to #Test/help/commands/3d_commands/ScaleSprite.htm diff --git a/_release/help/commands/3d_commands/ScaleTexture.htm b/#Test/help/commands/3d_commands/ScaleTexture.htm similarity index 100% rename from _release/help/commands/3d_commands/ScaleTexture.htm rename to #Test/help/commands/3d_commands/ScaleTexture.htm diff --git a/_release/help/commands/3d_commands/SetAnimKey.htm b/#Test/help/commands/3d_commands/SetAnimKey.htm similarity index 100% rename from _release/help/commands/3d_commands/SetAnimKey.htm rename to #Test/help/commands/3d_commands/SetAnimKey.htm diff --git a/_release/help/commands/3d_commands/ShowEntity.htm b/#Test/help/commands/3d_commands/ShowEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/ShowEntity.htm rename to #Test/help/commands/3d_commands/ShowEntity.htm diff --git a/_release/help/commands/3d_commands/SpriteViewMode.htm b/#Test/help/commands/3d_commands/SpriteViewMode.htm similarity index 100% rename from _release/help/commands/3d_commands/SpriteViewMode.htm rename to #Test/help/commands/3d_commands/SpriteViewMode.htm diff --git a/_release/help/commands/3d_commands/TFormNormal.htm b/#Test/help/commands/3d_commands/TFormNormal.htm similarity index 100% rename from _release/help/commands/3d_commands/TFormNormal.htm rename to #Test/help/commands/3d_commands/TFormNormal.htm diff --git a/_release/help/commands/3d_commands/TFormPoint.htm b/#Test/help/commands/3d_commands/TFormPoint.htm similarity index 100% rename from _release/help/commands/3d_commands/TFormPoint.htm rename to #Test/help/commands/3d_commands/TFormPoint.htm diff --git a/_release/help/commands/3d_commands/TFormVector.htm b/#Test/help/commands/3d_commands/TFormVector.htm similarity index 100% rename from _release/help/commands/3d_commands/TFormVector.htm rename to #Test/help/commands/3d_commands/TFormVector.htm diff --git a/_release/help/commands/3d_commands/TFormedX.htm b/#Test/help/commands/3d_commands/TFormedX.htm similarity index 100% rename from _release/help/commands/3d_commands/TFormedX.htm rename to #Test/help/commands/3d_commands/TFormedX.htm diff --git a/_release/help/commands/3d_commands/TFormedY.htm b/#Test/help/commands/3d_commands/TFormedY.htm similarity index 100% rename from _release/help/commands/3d_commands/TFormedY.htm rename to #Test/help/commands/3d_commands/TFormedY.htm diff --git a/_release/help/commands/3d_commands/TFormedZ.htm b/#Test/help/commands/3d_commands/TFormedZ.htm similarity index 100% rename from _release/help/commands/3d_commands/TFormedZ.htm rename to #Test/help/commands/3d_commands/TFormedZ.htm diff --git a/_release/help/commands/3d_commands/TerrainDetail.htm b/#Test/help/commands/3d_commands/TerrainDetail.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainDetail.htm rename to #Test/help/commands/3d_commands/TerrainDetail.htm diff --git a/_release/help/commands/3d_commands/TerrainHeight.htm b/#Test/help/commands/3d_commands/TerrainHeight.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainHeight.htm rename to #Test/help/commands/3d_commands/TerrainHeight.htm diff --git a/_release/help/commands/3d_commands/TerrainShading.htm b/#Test/help/commands/3d_commands/TerrainShading.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainShading.htm rename to #Test/help/commands/3d_commands/TerrainShading.htm diff --git a/_release/help/commands/3d_commands/TerrainSize.htm b/#Test/help/commands/3d_commands/TerrainSize.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainSize.htm rename to #Test/help/commands/3d_commands/TerrainSize.htm diff --git a/_release/help/commands/3d_commands/TerrainX.htm b/#Test/help/commands/3d_commands/TerrainX.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainX.htm rename to #Test/help/commands/3d_commands/TerrainX.htm diff --git a/_release/help/commands/3d_commands/TerrainY.htm b/#Test/help/commands/3d_commands/TerrainY.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainY.htm rename to #Test/help/commands/3d_commands/TerrainY.htm diff --git a/_release/help/commands/3d_commands/TerrainZ.htm b/#Test/help/commands/3d_commands/TerrainZ.htm similarity index 100% rename from _release/help/commands/3d_commands/TerrainZ.htm rename to #Test/help/commands/3d_commands/TerrainZ.htm diff --git a/_release/help/commands/3d_commands/TextureBlend.htm b/#Test/help/commands/3d_commands/TextureBlend.htm similarity index 100% rename from _release/help/commands/3d_commands/TextureBlend.htm rename to #Test/help/commands/3d_commands/TextureBlend.htm diff --git a/_release/help/commands/3d_commands/TextureBuffer.htm b/#Test/help/commands/3d_commands/TextureBuffer.htm similarity index 100% rename from _release/help/commands/3d_commands/TextureBuffer.htm rename to #Test/help/commands/3d_commands/TextureBuffer.htm diff --git a/_release/help/commands/3d_commands/TextureCoords.htm b/#Test/help/commands/3d_commands/TextureCoords.htm similarity index 100% rename from _release/help/commands/3d_commands/TextureCoords.htm rename to #Test/help/commands/3d_commands/TextureCoords.htm diff --git a/_release/help/commands/3d_commands/TextureFilter.htm b/#Test/help/commands/3d_commands/TextureFilter.htm similarity index 100% rename from _release/help/commands/3d_commands/TextureFilter.htm rename to #Test/help/commands/3d_commands/TextureFilter.htm diff --git a/_release/help/commands/3d_commands/TextureHeight.htm b/#Test/help/commands/3d_commands/TextureHeight.htm similarity index 100% rename from _release/help/commands/3d_commands/TextureHeight.htm rename to #Test/help/commands/3d_commands/TextureHeight.htm diff --git a/_release/help/commands/3d_commands/TextureWidth.htm b/#Test/help/commands/3d_commands/TextureWidth.htm similarity index 100% rename from _release/help/commands/3d_commands/TextureWidth.htm rename to #Test/help/commands/3d_commands/TextureWidth.htm diff --git a/_release/help/commands/3d_commands/TranslateEntity.htm b/#Test/help/commands/3d_commands/TranslateEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/TranslateEntity.htm rename to #Test/help/commands/3d_commands/TranslateEntity.htm diff --git a/_release/help/commands/3d_commands/TriangleVertex.htm b/#Test/help/commands/3d_commands/TriangleVertex.htm similarity index 100% rename from _release/help/commands/3d_commands/TriangleVertex.htm rename to #Test/help/commands/3d_commands/TriangleVertex.htm diff --git a/_release/help/commands/3d_commands/TurnEntity.htm b/#Test/help/commands/3d_commands/TurnEntity.htm similarity index 100% rename from _release/help/commands/3d_commands/TurnEntity.htm rename to #Test/help/commands/3d_commands/TurnEntity.htm diff --git a/_release/help/commands/3d_commands/UpdateNormals.htm b/#Test/help/commands/3d_commands/UpdateNormals.htm similarity index 100% rename from _release/help/commands/3d_commands/UpdateNormals.htm rename to #Test/help/commands/3d_commands/UpdateNormals.htm diff --git a/_release/help/commands/3d_commands/UpdateWorld.htm b/#Test/help/commands/3d_commands/UpdateWorld.htm similarity index 100% rename from _release/help/commands/3d_commands/UpdateWorld.htm rename to #Test/help/commands/3d_commands/UpdateWorld.htm diff --git a/_release/help/commands/3d_commands/VertexBlue.htm b/#Test/help/commands/3d_commands/VertexBlue.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexBlue.htm rename to #Test/help/commands/3d_commands/VertexBlue.htm diff --git a/_release/help/commands/3d_commands/VertexColor.htm b/#Test/help/commands/3d_commands/VertexColor.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexColor.htm rename to #Test/help/commands/3d_commands/VertexColor.htm diff --git a/_release/help/commands/3d_commands/VertexCoords.htm b/#Test/help/commands/3d_commands/VertexCoords.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexCoords.htm rename to #Test/help/commands/3d_commands/VertexCoords.htm diff --git a/_release/help/commands/3d_commands/VertexGreen.htm b/#Test/help/commands/3d_commands/VertexGreen.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexGreen.htm rename to #Test/help/commands/3d_commands/VertexGreen.htm diff --git a/_release/help/commands/3d_commands/VertexNX.htm b/#Test/help/commands/3d_commands/VertexNX.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexNX.htm rename to #Test/help/commands/3d_commands/VertexNX.htm diff --git a/_release/help/commands/3d_commands/VertexNY.htm b/#Test/help/commands/3d_commands/VertexNY.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexNY.htm rename to #Test/help/commands/3d_commands/VertexNY.htm diff --git a/_release/help/commands/3d_commands/VertexNZ.htm b/#Test/help/commands/3d_commands/VertexNZ.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexNZ.htm rename to #Test/help/commands/3d_commands/VertexNZ.htm diff --git a/_release/help/commands/3d_commands/VertexNormal.htm b/#Test/help/commands/3d_commands/VertexNormal.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexNormal.htm rename to #Test/help/commands/3d_commands/VertexNormal.htm diff --git a/_release/help/commands/3d_commands/VertexRed.htm b/#Test/help/commands/3d_commands/VertexRed.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexRed.htm rename to #Test/help/commands/3d_commands/VertexRed.htm diff --git a/_release/help/commands/3d_commands/VertexTexCoords.htm b/#Test/help/commands/3d_commands/VertexTexCoords.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexTexCoords.htm rename to #Test/help/commands/3d_commands/VertexTexCoords.htm diff --git a/_release/help/commands/3d_commands/VertexU.htm b/#Test/help/commands/3d_commands/VertexU.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexU.htm rename to #Test/help/commands/3d_commands/VertexU.htm diff --git a/_release/help/commands/3d_commands/VertexV.htm b/#Test/help/commands/3d_commands/VertexV.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexV.htm rename to #Test/help/commands/3d_commands/VertexV.htm diff --git a/_release/help/commands/3d_commands/VertexW.htm b/#Test/help/commands/3d_commands/VertexW.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexW.htm rename to #Test/help/commands/3d_commands/VertexW.htm diff --git a/_release/help/commands/3d_commands/VertexX.htm b/#Test/help/commands/3d_commands/VertexX.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexX.htm rename to #Test/help/commands/3d_commands/VertexX.htm diff --git a/_release/help/commands/3d_commands/VertexY.htm b/#Test/help/commands/3d_commands/VertexY.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexY.htm rename to #Test/help/commands/3d_commands/VertexY.htm diff --git a/_release/help/commands/3d_commands/VertexZ.htm b/#Test/help/commands/3d_commands/VertexZ.htm similarity index 100% rename from _release/help/commands/3d_commands/VertexZ.htm rename to #Test/help/commands/3d_commands/VertexZ.htm diff --git a/_release/help/commands/3d_commands/WBuffer.htm b/#Test/help/commands/3d_commands/WBuffer.htm similarity index 100% rename from _release/help/commands/3d_commands/WBuffer.htm rename to #Test/help/commands/3d_commands/WBuffer.htm diff --git a/_release/help/commands/3d_commands/Windowed3D.htm b/#Test/help/commands/3d_commands/Windowed3D.htm similarity index 100% rename from _release/help/commands/3d_commands/Windowed3D.htm rename to #Test/help/commands/3d_commands/Windowed3D.htm diff --git a/_release/help/commands/3d_commands/Wireframe.htm b/#Test/help/commands/3d_commands/Wireframe.htm similarity index 100% rename from _release/help/commands/3d_commands/Wireframe.htm rename to #Test/help/commands/3d_commands/Wireframe.htm diff --git a/_release/help/commands/3d_commands/main.htm b/#Test/help/commands/3d_commands/main.htm similarity index 100% rename from _release/help/commands/3d_commands/main.htm rename to #Test/help/commands/3d_commands/main.htm diff --git a/_release/help/commands/3d_commands/template.htm b/#Test/help/commands/3d_commands/template.htm similarity index 100% rename from _release/help/commands/3d_commands/template.htm rename to #Test/help/commands/3d_commands/template.htm diff --git a/_release/help/commands/3d_examples/AddAnimSeq.bb b/#Test/help/commands/3d_examples/AddAnimSeq.bb similarity index 100% rename from _release/help/commands/3d_examples/AddAnimSeq.bb rename to #Test/help/commands/3d_examples/AddAnimSeq.bb diff --git a/_release/help/commands/3d_examples/AddTriangle.bb b/#Test/help/commands/3d_examples/AddTriangle.bb similarity index 100% rename from _release/help/commands/3d_examples/AddTriangle.bb rename to #Test/help/commands/3d_examples/AddTriangle.bb diff --git a/_release/help/commands/3d_examples/AddVertex.bb b/#Test/help/commands/3d_examples/AddVertex.bb similarity index 100% rename from _release/help/commands/3d_examples/AddVertex.bb rename to #Test/help/commands/3d_examples/AddVertex.bb diff --git a/_release/help/commands/3d_examples/AlignToVector.bb b/#Test/help/commands/3d_examples/AlignToVector.bb similarity index 100% rename from _release/help/commands/3d_examples/AlignToVector.bb rename to #Test/help/commands/3d_examples/AlignToVector.bb diff --git a/_release/help/commands/3d_examples/AmbientLight.bb b/#Test/help/commands/3d_examples/AmbientLight.bb similarity index 100% rename from _release/help/commands/3d_examples/AmbientLight.bb rename to #Test/help/commands/3d_examples/AmbientLight.bb diff --git a/_release/help/commands/3d_examples/AnimLength.bb b/#Test/help/commands/3d_examples/AnimLength.bb similarity index 100% rename from _release/help/commands/3d_examples/AnimLength.bb rename to #Test/help/commands/3d_examples/AnimLength.bb diff --git a/_release/help/commands/3d_examples/AnimSeq.bb b/#Test/help/commands/3d_examples/AnimSeq.bb similarity index 100% rename from _release/help/commands/3d_examples/AnimSeq.bb rename to #Test/help/commands/3d_examples/AnimSeq.bb diff --git a/_release/help/commands/3d_examples/AnimTime.bb b/#Test/help/commands/3d_examples/AnimTime.bb similarity index 100% rename from _release/help/commands/3d_examples/AnimTime.bb rename to #Test/help/commands/3d_examples/AnimTime.bb diff --git a/_release/help/commands/3d_examples/Animate.bb b/#Test/help/commands/3d_examples/Animate.bb similarity index 100% rename from _release/help/commands/3d_examples/Animate.bb rename to #Test/help/commands/3d_examples/Animate.bb diff --git a/_release/help/commands/3d_examples/AnimateMD2.bb b/#Test/help/commands/3d_examples/AnimateMD2.bb similarity index 100% rename from _release/help/commands/3d_examples/AnimateMD2.bb rename to #Test/help/commands/3d_examples/AnimateMD2.bb diff --git a/_release/help/commands/3d_examples/Animating.bb b/#Test/help/commands/3d_examples/Animating.bb similarity index 100% rename from _release/help/commands/3d_examples/Animating.bb rename to #Test/help/commands/3d_examples/Animating.bb diff --git a/_release/help/commands/3d_examples/AntiAlias.bb b/#Test/help/commands/3d_examples/AntiAlias.bb similarity index 100% rename from _release/help/commands/3d_examples/AntiAlias.bb rename to #Test/help/commands/3d_examples/AntiAlias.bb diff --git a/_release/help/commands/3d_examples/BrushAlpha.bb b/#Test/help/commands/3d_examples/BrushAlpha.bb similarity index 100% rename from _release/help/commands/3d_examples/BrushAlpha.bb rename to #Test/help/commands/3d_examples/BrushAlpha.bb diff --git a/_release/help/commands/3d_examples/BrushBlend.bb b/#Test/help/commands/3d_examples/BrushBlend.bb similarity index 100% rename from _release/help/commands/3d_examples/BrushBlend.bb rename to #Test/help/commands/3d_examples/BrushBlend.bb diff --git a/_release/help/commands/3d_examples/BrushColor.bb b/#Test/help/commands/3d_examples/BrushColor.bb similarity index 100% rename from _release/help/commands/3d_examples/BrushColor.bb rename to #Test/help/commands/3d_examples/BrushColor.bb diff --git a/_release/help/commands/3d_examples/BrushFX.bb b/#Test/help/commands/3d_examples/BrushFX.bb similarity index 100% rename from _release/help/commands/3d_examples/BrushFX.bb rename to #Test/help/commands/3d_examples/BrushFX.bb diff --git a/_release/help/commands/3d_examples/BrushShininess.bb b/#Test/help/commands/3d_examples/BrushShininess.bb similarity index 100% rename from _release/help/commands/3d_examples/BrushShininess.bb rename to #Test/help/commands/3d_examples/BrushShininess.bb diff --git a/_release/help/commands/3d_examples/BrushTexture.bb b/#Test/help/commands/3d_examples/BrushTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/BrushTexture.bb rename to #Test/help/commands/3d_examples/BrushTexture.bb diff --git a/_release/help/commands/3d_examples/CameraClsColor.bb b/#Test/help/commands/3d_examples/CameraClsColor.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraClsColor.bb rename to #Test/help/commands/3d_examples/CameraClsColor.bb diff --git a/_release/help/commands/3d_examples/CameraClsMode.bb b/#Test/help/commands/3d_examples/CameraClsMode.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraClsMode.bb rename to #Test/help/commands/3d_examples/CameraClsMode.bb diff --git a/_release/help/commands/3d_examples/CameraFogColor.bb b/#Test/help/commands/3d_examples/CameraFogColor.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraFogColor.bb rename to #Test/help/commands/3d_examples/CameraFogColor.bb diff --git a/_release/help/commands/3d_examples/CameraFogMode.bb b/#Test/help/commands/3d_examples/CameraFogMode.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraFogMode.bb rename to #Test/help/commands/3d_examples/CameraFogMode.bb diff --git a/_release/help/commands/3d_examples/CameraFogRange.bb b/#Test/help/commands/3d_examples/CameraFogRange.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraFogRange.bb rename to #Test/help/commands/3d_examples/CameraFogRange.bb diff --git a/_release/help/commands/3d_examples/CameraPick.bb b/#Test/help/commands/3d_examples/CameraPick.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraPick.bb rename to #Test/help/commands/3d_examples/CameraPick.bb diff --git a/_release/help/commands/3d_examples/CameraProject.bb b/#Test/help/commands/3d_examples/CameraProject.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraProject.bb rename to #Test/help/commands/3d_examples/CameraProject.bb diff --git a/_release/help/commands/3d_examples/CameraRange.bb b/#Test/help/commands/3d_examples/CameraRange.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraRange.bb rename to #Test/help/commands/3d_examples/CameraRange.bb diff --git a/_release/help/commands/3d_examples/CameraViewport.bb b/#Test/help/commands/3d_examples/CameraViewport.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraViewport.bb rename to #Test/help/commands/3d_examples/CameraViewport.bb diff --git a/_release/help/commands/3d_examples/CameraZoom.bb b/#Test/help/commands/3d_examples/CameraZoom.bb similarity index 100% rename from _release/help/commands/3d_examples/CameraZoom.bb rename to #Test/help/commands/3d_examples/CameraZoom.bb diff --git a/_release/help/commands/3d_examples/CaptureWorld.bb b/#Test/help/commands/3d_examples/CaptureWorld.bb similarity index 100% rename from _release/help/commands/3d_examples/CaptureWorld.bb rename to #Test/help/commands/3d_examples/CaptureWorld.bb diff --git a/_release/help/commands/3d_examples/ClearCollisions.bb b/#Test/help/commands/3d_examples/ClearCollisions.bb similarity index 100% rename from _release/help/commands/3d_examples/ClearCollisions.bb rename to #Test/help/commands/3d_examples/ClearCollisions.bb diff --git a/_release/help/commands/3d_examples/ClearSurface.bb b/#Test/help/commands/3d_examples/ClearSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/ClearSurface.bb rename to #Test/help/commands/3d_examples/ClearSurface.bb diff --git a/_release/help/commands/3d_examples/ClearTextureFilters.bb b/#Test/help/commands/3d_examples/ClearTextureFilters.bb similarity index 100% rename from _release/help/commands/3d_examples/ClearTextureFilters.bb rename to #Test/help/commands/3d_examples/ClearTextureFilters.bb diff --git a/_release/help/commands/3d_examples/ClearWorld.bb b/#Test/help/commands/3d_examples/ClearWorld.bb similarity index 100% rename from _release/help/commands/3d_examples/ClearWorld.bb rename to #Test/help/commands/3d_examples/ClearWorld.bb diff --git a/_release/help/commands/3d_examples/CollisionEntity.bb b/#Test/help/commands/3d_examples/CollisionEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionEntity.bb rename to #Test/help/commands/3d_examples/CollisionEntity.bb diff --git a/_release/help/commands/3d_examples/CollisionNX.bb b/#Test/help/commands/3d_examples/CollisionNX.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionNX.bb rename to #Test/help/commands/3d_examples/CollisionNX.bb diff --git a/_release/help/commands/3d_examples/CollisionNY.bb b/#Test/help/commands/3d_examples/CollisionNY.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionNY.bb rename to #Test/help/commands/3d_examples/CollisionNY.bb diff --git a/_release/help/commands/3d_examples/CollisionNZ.bb b/#Test/help/commands/3d_examples/CollisionNZ.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionNZ.bb rename to #Test/help/commands/3d_examples/CollisionNZ.bb diff --git a/_release/help/commands/3d_examples/CollisionSurface.bb b/#Test/help/commands/3d_examples/CollisionSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionSurface.bb rename to #Test/help/commands/3d_examples/CollisionSurface.bb diff --git a/_release/help/commands/3d_examples/CollisionTime.bb b/#Test/help/commands/3d_examples/CollisionTime.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionTime.bb rename to #Test/help/commands/3d_examples/CollisionTime.bb diff --git a/_release/help/commands/3d_examples/CollisionTriangle.bb b/#Test/help/commands/3d_examples/CollisionTriangle.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionTriangle.bb rename to #Test/help/commands/3d_examples/CollisionTriangle.bb diff --git a/_release/help/commands/3d_examples/CollisionX.bb b/#Test/help/commands/3d_examples/CollisionX.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionX.bb rename to #Test/help/commands/3d_examples/CollisionX.bb diff --git a/_release/help/commands/3d_examples/CollisionY.bb b/#Test/help/commands/3d_examples/CollisionY.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionY.bb rename to #Test/help/commands/3d_examples/CollisionY.bb diff --git a/_release/help/commands/3d_examples/CollisionZ.bb b/#Test/help/commands/3d_examples/CollisionZ.bb similarity index 100% rename from _release/help/commands/3d_examples/CollisionZ.bb rename to #Test/help/commands/3d_examples/CollisionZ.bb diff --git a/_release/help/commands/3d_examples/Collisions.bb b/#Test/help/commands/3d_examples/Collisions.bb similarity index 100% rename from _release/help/commands/3d_examples/Collisions.bb rename to #Test/help/commands/3d_examples/Collisions.bb diff --git a/_release/help/commands/3d_examples/CopyEntity.bb b/#Test/help/commands/3d_examples/CopyEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/CopyEntity.bb rename to #Test/help/commands/3d_examples/CopyEntity.bb diff --git a/_release/help/commands/3d_examples/CountChildren.bb b/#Test/help/commands/3d_examples/CountChildren.bb similarity index 100% rename from _release/help/commands/3d_examples/CountChildren.bb rename to #Test/help/commands/3d_examples/CountChildren.bb diff --git a/_release/help/commands/3d_examples/CountCollisions.bb b/#Test/help/commands/3d_examples/CountCollisions.bb similarity index 100% rename from _release/help/commands/3d_examples/CountCollisions.bb rename to #Test/help/commands/3d_examples/CountCollisions.bb diff --git a/_release/help/commands/3d_examples/CountSurfaces.bb b/#Test/help/commands/3d_examples/CountSurfaces.bb similarity index 100% rename from _release/help/commands/3d_examples/CountSurfaces.bb rename to #Test/help/commands/3d_examples/CountSurfaces.bb diff --git a/_release/help/commands/3d_examples/CountTriangles.bb b/#Test/help/commands/3d_examples/CountTriangles.bb similarity index 100% rename from _release/help/commands/3d_examples/CountTriangles.bb rename to #Test/help/commands/3d_examples/CountTriangles.bb diff --git a/_release/help/commands/3d_examples/CountVertices.bb b/#Test/help/commands/3d_examples/CountVertices.bb similarity index 100% rename from _release/help/commands/3d_examples/CountVertices.bb rename to #Test/help/commands/3d_examples/CountVertices.bb diff --git a/_release/help/commands/3d_examples/CreateBrush.bb b/#Test/help/commands/3d_examples/CreateBrush.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateBrush.bb rename to #Test/help/commands/3d_examples/CreateBrush.bb diff --git a/_release/help/commands/3d_examples/CreateCamera.bb b/#Test/help/commands/3d_examples/CreateCamera.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateCamera.bb rename to #Test/help/commands/3d_examples/CreateCamera.bb diff --git a/_release/help/commands/3d_examples/CreateCone.bb b/#Test/help/commands/3d_examples/CreateCone.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateCone.bb rename to #Test/help/commands/3d_examples/CreateCone.bb diff --git a/_release/help/commands/3d_examples/CreateCube.bb b/#Test/help/commands/3d_examples/CreateCube.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateCube.bb rename to #Test/help/commands/3d_examples/CreateCube.bb diff --git a/_release/help/commands/3d_examples/CreateCylinder.bb b/#Test/help/commands/3d_examples/CreateCylinder.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateCylinder.bb rename to #Test/help/commands/3d_examples/CreateCylinder.bb diff --git a/_release/help/commands/3d_examples/CreateLight.bb b/#Test/help/commands/3d_examples/CreateLight.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateLight.bb rename to #Test/help/commands/3d_examples/CreateLight.bb diff --git a/_release/help/commands/3d_examples/CreateListener.bb b/#Test/help/commands/3d_examples/CreateListener.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateListener.bb rename to #Test/help/commands/3d_examples/CreateListener.bb diff --git a/_release/help/commands/3d_examples/CreateMesh.bb b/#Test/help/commands/3d_examples/CreateMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateMesh.bb rename to #Test/help/commands/3d_examples/CreateMesh.bb diff --git a/_release/help/commands/3d_examples/CreateMirror.bb b/#Test/help/commands/3d_examples/CreateMirror.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateMirror.bb rename to #Test/help/commands/3d_examples/CreateMirror.bb diff --git a/_release/help/commands/3d_examples/CreatePivot.bb b/#Test/help/commands/3d_examples/CreatePivot.bb similarity index 100% rename from _release/help/commands/3d_examples/CreatePivot.bb rename to #Test/help/commands/3d_examples/CreatePivot.bb diff --git a/_release/help/commands/3d_examples/CreatePlane.bb b/#Test/help/commands/3d_examples/CreatePlane.bb similarity index 100% rename from _release/help/commands/3d_examples/CreatePlane.bb rename to #Test/help/commands/3d_examples/CreatePlane.bb diff --git a/_release/help/commands/3d_examples/CreateSphere.bb b/#Test/help/commands/3d_examples/CreateSphere.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateSphere.bb rename to #Test/help/commands/3d_examples/CreateSphere.bb diff --git a/_release/help/commands/3d_examples/CreateSprite.bb b/#Test/help/commands/3d_examples/CreateSprite.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateSprite.bb rename to #Test/help/commands/3d_examples/CreateSprite.bb diff --git a/_release/help/commands/3d_examples/CreateSurface.bb b/#Test/help/commands/3d_examples/CreateSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateSurface.bb rename to #Test/help/commands/3d_examples/CreateSurface.bb diff --git a/_release/help/commands/3d_examples/CreateTerrain.bb b/#Test/help/commands/3d_examples/CreateTerrain.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateTerrain.bb rename to #Test/help/commands/3d_examples/CreateTerrain.bb diff --git a/_release/help/commands/3d_examples/CreateTexture.bb b/#Test/help/commands/3d_examples/CreateTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/CreateTexture.bb rename to #Test/help/commands/3d_examples/CreateTexture.bb diff --git a/_release/help/commands/3d_examples/Dither.bb b/#Test/help/commands/3d_examples/Dither.bb similarity index 100% rename from _release/help/commands/3d_examples/Dither.bb rename to #Test/help/commands/3d_examples/Dither.bb diff --git a/_release/help/commands/3d_examples/EmitSound.bb b/#Test/help/commands/3d_examples/EmitSound.bb similarity index 100% rename from _release/help/commands/3d_examples/EmitSound.bb rename to #Test/help/commands/3d_examples/EmitSound.bb diff --git a/_release/help/commands/3d_examples/EntityAlpha.bb b/#Test/help/commands/3d_examples/EntityAlpha.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityAlpha.bb rename to #Test/help/commands/3d_examples/EntityAlpha.bb diff --git a/_release/help/commands/3d_examples/EntityAnimTime.bb b/#Test/help/commands/3d_examples/EntityAnimTime.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityAnimTime.bb rename to #Test/help/commands/3d_examples/EntityAnimTime.bb diff --git a/_release/help/commands/3d_examples/EntityAnimating.bb b/#Test/help/commands/3d_examples/EntityAnimating.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityAnimating.bb rename to #Test/help/commands/3d_examples/EntityAnimating.bb diff --git a/_release/help/commands/3d_examples/EntityAutoFade.bb b/#Test/help/commands/3d_examples/EntityAutoFade.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityAutoFade.bb rename to #Test/help/commands/3d_examples/EntityAutoFade.bb diff --git a/_release/help/commands/3d_examples/EntityBlend.bb b/#Test/help/commands/3d_examples/EntityBlend.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityBlend.bb rename to #Test/help/commands/3d_examples/EntityBlend.bb diff --git a/_release/help/commands/3d_examples/EntityBox.bb b/#Test/help/commands/3d_examples/EntityBox.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityBox.bb rename to #Test/help/commands/3d_examples/EntityBox.bb diff --git a/_release/help/commands/3d_examples/EntityCollided.bb b/#Test/help/commands/3d_examples/EntityCollided.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityCollided.bb rename to #Test/help/commands/3d_examples/EntityCollided.bb diff --git a/_release/help/commands/3d_examples/EntityColor.bb b/#Test/help/commands/3d_examples/EntityColor.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityColor.bb rename to #Test/help/commands/3d_examples/EntityColor.bb diff --git a/_release/help/commands/3d_examples/EntityDistance.bb b/#Test/help/commands/3d_examples/EntityDistance.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityDistance.bb rename to #Test/help/commands/3d_examples/EntityDistance.bb diff --git a/_release/help/commands/3d_examples/EntityFX.bb b/#Test/help/commands/3d_examples/EntityFX.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityFX.bb rename to #Test/help/commands/3d_examples/EntityFX.bb diff --git a/_release/help/commands/3d_examples/EntityInView.bb b/#Test/help/commands/3d_examples/EntityInView.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityInView.bb rename to #Test/help/commands/3d_examples/EntityInView.bb diff --git a/_release/help/commands/3d_examples/EntityName.bb b/#Test/help/commands/3d_examples/EntityName.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityName.bb rename to #Test/help/commands/3d_examples/EntityName.bb diff --git a/_release/help/commands/3d_examples/EntityOrder.bb b/#Test/help/commands/3d_examples/EntityOrder.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityOrder.bb rename to #Test/help/commands/3d_examples/EntityOrder.bb diff --git a/_release/help/commands/3d_examples/EntityParent.bb b/#Test/help/commands/3d_examples/EntityParent.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityParent.bb rename to #Test/help/commands/3d_examples/EntityParent.bb diff --git a/_release/help/commands/3d_examples/EntityPick.bb b/#Test/help/commands/3d_examples/EntityPick.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityPick.bb rename to #Test/help/commands/3d_examples/EntityPick.bb diff --git a/_release/help/commands/3d_examples/EntityPickMode.bb b/#Test/help/commands/3d_examples/EntityPickMode.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityPickMode.bb rename to #Test/help/commands/3d_examples/EntityPickMode.bb diff --git a/_release/help/commands/3d_examples/EntityPitch.bb b/#Test/help/commands/3d_examples/EntityPitch.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityPitch.bb rename to #Test/help/commands/3d_examples/EntityPitch.bb diff --git a/_release/help/commands/3d_examples/EntityRadius.bb b/#Test/help/commands/3d_examples/EntityRadius.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityRadius.bb rename to #Test/help/commands/3d_examples/EntityRadius.bb diff --git a/_release/help/commands/3d_examples/EntityRoll.bb b/#Test/help/commands/3d_examples/EntityRoll.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityRoll.bb rename to #Test/help/commands/3d_examples/EntityRoll.bb diff --git a/_release/help/commands/3d_examples/EntityShininess.bb b/#Test/help/commands/3d_examples/EntityShininess.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityShininess.bb rename to #Test/help/commands/3d_examples/EntityShininess.bb diff --git a/_release/help/commands/3d_examples/EntityTexture.bb b/#Test/help/commands/3d_examples/EntityTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityTexture.bb rename to #Test/help/commands/3d_examples/EntityTexture.bb diff --git a/_release/help/commands/3d_examples/EntityType.bb b/#Test/help/commands/3d_examples/EntityType.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityType.bb rename to #Test/help/commands/3d_examples/EntityType.bb diff --git a/_release/help/commands/3d_examples/EntityVisible.bb b/#Test/help/commands/3d_examples/EntityVisible.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityVisible.bb rename to #Test/help/commands/3d_examples/EntityVisible.bb diff --git a/_release/help/commands/3d_examples/EntityX.bb b/#Test/help/commands/3d_examples/EntityX.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityX.bb rename to #Test/help/commands/3d_examples/EntityX.bb diff --git a/_release/help/commands/3d_examples/EntityY.bb b/#Test/help/commands/3d_examples/EntityY.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityY.bb rename to #Test/help/commands/3d_examples/EntityY.bb diff --git a/_release/help/commands/3d_examples/EntityYaw.bb b/#Test/help/commands/3d_examples/EntityYaw.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityYaw.bb rename to #Test/help/commands/3d_examples/EntityYaw.bb diff --git a/_release/help/commands/3d_examples/EntityZ.bb b/#Test/help/commands/3d_examples/EntityZ.bb similarity index 100% rename from _release/help/commands/3d_examples/EntityZ.bb rename to #Test/help/commands/3d_examples/EntityZ.bb diff --git a/_release/help/commands/3d_examples/FindChild.bb b/#Test/help/commands/3d_examples/FindChild.bb similarity index 100% rename from _release/help/commands/3d_examples/FindChild.bb rename to #Test/help/commands/3d_examples/FindChild.bb diff --git a/_release/help/commands/3d_examples/FindSurface.bb b/#Test/help/commands/3d_examples/FindSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/FindSurface.bb rename to #Test/help/commands/3d_examples/FindSurface.bb diff --git a/_release/help/commands/3d_examples/FitMesh.bb b/#Test/help/commands/3d_examples/FitMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/FitMesh.bb rename to #Test/help/commands/3d_examples/FitMesh.bb diff --git a/_release/help/commands/3d_examples/FlipMesh.bb b/#Test/help/commands/3d_examples/FlipMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/FlipMesh.bb rename to #Test/help/commands/3d_examples/FlipMesh.bb diff --git a/_release/help/commands/3d_examples/FreeBrush.bb b/#Test/help/commands/3d_examples/FreeBrush.bb similarity index 100% rename from _release/help/commands/3d_examples/FreeBrush.bb rename to #Test/help/commands/3d_examples/FreeBrush.bb diff --git a/_release/help/commands/3d_examples/FreeEntity.bb b/#Test/help/commands/3d_examples/FreeEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/FreeEntity.bb rename to #Test/help/commands/3d_examples/FreeEntity.bb diff --git a/_release/help/commands/3d_examples/FreeTexture.bb b/#Test/help/commands/3d_examples/FreeTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/FreeTexture.bb rename to #Test/help/commands/3d_examples/FreeTexture.bb diff --git a/_release/help/commands/3d_examples/GetChild.bb b/#Test/help/commands/3d_examples/GetChild.bb similarity index 100% rename from _release/help/commands/3d_examples/GetChild.bb rename to #Test/help/commands/3d_examples/GetChild.bb diff --git a/_release/help/commands/3d_examples/GetEntityType.bb b/#Test/help/commands/3d_examples/GetEntityType.bb similarity index 100% rename from _release/help/commands/3d_examples/GetEntityType.bb rename to #Test/help/commands/3d_examples/GetEntityType.bb diff --git a/_release/help/commands/3d_examples/GetParent.bb b/#Test/help/commands/3d_examples/GetParent.bb similarity index 100% rename from _release/help/commands/3d_examples/GetParent.bb rename to #Test/help/commands/3d_examples/GetParent.bb diff --git a/_release/help/commands/3d_examples/GetSurface.bb b/#Test/help/commands/3d_examples/GetSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/GetSurface.bb rename to #Test/help/commands/3d_examples/GetSurface.bb diff --git a/_release/help/commands/3d_examples/GfxDriver3D.bb b/#Test/help/commands/3d_examples/GfxDriver3D.bb similarity index 100% rename from _release/help/commands/3d_examples/GfxDriver3D.bb rename to #Test/help/commands/3d_examples/GfxDriver3D.bb diff --git a/_release/help/commands/3d_examples/GfxMode3D.bb b/#Test/help/commands/3d_examples/GfxMode3D.bb similarity index 100% rename from _release/help/commands/3d_examples/GfxMode3D.bb rename to #Test/help/commands/3d_examples/GfxMode3D.bb diff --git a/_release/help/commands/3d_examples/GfxModeExists.bb b/#Test/help/commands/3d_examples/GfxModeExists.bb similarity index 100% rename from _release/help/commands/3d_examples/GfxModeExists.bb rename to #Test/help/commands/3d_examples/GfxModeExists.bb diff --git a/_release/help/commands/3d_examples/Graphics3D.bb b/#Test/help/commands/3d_examples/Graphics3D.bb similarity index 100% rename from _release/help/commands/3d_examples/Graphics3D.bb rename to #Test/help/commands/3d_examples/Graphics3D.bb diff --git a/_release/help/commands/3d_examples/HWMultiTex.bb b/#Test/help/commands/3d_examples/HWMultiTex.bb similarity index 100% rename from _release/help/commands/3d_examples/HWMultiTex.bb rename to #Test/help/commands/3d_examples/HWMultiTex.bb diff --git a/_release/help/commands/3d_examples/HandleSprite.bb b/#Test/help/commands/3d_examples/HandleSprite.bb similarity index 100% rename from _release/help/commands/3d_examples/HandleSprite.bb rename to #Test/help/commands/3d_examples/HandleSprite.bb diff --git a/_release/help/commands/3d_examples/HideEntity.bb b/#Test/help/commands/3d_examples/HideEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/HideEntity.bb rename to #Test/help/commands/3d_examples/HideEntity.bb diff --git a/_release/help/commands/3d_examples/LightColor.bb b/#Test/help/commands/3d_examples/LightColor.bb similarity index 100% rename from _release/help/commands/3d_examples/LightColor.bb rename to #Test/help/commands/3d_examples/LightColor.bb diff --git a/_release/help/commands/3d_examples/LightConeAngles.bb b/#Test/help/commands/3d_examples/LightConeAngles.bb similarity index 100% rename from _release/help/commands/3d_examples/LightConeAngles.bb rename to #Test/help/commands/3d_examples/LightConeAngles.bb diff --git a/_release/help/commands/3d_examples/LightMesh.bb b/#Test/help/commands/3d_examples/LightMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/LightMesh.bb rename to #Test/help/commands/3d_examples/LightMesh.bb diff --git a/_release/help/commands/3d_examples/LightRange.bb b/#Test/help/commands/3d_examples/LightRange.bb similarity index 100% rename from _release/help/commands/3d_examples/LightRange.bb rename to #Test/help/commands/3d_examples/LightRange.bb diff --git a/_release/help/commands/3d_examples/LinePick.bb b/#Test/help/commands/3d_examples/LinePick.bb similarity index 100% rename from _release/help/commands/3d_examples/LinePick.bb rename to #Test/help/commands/3d_examples/LinePick.bb diff --git a/_release/help/commands/3d_examples/Load3DSound.bb b/#Test/help/commands/3d_examples/Load3DSound.bb similarity index 100% rename from _release/help/commands/3d_examples/Load3DSound.bb rename to #Test/help/commands/3d_examples/Load3DSound.bb diff --git a/_release/help/commands/3d_examples/LoadAnimMesh.bb b/#Test/help/commands/3d_examples/LoadAnimMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadAnimMesh.bb rename to #Test/help/commands/3d_examples/LoadAnimMesh.bb diff --git a/_release/help/commands/3d_examples/LoadAnimSeq.bb b/#Test/help/commands/3d_examples/LoadAnimSeq.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadAnimSeq.bb rename to #Test/help/commands/3d_examples/LoadAnimSeq.bb diff --git a/_release/help/commands/3d_examples/LoadAnimTexture.bb b/#Test/help/commands/3d_examples/LoadAnimTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadAnimTexture.bb rename to #Test/help/commands/3d_examples/LoadAnimTexture.bb diff --git a/_release/help/commands/3d_examples/LoadBrush.bb b/#Test/help/commands/3d_examples/LoadBrush.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadBrush.bb rename to #Test/help/commands/3d_examples/LoadBrush.bb diff --git a/_release/help/commands/3d_examples/LoadMD2.bb b/#Test/help/commands/3d_examples/LoadMD2.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadMD2.bb rename to #Test/help/commands/3d_examples/LoadMD2.bb diff --git a/_release/help/commands/3d_examples/LoadMesh.bb b/#Test/help/commands/3d_examples/LoadMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadMesh.bb rename to #Test/help/commands/3d_examples/LoadMesh.bb diff --git a/_release/help/commands/3d_examples/LoadSprite.bb b/#Test/help/commands/3d_examples/LoadSprite.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadSprite.bb rename to #Test/help/commands/3d_examples/LoadSprite.bb diff --git a/_release/help/commands/3d_examples/LoadTerrain.bb b/#Test/help/commands/3d_examples/LoadTerrain.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadTerrain.bb rename to #Test/help/commands/3d_examples/LoadTerrain.bb diff --git a/_release/help/commands/3d_examples/LoadTexture.bb b/#Test/help/commands/3d_examples/LoadTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/LoadTexture.bb rename to #Test/help/commands/3d_examples/LoadTexture.bb diff --git a/_release/help/commands/3d_examples/LoaderMatrix.bb b/#Test/help/commands/3d_examples/LoaderMatrix.bb similarity index 100% rename from _release/help/commands/3d_examples/LoaderMatrix.bb rename to #Test/help/commands/3d_examples/LoaderMatrix.bb diff --git a/_release/help/commands/3d_examples/MD2AnimLength.bb b/#Test/help/commands/3d_examples/MD2AnimLength.bb similarity index 100% rename from _release/help/commands/3d_examples/MD2AnimLength.bb rename to #Test/help/commands/3d_examples/MD2AnimLength.bb diff --git a/_release/help/commands/3d_examples/MD2AnimTime.bb b/#Test/help/commands/3d_examples/MD2AnimTime.bb similarity index 100% rename from _release/help/commands/3d_examples/MD2AnimTime.bb rename to #Test/help/commands/3d_examples/MD2AnimTime.bb diff --git a/_release/help/commands/3d_examples/MD2Animating.bb b/#Test/help/commands/3d_examples/MD2Animating.bb similarity index 100% rename from _release/help/commands/3d_examples/MD2Animating.bb rename to #Test/help/commands/3d_examples/MD2Animating.bb diff --git a/_release/help/commands/3d_examples/MeshDepth.bb b/#Test/help/commands/3d_examples/MeshDepth.bb similarity index 100% rename from _release/help/commands/3d_examples/MeshDepth.bb rename to #Test/help/commands/3d_examples/MeshDepth.bb diff --git a/_release/help/commands/3d_examples/MeshHeight.bb b/#Test/help/commands/3d_examples/MeshHeight.bb similarity index 100% rename from _release/help/commands/3d_examples/MeshHeight.bb rename to #Test/help/commands/3d_examples/MeshHeight.bb diff --git a/_release/help/commands/3d_examples/MeshWidth.bb b/#Test/help/commands/3d_examples/MeshWidth.bb similarity index 100% rename from _release/help/commands/3d_examples/MeshWidth.bb rename to #Test/help/commands/3d_examples/MeshWidth.bb diff --git a/_release/help/commands/3d_examples/MeshesIntersect.bb b/#Test/help/commands/3d_examples/MeshesIntersect.bb similarity index 100% rename from _release/help/commands/3d_examples/MeshesIntersect.bb rename to #Test/help/commands/3d_examples/MeshesIntersect.bb diff --git a/_release/help/commands/3d_examples/ModifyTerrain.bb b/#Test/help/commands/3d_examples/ModifyTerrain.bb similarity index 100% rename from _release/help/commands/3d_examples/ModifyTerrain.bb rename to #Test/help/commands/3d_examples/ModifyTerrain.bb diff --git a/_release/help/commands/3d_examples/MoveEntity.bb b/#Test/help/commands/3d_examples/MoveEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/MoveEntity.bb rename to #Test/help/commands/3d_examples/MoveEntity.bb diff --git a/_release/help/commands/3d_examples/NameEntity.bb b/#Test/help/commands/3d_examples/NameEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/NameEntity.bb rename to #Test/help/commands/3d_examples/NameEntity.bb diff --git a/_release/help/commands/3d_examples/PaintEntity.bb b/#Test/help/commands/3d_examples/PaintEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/PaintEntity.bb rename to #Test/help/commands/3d_examples/PaintEntity.bb diff --git a/_release/help/commands/3d_examples/PaintMesh.bb b/#Test/help/commands/3d_examples/PaintMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/PaintMesh.bb rename to #Test/help/commands/3d_examples/PaintMesh.bb diff --git a/_release/help/commands/3d_examples/PaintSurface.bb b/#Test/help/commands/3d_examples/PaintSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/PaintSurface.bb rename to #Test/help/commands/3d_examples/PaintSurface.bb diff --git a/_release/help/commands/3d_examples/PickedEntity.bb b/#Test/help/commands/3d_examples/PickedEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedEntity.bb rename to #Test/help/commands/3d_examples/PickedEntity.bb diff --git a/_release/help/commands/3d_examples/PickedNX.bb b/#Test/help/commands/3d_examples/PickedNX.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedNX.bb rename to #Test/help/commands/3d_examples/PickedNX.bb diff --git a/_release/help/commands/3d_examples/PickedNY.bb b/#Test/help/commands/3d_examples/PickedNY.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedNY.bb rename to #Test/help/commands/3d_examples/PickedNY.bb diff --git a/_release/help/commands/3d_examples/PickedNZ.bb b/#Test/help/commands/3d_examples/PickedNZ.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedNZ.bb rename to #Test/help/commands/3d_examples/PickedNZ.bb diff --git a/_release/help/commands/3d_examples/PickedSurface.bb b/#Test/help/commands/3d_examples/PickedSurface.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedSurface.bb rename to #Test/help/commands/3d_examples/PickedSurface.bb diff --git a/_release/help/commands/3d_examples/PickedTime.bb b/#Test/help/commands/3d_examples/PickedTime.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedTime.bb rename to #Test/help/commands/3d_examples/PickedTime.bb diff --git a/_release/help/commands/3d_examples/PickedTriangle.bb b/#Test/help/commands/3d_examples/PickedTriangle.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedTriangle.bb rename to #Test/help/commands/3d_examples/PickedTriangle.bb diff --git a/_release/help/commands/3d_examples/PickedX.bb b/#Test/help/commands/3d_examples/PickedX.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedX.bb rename to #Test/help/commands/3d_examples/PickedX.bb diff --git a/_release/help/commands/3d_examples/PickedY.bb b/#Test/help/commands/3d_examples/PickedY.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedY.bb rename to #Test/help/commands/3d_examples/PickedY.bb diff --git a/_release/help/commands/3d_examples/PickedZ.bb b/#Test/help/commands/3d_examples/PickedZ.bb similarity index 100% rename from _release/help/commands/3d_examples/PickedZ.bb rename to #Test/help/commands/3d_examples/PickedZ.bb diff --git a/_release/help/commands/3d_examples/PointEntity.bb b/#Test/help/commands/3d_examples/PointEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/PointEntity.bb rename to #Test/help/commands/3d_examples/PointEntity.bb diff --git a/_release/help/commands/3d_examples/PositionEntity.bb b/#Test/help/commands/3d_examples/PositionEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/PositionEntity.bb rename to #Test/help/commands/3d_examples/PositionEntity.bb diff --git a/_release/help/commands/3d_examples/PositionMesh.bb b/#Test/help/commands/3d_examples/PositionMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/PositionMesh.bb rename to #Test/help/commands/3d_examples/PositionMesh.bb diff --git a/_release/help/commands/3d_examples/PositionTexture.bb b/#Test/help/commands/3d_examples/PositionTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/PositionTexture.bb rename to #Test/help/commands/3d_examples/PositionTexture.bb diff --git a/_release/help/commands/3d_examples/ProjectedX.bb b/#Test/help/commands/3d_examples/ProjectedX.bb similarity index 100% rename from _release/help/commands/3d_examples/ProjectedX.bb rename to #Test/help/commands/3d_examples/ProjectedX.bb diff --git a/_release/help/commands/3d_examples/ProjectedY.bb b/#Test/help/commands/3d_examples/ProjectedY.bb similarity index 100% rename from _release/help/commands/3d_examples/ProjectedY.bb rename to #Test/help/commands/3d_examples/ProjectedY.bb diff --git a/_release/help/commands/3d_examples/ProjectedZ.bb b/#Test/help/commands/3d_examples/ProjectedZ.bb similarity index 100% rename from _release/help/commands/3d_examples/ProjectedZ.bb rename to #Test/help/commands/3d_examples/ProjectedZ.bb diff --git a/_release/help/commands/3d_examples/RenderWorld.bb b/#Test/help/commands/3d_examples/RenderWorld.bb similarity index 100% rename from _release/help/commands/3d_examples/RenderWorld.bb rename to #Test/help/commands/3d_examples/RenderWorld.bb diff --git a/_release/help/commands/3d_examples/ResetEntity.bb b/#Test/help/commands/3d_examples/ResetEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/ResetEntity.bb rename to #Test/help/commands/3d_examples/ResetEntity.bb diff --git a/_release/help/commands/3d_examples/RotateEntity.bb b/#Test/help/commands/3d_examples/RotateEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/RotateEntity.bb rename to #Test/help/commands/3d_examples/RotateEntity.bb diff --git a/_release/help/commands/3d_examples/RotateMesh.bb b/#Test/help/commands/3d_examples/RotateMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/RotateMesh.bb rename to #Test/help/commands/3d_examples/RotateMesh.bb diff --git a/_release/help/commands/3d_examples/RotateSprite.bb b/#Test/help/commands/3d_examples/RotateSprite.bb similarity index 100% rename from _release/help/commands/3d_examples/RotateSprite.bb rename to #Test/help/commands/3d_examples/RotateSprite.bb diff --git a/_release/help/commands/3d_examples/RotateTexture.bb b/#Test/help/commands/3d_examples/RotateTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/RotateTexture.bb rename to #Test/help/commands/3d_examples/RotateTexture.bb diff --git a/_release/help/commands/3d_examples/ScaleEntity.bb b/#Test/help/commands/3d_examples/ScaleEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/ScaleEntity.bb rename to #Test/help/commands/3d_examples/ScaleEntity.bb diff --git a/_release/help/commands/3d_examples/ScaleMesh.bb b/#Test/help/commands/3d_examples/ScaleMesh.bb similarity index 100% rename from _release/help/commands/3d_examples/ScaleMesh.bb rename to #Test/help/commands/3d_examples/ScaleMesh.bb diff --git a/_release/help/commands/3d_examples/ScaleSprite.bb b/#Test/help/commands/3d_examples/ScaleSprite.bb similarity index 100% rename from _release/help/commands/3d_examples/ScaleSprite.bb rename to #Test/help/commands/3d_examples/ScaleSprite.bb diff --git a/_release/help/commands/3d_examples/ScaleTexture.bb b/#Test/help/commands/3d_examples/ScaleTexture.bb similarity index 100% rename from _release/help/commands/3d_examples/ScaleTexture.bb rename to #Test/help/commands/3d_examples/ScaleTexture.bb diff --git a/_release/help/commands/3d_examples/SetAnimKey.bb b/#Test/help/commands/3d_examples/SetAnimKey.bb similarity index 100% rename from _release/help/commands/3d_examples/SetAnimKey.bb rename to #Test/help/commands/3d_examples/SetAnimKey.bb diff --git a/_release/help/commands/3d_examples/ShowEntity.bb b/#Test/help/commands/3d_examples/ShowEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/ShowEntity.bb rename to #Test/help/commands/3d_examples/ShowEntity.bb diff --git a/_release/help/commands/3d_examples/SpriteViewMode.bb b/#Test/help/commands/3d_examples/SpriteViewMode.bb similarity index 100% rename from _release/help/commands/3d_examples/SpriteViewMode.bb rename to #Test/help/commands/3d_examples/SpriteViewMode.bb diff --git a/_release/help/commands/3d_examples/TFormNormal.bb b/#Test/help/commands/3d_examples/TFormNormal.bb similarity index 100% rename from _release/help/commands/3d_examples/TFormNormal.bb rename to #Test/help/commands/3d_examples/TFormNormal.bb diff --git a/_release/help/commands/3d_examples/TFormPoint.bb b/#Test/help/commands/3d_examples/TFormPoint.bb similarity index 100% rename from _release/help/commands/3d_examples/TFormPoint.bb rename to #Test/help/commands/3d_examples/TFormPoint.bb diff --git a/_release/help/commands/3d_examples/TFormVector.bb b/#Test/help/commands/3d_examples/TFormVector.bb similarity index 100% rename from _release/help/commands/3d_examples/TFormVector.bb rename to #Test/help/commands/3d_examples/TFormVector.bb diff --git a/_release/help/commands/3d_examples/TFormedX.bb b/#Test/help/commands/3d_examples/TFormedX.bb similarity index 100% rename from _release/help/commands/3d_examples/TFormedX.bb rename to #Test/help/commands/3d_examples/TFormedX.bb diff --git a/_release/help/commands/3d_examples/TFormedY.bb b/#Test/help/commands/3d_examples/TFormedY.bb similarity index 100% rename from _release/help/commands/3d_examples/TFormedY.bb rename to #Test/help/commands/3d_examples/TFormedY.bb diff --git a/_release/help/commands/3d_examples/TFormedZ.bb b/#Test/help/commands/3d_examples/TFormedZ.bb similarity index 100% rename from _release/help/commands/3d_examples/TFormedZ.bb rename to #Test/help/commands/3d_examples/TFormedZ.bb diff --git a/_release/help/commands/3d_examples/TerrainDetail.bb b/#Test/help/commands/3d_examples/TerrainDetail.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainDetail.bb rename to #Test/help/commands/3d_examples/TerrainDetail.bb diff --git a/_release/help/commands/3d_examples/TerrainHeight.bb b/#Test/help/commands/3d_examples/TerrainHeight.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainHeight.bb rename to #Test/help/commands/3d_examples/TerrainHeight.bb diff --git a/_release/help/commands/3d_examples/TerrainShading.bb b/#Test/help/commands/3d_examples/TerrainShading.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainShading.bb rename to #Test/help/commands/3d_examples/TerrainShading.bb diff --git a/_release/help/commands/3d_examples/TerrainSize.bb b/#Test/help/commands/3d_examples/TerrainSize.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainSize.bb rename to #Test/help/commands/3d_examples/TerrainSize.bb diff --git a/_release/help/commands/3d_examples/TerrainX.bb b/#Test/help/commands/3d_examples/TerrainX.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainX.bb rename to #Test/help/commands/3d_examples/TerrainX.bb diff --git a/_release/help/commands/3d_examples/TerrainY.bb b/#Test/help/commands/3d_examples/TerrainY.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainY.bb rename to #Test/help/commands/3d_examples/TerrainY.bb diff --git a/_release/help/commands/3d_examples/TerrainZ.bb b/#Test/help/commands/3d_examples/TerrainZ.bb similarity index 100% rename from _release/help/commands/3d_examples/TerrainZ.bb rename to #Test/help/commands/3d_examples/TerrainZ.bb diff --git a/_release/help/commands/3d_examples/TextureBlend.bb b/#Test/help/commands/3d_examples/TextureBlend.bb similarity index 100% rename from _release/help/commands/3d_examples/TextureBlend.bb rename to #Test/help/commands/3d_examples/TextureBlend.bb diff --git a/_release/help/commands/3d_examples/TextureBuffer.bb b/#Test/help/commands/3d_examples/TextureBuffer.bb similarity index 100% rename from _release/help/commands/3d_examples/TextureBuffer.bb rename to #Test/help/commands/3d_examples/TextureBuffer.bb diff --git a/_release/help/commands/3d_examples/TextureCoords.bb b/#Test/help/commands/3d_examples/TextureCoords.bb similarity index 100% rename from _release/help/commands/3d_examples/TextureCoords.bb rename to #Test/help/commands/3d_examples/TextureCoords.bb diff --git a/_release/help/commands/3d_examples/TextureFilter.bb b/#Test/help/commands/3d_examples/TextureFilter.bb similarity index 100% rename from _release/help/commands/3d_examples/TextureFilter.bb rename to #Test/help/commands/3d_examples/TextureFilter.bb diff --git a/_release/help/commands/3d_examples/TextureHeight.bb b/#Test/help/commands/3d_examples/TextureHeight.bb similarity index 100% rename from _release/help/commands/3d_examples/TextureHeight.bb rename to #Test/help/commands/3d_examples/TextureHeight.bb diff --git a/_release/help/commands/3d_examples/TextureWidth.bb b/#Test/help/commands/3d_examples/TextureWidth.bb similarity index 100% rename from _release/help/commands/3d_examples/TextureWidth.bb rename to #Test/help/commands/3d_examples/TextureWidth.bb diff --git a/_release/help/commands/3d_examples/TranslateEntity.bb b/#Test/help/commands/3d_examples/TranslateEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/TranslateEntity.bb rename to #Test/help/commands/3d_examples/TranslateEntity.bb diff --git a/_release/help/commands/3d_examples/TriangleVertex.bb b/#Test/help/commands/3d_examples/TriangleVertex.bb similarity index 100% rename from _release/help/commands/3d_examples/TriangleVertex.bb rename to #Test/help/commands/3d_examples/TriangleVertex.bb diff --git a/_release/help/commands/3d_examples/TurnEntity.bb b/#Test/help/commands/3d_examples/TurnEntity.bb similarity index 100% rename from _release/help/commands/3d_examples/TurnEntity.bb rename to #Test/help/commands/3d_examples/TurnEntity.bb diff --git a/_release/help/commands/3d_examples/UpdateNormals.bb b/#Test/help/commands/3d_examples/UpdateNormals.bb similarity index 100% rename from _release/help/commands/3d_examples/UpdateNormals.bb rename to #Test/help/commands/3d_examples/UpdateNormals.bb diff --git a/_release/help/commands/3d_examples/UpdateWorld.bb b/#Test/help/commands/3d_examples/UpdateWorld.bb similarity index 100% rename from _release/help/commands/3d_examples/UpdateWorld.bb rename to #Test/help/commands/3d_examples/UpdateWorld.bb diff --git a/_release/help/commands/3d_examples/VertexBlue.bb b/#Test/help/commands/3d_examples/VertexBlue.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexBlue.bb rename to #Test/help/commands/3d_examples/VertexBlue.bb diff --git a/_release/help/commands/3d_examples/VertexColor.bb b/#Test/help/commands/3d_examples/VertexColor.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexColor.bb rename to #Test/help/commands/3d_examples/VertexColor.bb diff --git a/_release/help/commands/3d_examples/VertexCoords.bb b/#Test/help/commands/3d_examples/VertexCoords.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexCoords.bb rename to #Test/help/commands/3d_examples/VertexCoords.bb diff --git a/_release/help/commands/3d_examples/VertexGreen.bb b/#Test/help/commands/3d_examples/VertexGreen.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexGreen.bb rename to #Test/help/commands/3d_examples/VertexGreen.bb diff --git a/_release/help/commands/3d_examples/VertexNX.bb b/#Test/help/commands/3d_examples/VertexNX.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexNX.bb rename to #Test/help/commands/3d_examples/VertexNX.bb diff --git a/_release/help/commands/3d_examples/VertexNY.bb b/#Test/help/commands/3d_examples/VertexNY.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexNY.bb rename to #Test/help/commands/3d_examples/VertexNY.bb diff --git a/_release/help/commands/3d_examples/VertexNZ.bb b/#Test/help/commands/3d_examples/VertexNZ.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexNZ.bb rename to #Test/help/commands/3d_examples/VertexNZ.bb diff --git a/_release/help/commands/3d_examples/VertexNormal.bb b/#Test/help/commands/3d_examples/VertexNormal.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexNormal.bb rename to #Test/help/commands/3d_examples/VertexNormal.bb diff --git a/_release/help/commands/3d_examples/VertexRed.bb b/#Test/help/commands/3d_examples/VertexRed.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexRed.bb rename to #Test/help/commands/3d_examples/VertexRed.bb diff --git a/_release/help/commands/3d_examples/VertexTexCoords.bb b/#Test/help/commands/3d_examples/VertexTexCoords.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexTexCoords.bb rename to #Test/help/commands/3d_examples/VertexTexCoords.bb diff --git a/_release/help/commands/3d_examples/VertexU.bb b/#Test/help/commands/3d_examples/VertexU.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexU.bb rename to #Test/help/commands/3d_examples/VertexU.bb diff --git a/_release/help/commands/3d_examples/VertexV.bb b/#Test/help/commands/3d_examples/VertexV.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexV.bb rename to #Test/help/commands/3d_examples/VertexV.bb diff --git a/_release/help/commands/3d_examples/VertexW.bb b/#Test/help/commands/3d_examples/VertexW.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexW.bb rename to #Test/help/commands/3d_examples/VertexW.bb diff --git a/_release/help/commands/3d_examples/VertexX.bb b/#Test/help/commands/3d_examples/VertexX.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexX.bb rename to #Test/help/commands/3d_examples/VertexX.bb diff --git a/_release/help/commands/3d_examples/VertexY.bb b/#Test/help/commands/3d_examples/VertexY.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexY.bb rename to #Test/help/commands/3d_examples/VertexY.bb diff --git a/_release/help/commands/3d_examples/VertexZ.bb b/#Test/help/commands/3d_examples/VertexZ.bb similarity index 100% rename from _release/help/commands/3d_examples/VertexZ.bb rename to #Test/help/commands/3d_examples/VertexZ.bb diff --git a/_release/help/commands/3d_examples/WBuffer.bb b/#Test/help/commands/3d_examples/WBuffer.bb similarity index 100% rename from _release/help/commands/3d_examples/WBuffer.bb rename to #Test/help/commands/3d_examples/WBuffer.bb diff --git a/_release/help/commands/3d_examples/Windowed3D.bb b/#Test/help/commands/3d_examples/Windowed3D.bb similarity index 100% rename from _release/help/commands/3d_examples/Windowed3D.bb rename to #Test/help/commands/3d_examples/Windowed3D.bb diff --git a/_release/help/commands/3d_examples/Wireframe.bb b/#Test/help/commands/3d_examples/Wireframe.bb similarity index 100% rename from _release/help/commands/3d_examples/Wireframe.bb rename to #Test/help/commands/3d_examples/Wireframe.bb diff --git a/_release/help/commands/3d_examples/media/Chorme-2.BMP b/#Test/help/commands/3d_examples/media/Chorme-2.BMP similarity index 100% rename from _release/help/commands/3d_examples/media/Chorme-2.BMP rename to #Test/help/commands/3d_examples/media/Chorme-2.BMP diff --git a/_release/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp b/#Test/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp similarity index 100% rename from _release/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp rename to #Test/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp diff --git a/_release/help/commands/3d_examples/media/Gargoyle/Gargoyle.md2 b/#Test/help/commands/3d_examples/media/Gargoyle/Gargoyle.md2 similarity index 100% rename from _release/help/commands/3d_examples/media/Gargoyle/Gargoyle.md2 rename to #Test/help/commands/3d_examples/media/Gargoyle/Gargoyle.md2 diff --git a/_release/help/commands/3d_examples/media/Gargoyle/GargoyleSkin.PCX b/#Test/help/commands/3d_examples/media/Gargoyle/GargoyleSkin.PCX similarity index 100% rename from _release/help/commands/3d_examples/media/Gargoyle/GargoyleSkin.PCX rename to #Test/help/commands/3d_examples/media/Gargoyle/GargoyleSkin.PCX diff --git a/_release/help/commands/3d_examples/media/Height_map.bmp b/#Test/help/commands/3d_examples/media/Height_map.bmp similarity index 100% rename from _release/help/commands/3d_examples/media/Height_map.bmp rename to #Test/help/commands/3d_examples/media/Height_map.bmp diff --git a/_release/help/commands/3d_examples/media/MossyGround.BMP b/#Test/help/commands/3d_examples/media/MossyGround.BMP similarity index 100% rename from _release/help/commands/3d_examples/media/MossyGround.BMP rename to #Test/help/commands/3d_examples/media/MossyGround.BMP diff --git a/_release/help/commands/3d_examples/media/b3dlogo.jpg b/#Test/help/commands/3d_examples/media/b3dlogo.jpg similarity index 100% rename from _release/help/commands/3d_examples/media/b3dlogo.jpg rename to #Test/help/commands/3d_examples/media/b3dlogo.jpg diff --git a/_release/help/commands/3d_examples/media/height_map_1024.bmp b/#Test/help/commands/3d_examples/media/height_map_1024.bmp similarity index 100% rename from _release/help/commands/3d_examples/media/height_map_1024.bmp rename to #Test/help/commands/3d_examples/media/height_map_1024.bmp diff --git a/_release/help/commands/3d_examples/media/kaboom.bmp b/#Test/help/commands/3d_examples/media/kaboom.bmp similarity index 100% rename from _release/help/commands/3d_examples/media/kaboom.bmp rename to #Test/help/commands/3d_examples/media/kaboom.bmp diff --git a/_release/help/commands/3d_examples/media/oil-drum/oildrum.3ds b/#Test/help/commands/3d_examples/media/oil-drum/oildrum.3ds similarity index 100% rename from _release/help/commands/3d_examples/media/oil-drum/oildrum.3ds rename to #Test/help/commands/3d_examples/media/oil-drum/oildrum.3ds diff --git a/_release/help/commands/3d_examples/media/oil-drum/oildrum.jpg b/#Test/help/commands/3d_examples/media/oil-drum/oildrum.jpg similarity index 100% rename from _release/help/commands/3d_examples/media/oil-drum/oildrum.jpg rename to #Test/help/commands/3d_examples/media/oil-drum/oildrum.jpg diff --git a/_release/help/commands/3d_examples/media/sky.bmp b/#Test/help/commands/3d_examples/media/sky.bmp similarity index 100% rename from _release/help/commands/3d_examples/media/sky.bmp rename to #Test/help/commands/3d_examples/media/sky.bmp diff --git a/_release/help/commands/3d_examples/media/wood-crate/wcrate.jpg b/#Test/help/commands/3d_examples/media/wood-crate/wcrate.jpg similarity index 100% rename from _release/help/commands/3d_examples/media/wood-crate/wcrate.jpg rename to #Test/help/commands/3d_examples/media/wood-crate/wcrate.jpg diff --git a/_release/help/commands/3d_examples/media/wood-crate/wcrate1.3ds b/#Test/help/commands/3d_examples/media/wood-crate/wcrate1.3ds similarity index 100% rename from _release/help/commands/3d_examples/media/wood-crate/wcrate1.3ds rename to #Test/help/commands/3d_examples/media/wood-crate/wcrate1.3ds diff --git a/_release/help/commands/3d_examples/template.bb b/#Test/help/commands/3d_examples/template.bb similarity index 100% rename from _release/help/commands/3d_examples/template.bb rename to #Test/help/commands/3d_examples/template.bb diff --git a/_release/help/commands/command_list.htm b/#Test/help/commands/command_list.htm similarity index 100% rename from _release/help/commands/command_list.htm rename to #Test/help/commands/command_list.htm diff --git a/_release/help/commands/css/commands.css b/#Test/help/commands/css/commands.css similarity index 100% rename from _release/help/commands/css/commands.css rename to #Test/help/commands/css/commands.css diff --git a/_release/help/commands/css/commands_old.css b/#Test/help/commands/css/commands_old.css similarity index 100% rename from _release/help/commands/css/commands_old.css rename to #Test/help/commands/css/commands_old.css diff --git a/_release/help/commands/css/readme.txt b/#Test/help/commands/css/readme.txt similarity index 100% rename from _release/help/commands/css/readme.txt rename to #Test/help/commands/css/readme.txt diff --git a/_release/help/commands/index.htm b/#Test/help/commands/index.htm similarity index 100% rename from _release/help/commands/index.htm rename to #Test/help/commands/index.htm diff --git a/_release/help/commands/scancodes.htm b/#Test/help/commands/scancodes.htm similarity index 100% rename from _release/help/commands/scancodes.htm rename to #Test/help/commands/scancodes.htm diff --git a/_release/help/credits.html b/#Test/help/credits.html similarity index 100% rename from _release/help/credits.html rename to #Test/help/credits.html diff --git a/_release/help/index.html b/#Test/help/index.html similarity index 100% rename from _release/help/index.html rename to #Test/help/index.html diff --git a/_release/help/language/index.html b/#Test/help/language/index.html similarity index 100% rename from _release/help/language/index.html rename to #Test/help/language/index.html diff --git a/_release/help/language/lang_ref.css b/#Test/help/language/lang_ref.css similarity index 100% rename from _release/help/language/lang_ref.css rename to #Test/help/language/lang_ref.css diff --git a/_release/help/language/lang_ref_arrays.html b/#Test/help/language/lang_ref_arrays.html similarity index 100% rename from _release/help/language/lang_ref_arrays.html rename to #Test/help/language/lang_ref_arrays.html diff --git a/_release/help/language/lang_ref_basicdatatypes.html b/#Test/help/language/lang_ref_basicdatatypes.html similarity index 100% rename from _release/help/language/lang_ref_basicdatatypes.html rename to #Test/help/language/lang_ref_basicdatatypes.html diff --git a/_release/help/language/lang_ref_comments.html b/#Test/help/language/lang_ref_comments.html similarity index 100% rename from _release/help/language/lang_ref_comments.html rename to #Test/help/language/lang_ref_comments.html diff --git a/_release/help/language/lang_ref_constants.html b/#Test/help/language/lang_ref_constants.html similarity index 100% rename from _release/help/language/lang_ref_constants.html rename to #Test/help/language/lang_ref_constants.html diff --git a/_release/help/language/lang_ref_customtypes.html b/#Test/help/language/lang_ref_customtypes.html similarity index 100% rename from _release/help/language/lang_ref_customtypes.html rename to #Test/help/language/lang_ref_customtypes.html diff --git a/_release/help/language/lang_ref_expressions.html b/#Test/help/language/lang_ref_expressions.html similarity index 100% rename from _release/help/language/lang_ref_expressions.html rename to #Test/help/language/lang_ref_expressions.html diff --git a/_release/help/language/lang_ref_functions.html b/#Test/help/language/lang_ref_functions.html similarity index 100% rename from _release/help/language/lang_ref_functions.html rename to #Test/help/language/lang_ref_functions.html diff --git a/_release/help/language/lang_ref_identifiers.html b/#Test/help/language/lang_ref_identifiers.html similarity index 100% rename from _release/help/language/lang_ref_identifiers.html rename to #Test/help/language/lang_ref_identifiers.html diff --git a/_release/help/language/lang_ref_intro.html b/#Test/help/language/lang_ref_intro.html similarity index 100% rename from _release/help/language/lang_ref_intro.html rename to #Test/help/language/lang_ref_intro.html diff --git a/_release/help/language/lang_ref_keywords.html b/#Test/help/language/lang_ref_keywords.html similarity index 100% rename from _release/help/language/lang_ref_keywords.html rename to #Test/help/language/lang_ref_keywords.html diff --git a/_release/help/language/lang_ref_programflow.html b/#Test/help/language/lang_ref_programflow.html similarity index 100% rename from _release/help/language/lang_ref_programflow.html rename to #Test/help/language/lang_ref_programflow.html diff --git a/_release/help/language/lang_ref_variables.html b/#Test/help/language/lang_ref_variables.html similarity index 100% rename from _release/help/language/lang_ref_variables.html rename to #Test/help/language/lang_ref_variables.html diff --git a/_release/help/language/navbar.html b/#Test/help/language/navbar.html similarity index 100% rename from _release/help/language/navbar.html rename to #Test/help/language/navbar.html diff --git a/_release/help/language/title.html b/#Test/help/language/title.html similarity index 100% rename from _release/help/language/title.html rename to #Test/help/language/title.html diff --git a/_release/mediaview/mediaview.bb b/#Test/mediaview/mediaview.bb similarity index 100% rename from _release/mediaview/mediaview.bb rename to #Test/mediaview/mediaview.bb diff --git a/_release/samples/AGore/BirdDemo/Bird.md2 b/#Test/samples/AGore/BirdDemo/Bird.md2 similarity index 100% rename from _release/samples/AGore/BirdDemo/Bird.md2 rename to #Test/samples/AGore/BirdDemo/Bird.md2 diff --git a/_release/samples/AGore/BirdDemo/Bird1.bbm b/#Test/samples/AGore/BirdDemo/Bird1.bbm similarity index 100% rename from _release/samples/AGore/BirdDemo/Bird1.bbm rename to #Test/samples/AGore/BirdDemo/Bird1.bbm diff --git a/_release/samples/AGore/BirdDemo/Bird2.bbm b/#Test/samples/AGore/BirdDemo/Bird2.bbm similarity index 100% rename from _release/samples/AGore/BirdDemo/Bird2.bbm rename to #Test/samples/AGore/BirdDemo/Bird2.bbm diff --git a/_release/samples/AGore/BirdDemo/BirdDemo.bb b/#Test/samples/AGore/BirdDemo/BirdDemo.bb similarity index 100% rename from _release/samples/AGore/BirdDemo/BirdDemo.bb rename to #Test/samples/AGore/BirdDemo/BirdDemo.bb diff --git a/_release/samples/AGore/BirdDemo/Cam.bbm b/#Test/samples/AGore/BirdDemo/Cam.bbm similarity index 100% rename from _release/samples/AGore/BirdDemo/Cam.bbm rename to #Test/samples/AGore/BirdDemo/Cam.bbm diff --git a/_release/samples/AGore/BirdDemo/Canyon.x b/#Test/samples/AGore/BirdDemo/Canyon.x similarity index 100% rename from _release/samples/AGore/BirdDemo/Canyon.x rename to #Test/samples/AGore/BirdDemo/Canyon.x diff --git a/_release/samples/AGore/BirdDemo/KBSplines.bb b/#Test/samples/AGore/BirdDemo/KBSplines.bb similarity index 100% rename from _release/samples/AGore/BirdDemo/KBSplines.bb rename to #Test/samples/AGore/BirdDemo/KBSplines.bb diff --git a/_release/samples/AGore/BirdDemo/Textures/Bird.bmp b/#Test/samples/AGore/BirdDemo/Textures/Bird.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/Bird.bmp rename to #Test/samples/AGore/BirdDemo/Textures/Bird.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/Moss.bmp b/#Test/samples/AGore/BirdDemo/Textures/Moss.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/Moss.bmp rename to #Test/samples/AGore/BirdDemo/Textures/Moss.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/Rock.bmp b/#Test/samples/AGore/BirdDemo/Textures/Rock.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/Rock.bmp rename to #Test/samples/AGore/BirdDemo/Textures/Rock.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/sky_BK.bmp b/#Test/samples/AGore/BirdDemo/Textures/sky_BK.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/sky_BK.bmp rename to #Test/samples/AGore/BirdDemo/Textures/sky_BK.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/sky_FR.bmp b/#Test/samples/AGore/BirdDemo/Textures/sky_FR.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/sky_FR.bmp rename to #Test/samples/AGore/BirdDemo/Textures/sky_FR.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/sky_LF.bmp b/#Test/samples/AGore/BirdDemo/Textures/sky_LF.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/sky_LF.bmp rename to #Test/samples/AGore/BirdDemo/Textures/sky_LF.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/sky_RT.bmp b/#Test/samples/AGore/BirdDemo/Textures/sky_RT.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/sky_RT.bmp rename to #Test/samples/AGore/BirdDemo/Textures/sky_RT.bmp diff --git a/_release/samples/AGore/BirdDemo/Textures/sky_UP.bmp b/#Test/samples/AGore/BirdDemo/Textures/sky_UP.bmp similarity index 100% rename from _release/samples/AGore/BirdDemo/Textures/sky_UP.bmp rename to #Test/samples/AGore/BirdDemo/Textures/sky_UP.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/GrassClip.bmp b/#Test/samples/AGore/GrassDemo/Data/GrassClip.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/GrassClip.bmp rename to #Test/samples/AGore/GrassDemo/Data/GrassClip.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/Ground.bmp b/#Test/samples/AGore/GrassDemo/Data/Ground.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/Ground.bmp rename to #Test/samples/AGore/GrassDemo/Data/Ground.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/lens1.jpg b/#Test/samples/AGore/GrassDemo/Data/lens1.jpg similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/lens1.jpg rename to #Test/samples/AGore/GrassDemo/Data/lens1.jpg diff --git a/_release/samples/AGore/GrassDemo/Data/lens2.jpg b/#Test/samples/AGore/GrassDemo/Data/lens2.jpg similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/lens2.jpg rename to #Test/samples/AGore/GrassDemo/Data/lens2.jpg diff --git a/_release/samples/AGore/GrassDemo/Data/lens3.jpg b/#Test/samples/AGore/GrassDemo/Data/lens3.jpg similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/lens3.jpg rename to #Test/samples/AGore/GrassDemo/Data/lens3.jpg diff --git a/_release/samples/AGore/GrassDemo/Data/lens4.jpg b/#Test/samples/AGore/GrassDemo/Data/lens4.jpg similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/lens4.jpg rename to #Test/samples/AGore/GrassDemo/Data/lens4.jpg diff --git a/_release/samples/AGore/GrassDemo/Data/sky_BK.bmp b/#Test/samples/AGore/GrassDemo/Data/sky_BK.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/sky_BK.bmp rename to #Test/samples/AGore/GrassDemo/Data/sky_BK.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/sky_FR.bmp b/#Test/samples/AGore/GrassDemo/Data/sky_FR.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/sky_FR.bmp rename to #Test/samples/AGore/GrassDemo/Data/sky_FR.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/sky_LF.bmp b/#Test/samples/AGore/GrassDemo/Data/sky_LF.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/sky_LF.bmp rename to #Test/samples/AGore/GrassDemo/Data/sky_LF.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/sky_RT.bmp b/#Test/samples/AGore/GrassDemo/Data/sky_RT.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/sky_RT.bmp rename to #Test/samples/AGore/GrassDemo/Data/sky_RT.bmp diff --git a/_release/samples/AGore/GrassDemo/Data/sky_UP.bmp b/#Test/samples/AGore/GrassDemo/Data/sky_UP.bmp similarity index 100% rename from _release/samples/AGore/GrassDemo/Data/sky_UP.bmp rename to #Test/samples/AGore/GrassDemo/Data/sky_UP.bmp diff --git a/_release/samples/AGore/GrassDemo/Grass.bb b/#Test/samples/AGore/GrassDemo/Grass.bb similarity index 100% rename from _release/samples/AGore/GrassDemo/Grass.bb rename to #Test/samples/AGore/GrassDemo/Grass.bb diff --git a/_release/samples/AGore/HeadDemo/Bkgd.jpg b/#Test/samples/AGore/HeadDemo/Bkgd.jpg similarity index 100% rename from _release/samples/AGore/HeadDemo/Bkgd.jpg rename to #Test/samples/AGore/HeadDemo/Bkgd.jpg diff --git a/_release/samples/AGore/HeadDemo/Eye.jpg b/#Test/samples/AGore/HeadDemo/Eye.jpg similarity index 100% rename from _release/samples/AGore/HeadDemo/Eye.jpg rename to #Test/samples/AGore/HeadDemo/Eye.jpg diff --git a/_release/samples/AGore/HeadDemo/Eye.x b/#Test/samples/AGore/HeadDemo/Eye.x similarity index 100% rename from _release/samples/AGore/HeadDemo/Eye.x rename to #Test/samples/AGore/HeadDemo/Eye.x diff --git a/_release/samples/AGore/HeadDemo/EyeFocus.bbm b/#Test/samples/AGore/HeadDemo/EyeFocus.bbm similarity index 100% rename from _release/samples/AGore/HeadDemo/EyeFocus.bbm rename to #Test/samples/AGore/HeadDemo/EyeFocus.bbm diff --git a/_release/samples/AGore/HeadDemo/Face.jpg b/#Test/samples/AGore/HeadDemo/Face.jpg similarity index 100% rename from _release/samples/AGore/HeadDemo/Face.jpg rename to #Test/samples/AGore/HeadDemo/Face.jpg diff --git a/_release/samples/AGore/HeadDemo/Head.bbm b/#Test/samples/AGore/HeadDemo/Head.bbm similarity index 100% rename from _release/samples/AGore/HeadDemo/Head.bbm rename to #Test/samples/AGore/HeadDemo/Head.bbm diff --git a/_release/samples/AGore/HeadDemo/Head.x b/#Test/samples/AGore/HeadDemo/Head.x similarity index 100% rename from _release/samples/AGore/HeadDemo/Head.x rename to #Test/samples/AGore/HeadDemo/Head.x diff --git a/_release/samples/AGore/HeadDemo/KBSplines.bb b/#Test/samples/AGore/HeadDemo/KBSplines.bb similarity index 100% rename from _release/samples/AGore/HeadDemo/KBSplines.bb rename to #Test/samples/AGore/HeadDemo/KBSplines.bb diff --git a/_release/samples/AGore/HeadDemo/Reflection.jpg b/#Test/samples/AGore/HeadDemo/Reflection.jpg similarity index 100% rename from _release/samples/AGore/HeadDemo/Reflection.jpg rename to #Test/samples/AGore/HeadDemo/Reflection.jpg diff --git a/_release/samples/AGore/HeadDemo/TheHead.bb b/#Test/samples/AGore/HeadDemo/TheHead.bb similarity index 100% rename from _release/samples/AGore/HeadDemo/TheHead.bb rename to #Test/samples/AGore/HeadDemo/TheHead.bb diff --git a/_release/samples/AGore/start.bb b/#Test/samples/AGore/start.bb similarity index 100% rename from _release/samples/AGore/start.bb rename to #Test/samples/AGore/start.bb diff --git a/_release/samples/Hi-Toro/Death Island/deathisland.bb b/#Test/samples/Hi-Toro/Death Island/deathisland.bb similarity index 100% rename from _release/samples/Hi-Toro/Death Island/deathisland.bb rename to #Test/samples/Hi-Toro/Death Island/deathisland.bb diff --git a/_release/samples/Hi-Toro/Death Island/gfx/di.bmp b/#Test/samples/Hi-Toro/Death Island/gfx/di.bmp similarity index 100% rename from _release/samples/Hi-Toro/Death Island/gfx/di.bmp rename to #Test/samples/Hi-Toro/Death Island/gfx/di.bmp diff --git a/_release/samples/Hi-Toro/Death Island/gfx/greygrass.bmp b/#Test/samples/Hi-Toro/Death Island/gfx/greygrass.bmp similarity index 100% rename from _release/samples/Hi-Toro/Death Island/gfx/greygrass.bmp rename to #Test/samples/Hi-Toro/Death Island/gfx/greygrass.bmp diff --git a/_release/samples/Hi-Toro/Death Island/gfx/greywater.bmp b/#Test/samples/Hi-Toro/Death Island/gfx/greywater.bmp similarity index 100% rename from _release/samples/Hi-Toro/Death Island/gfx/greywater.bmp rename to #Test/samples/Hi-Toro/Death Island/gfx/greywater.bmp diff --git a/_release/samples/Hi-Toro/Death Island/gfx/height.bmp b/#Test/samples/Hi-Toro/Death Island/gfx/height.bmp similarity index 100% rename from _release/samples/Hi-Toro/Death Island/gfx/height.bmp rename to #Test/samples/Hi-Toro/Death Island/gfx/height.bmp diff --git a/_release/samples/Hi-Toro/Death Island/gfx/realsky.bmp b/#Test/samples/Hi-Toro/Death Island/gfx/realsky.bmp similarity index 100% rename from _release/samples/Hi-Toro/Death Island/gfx/realsky.bmp rename to #Test/samples/Hi-Toro/Death Island/gfx/realsky.bmp diff --git a/_release/samples/Hi-Toro/Death Island/incs/lensHowTo.bb b/#Test/samples/Hi-Toro/Death Island/incs/lensHowTo.bb similarity index 100% rename from _release/samples/Hi-Toro/Death Island/incs/lensHowTo.bb rename to #Test/samples/Hi-Toro/Death Island/incs/lensHowTo.bb diff --git a/_release/samples/Hi-Toro/Death Island/incs/lensIncs.bb b/#Test/samples/Hi-Toro/Death Island/incs/lensIncs.bb similarity index 100% rename from _release/samples/Hi-Toro/Death Island/incs/lensIncs.bb rename to #Test/samples/Hi-Toro/Death Island/incs/lensIncs.bb diff --git a/_release/samples/Hi-Toro/Death Island/msh/747.X b/#Test/samples/Hi-Toro/Death Island/msh/747.X similarity index 100% rename from _release/samples/Hi-Toro/Death Island/msh/747.X rename to #Test/samples/Hi-Toro/Death Island/msh/747.X diff --git a/_release/samples/Hi-Toro/Death Island/snd/Water2.wav b/#Test/samples/Hi-Toro/Death Island/snd/Water2.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/Water2.wav rename to #Test/samples/Hi-Toro/Death Island/snd/Water2.wav diff --git a/_release/samples/Hi-Toro/Death Island/snd/gravel.wav b/#Test/samples/Hi-Toro/Death Island/snd/gravel.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/gravel.wav rename to #Test/samples/Hi-Toro/Death Island/snd/gravel.wav diff --git a/_release/samples/Hi-Toro/Death Island/snd/rainroof.wav b/#Test/samples/Hi-Toro/Death Island/snd/rainroof.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/rainroof.wav rename to #Test/samples/Hi-Toro/Death Island/snd/rainroof.wav diff --git a/_release/samples/Hi-Toro/Death Island/snd/seawind2.wav b/#Test/samples/Hi-Toro/Death Island/snd/seawind2.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/seawind2.wav rename to #Test/samples/Hi-Toro/Death Island/snd/seawind2.wav diff --git a/_release/samples/Hi-Toro/Death Island/snd/thunder.wav b/#Test/samples/Hi-Toro/Death Island/snd/thunder.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/thunder.wav rename to #Test/samples/Hi-Toro/Death Island/snd/thunder.wav diff --git a/_release/samples/Hi-Toro/Death Island/snd/txstorm.wav b/#Test/samples/Hi-Toro/Death Island/snd/txstorm.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/txstorm.wav rename to #Test/samples/Hi-Toro/Death Island/snd/txstorm.wav diff --git a/_release/samples/Hi-Toro/Death Island/snd/wavdance.wav b/#Test/samples/Hi-Toro/Death Island/snd/wavdance.wav similarity index 100% rename from _release/samples/Hi-Toro/Death Island/snd/wavdance.wav rename to #Test/samples/Hi-Toro/Death Island/snd/wavdance.wav diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/ashot.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/ashot.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/ashot.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/ashot.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/fire.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/fire.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/fire.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/fire.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/grass.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/grass.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/grass.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/grass.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/height.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/height.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/height.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/height.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/splash.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/splash.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/splash.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/splash.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/target.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/target.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/target.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/target.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/gfx/water.bmp b/#Test/samples/Hi-Toro/Shooter/Shooter/gfx/water.bmp similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/gfx/water.bmp rename to #Test/samples/Hi-Toro/Shooter/Shooter/gfx/water.bmp diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/msh/ship.x b/#Test/samples/Hi-Toro/Shooter/Shooter/msh/ship.x similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/msh/ship.x rename to #Test/samples/Hi-Toro/Shooter/Shooter/msh/ship.x diff --git a/_release/samples/Hi-Toro/Shooter/Shooter/shooter-testbed.bb b/#Test/samples/Hi-Toro/Shooter/Shooter/shooter-testbed.bb similarity index 100% rename from _release/samples/Hi-Toro/Shooter/Shooter/shooter-testbed.bb rename to #Test/samples/Hi-Toro/Shooter/Shooter/shooter-testbed.bb diff --git a/_release/samples/MattDavey/Matts Balls/bouncey.bb b/#Test/samples/MattDavey/Matts Balls/bouncey.bb similarity index 100% rename from _release/samples/MattDavey/Matts Balls/bouncey.bb rename to #Test/samples/MattDavey/Matts Balls/bouncey.bb diff --git a/_release/samples/MattDavey/Matts Balls/plane.3DS b/#Test/samples/MattDavey/Matts Balls/plane.3DS similarity index 100% rename from _release/samples/MattDavey/Matts Balls/plane.3DS rename to #Test/samples/MattDavey/Matts Balls/plane.3DS diff --git a/_release/samples/MattDavey/Matts Balls/planks02.jpg b/#Test/samples/MattDavey/Matts Balls/planks02.jpg similarity index 100% rename from _release/samples/MattDavey/Matts Balls/planks02.jpg rename to #Test/samples/MattDavey/Matts Balls/planks02.jpg diff --git a/_release/samples/MattDavey/Matts Balls/spark.BMP b/#Test/samples/MattDavey/Matts Balls/spark.BMP similarity index 100% rename from _release/samples/MattDavey/Matts Balls/spark.BMP rename to #Test/samples/MattDavey/Matts Balls/spark.BMP diff --git a/_release/samples/Richard_Betson/Big_Bang_1b/Big_Bang_1b.bb b/#Test/samples/Richard_Betson/Big_Bang_1b/Big_Bang_1b.bb similarity index 100% rename from _release/samples/Richard_Betson/Big_Bang_1b/Big_Bang_1b.bb rename to #Test/samples/Richard_Betson/Big_Bang_1b/Big_Bang_1b.bb diff --git a/_release/samples/Richard_Betson/Big_Bang_1b/Bigspark.BMP b/#Test/samples/Richard_Betson/Big_Bang_1b/Bigspark.BMP similarity index 100% rename from _release/samples/Richard_Betson/Big_Bang_1b/Bigspark.BMP rename to #Test/samples/Richard_Betson/Big_Bang_1b/Bigspark.BMP diff --git a/_release/samples/Richard_Betson/Big_Bang_1b/gate4.bmp b/#Test/samples/Richard_Betson/Big_Bang_1b/gate4.bmp similarity index 100% rename from _release/samples/Richard_Betson/Big_Bang_1b/gate4.bmp rename to #Test/samples/Richard_Betson/Big_Bang_1b/gate4.bmp diff --git a/_release/samples/Richard_Betson/Big_Bang_1b/ring2.bmp b/#Test/samples/Richard_Betson/Big_Bang_1b/ring2.bmp similarity index 100% rename from _release/samples/Richard_Betson/Big_Bang_1b/ring2.bmp rename to #Test/samples/Richard_Betson/Big_Bang_1b/ring2.bmp diff --git a/_release/samples/Richard_Betson/Binary_Cage_12/Binary_Cage_12.bb b/#Test/samples/Richard_Betson/Binary_Cage_12/Binary_Cage_12.bb similarity index 100% rename from _release/samples/Richard_Betson/Binary_Cage_12/Binary_Cage_12.bb rename to #Test/samples/Richard_Betson/Binary_Cage_12/Binary_Cage_12.bb diff --git a/_release/samples/Richard_Betson/Power_fountain_b/brick1.bmp b/#Test/samples/Richard_Betson/Power_fountain_b/brick1.bmp similarity index 100% rename from _release/samples/Richard_Betson/Power_fountain_b/brick1.bmp rename to #Test/samples/Richard_Betson/Power_fountain_b/brick1.bmp diff --git a/_release/samples/Richard_Betson/Power_fountain_b/power_fountian_b.bb b/#Test/samples/Richard_Betson/Power_fountain_b/power_fountian_b.bb similarity index 100% rename from _release/samples/Richard_Betson/Power_fountain_b/power_fountian_b.bb rename to #Test/samples/Richard_Betson/Power_fountain_b/power_fountian_b.bb diff --git a/_release/samples/Richard_Betson/Power_fountain_b/spark.BMP b/#Test/samples/Richard_Betson/Power_fountain_b/spark.BMP similarity index 100% rename from _release/samples/Richard_Betson/Power_fountain_b/spark.BMP rename to #Test/samples/Richard_Betson/Power_fountain_b/spark.BMP diff --git a/_release/samples/Richard_Betson/Power_fountain_b/stone.bmp b/#Test/samples/Richard_Betson/Power_fountain_b/stone.bmp similarity index 100% rename from _release/samples/Richard_Betson/Power_fountain_b/stone.bmp rename to #Test/samples/Richard_Betson/Power_fountain_b/stone.bmp diff --git a/_release/samples/Richard_Betson/emerald_gate/Emerald_Gate.txt b/#Test/samples/Richard_Betson/emerald_gate/Emerald_Gate.txt similarity index 100% rename from _release/samples/Richard_Betson/emerald_gate/Emerald_Gate.txt rename to #Test/samples/Richard_Betson/emerald_gate/Emerald_Gate.txt diff --git a/_release/samples/Richard_Betson/emerald_gate/Emerald_Gate_1.bb b/#Test/samples/Richard_Betson/emerald_gate/Emerald_Gate_1.bb similarity index 100% rename from _release/samples/Richard_Betson/emerald_gate/Emerald_Gate_1.bb rename to #Test/samples/Richard_Betson/emerald_gate/Emerald_Gate_1.bb diff --git a/_release/samples/Richard_Betson/emerald_gate/gate1.bmp b/#Test/samples/Richard_Betson/emerald_gate/gate1.bmp similarity index 100% rename from _release/samples/Richard_Betson/emerald_gate/gate1.bmp rename to #Test/samples/Richard_Betson/emerald_gate/gate1.bmp diff --git a/_release/samples/Richard_Betson/emerald_gate/my_stargate3.3ds b/#Test/samples/Richard_Betson/emerald_gate/my_stargate3.3ds similarity index 100% rename from _release/samples/Richard_Betson/emerald_gate/my_stargate3.3ds rename to #Test/samples/Richard_Betson/emerald_gate/my_stargate3.3ds diff --git a/_release/samples/Richard_Betson/emerald_gate/stone.bmp b/#Test/samples/Richard_Betson/emerald_gate/stone.bmp similarity index 100% rename from _release/samples/Richard_Betson/emerald_gate/stone.bmp rename to #Test/samples/Richard_Betson/emerald_gate/stone.bmp diff --git a/_release/samples/Richard_Betson/emerald_gate/water_anim.bmp b/#Test/samples/Richard_Betson/emerald_gate/water_anim.bmp similarity index 100% rename from _release/samples/Richard_Betson/emerald_gate/water_anim.bmp rename to #Test/samples/Richard_Betson/emerald_gate/water_anim.bmp diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/belt.bmp b/#Test/samples/Richard_Betson/orbit_nebula_source/belt.bmp similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/belt.bmp rename to #Test/samples/Richard_Betson/orbit_nebula_source/belt.bmp diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/io.BMP b/#Test/samples/Richard_Betson/orbit_nebula_source/io.BMP similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/io.BMP rename to #Test/samples/Richard_Betson/orbit_nebula_source/io.BMP diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/moon.BMP b/#Test/samples/Richard_Betson/orbit_nebula_source/moon.BMP similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/moon.BMP rename to #Test/samples/Richard_Betson/orbit_nebula_source/moon.BMP diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/nebula1.bmp b/#Test/samples/Richard_Betson/orbit_nebula_source/nebula1.bmp similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/nebula1.bmp rename to #Test/samples/Richard_Betson/orbit_nebula_source/nebula1.bmp diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/orbit.bb b/#Test/samples/Richard_Betson/orbit_nebula_source/orbit.bb similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/orbit.bb rename to #Test/samples/Richard_Betson/orbit_nebula_source/orbit.bb diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/ring.bmp b/#Test/samples/Richard_Betson/orbit_nebula_source/ring.bmp similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/ring.bmp rename to #Test/samples/Richard_Betson/orbit_nebula_source/ring.bmp diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/ring2.bmp b/#Test/samples/Richard_Betson/orbit_nebula_source/ring2.bmp similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/ring2.bmp rename to #Test/samples/Richard_Betson/orbit_nebula_source/ring2.bmp diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/rock.3DS b/#Test/samples/Richard_Betson/orbit_nebula_source/rock.3DS similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/rock.3DS rename to #Test/samples/Richard_Betson/orbit_nebula_source/rock.3DS diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/rock.bmp b/#Test/samples/Richard_Betson/orbit_nebula_source/rock.bmp similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/rock.bmp rename to #Test/samples/Richard_Betson/orbit_nebula_source/rock.bmp diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/signal.wav b/#Test/samples/Richard_Betson/orbit_nebula_source/signal.wav similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/signal.wav rename to #Test/samples/Richard_Betson/orbit_nebula_source/signal.wav diff --git a/_release/samples/Richard_Betson/orbit_nebula_source/spark.bmp b/#Test/samples/Richard_Betson/orbit_nebula_source/spark.bmp similarity index 100% rename from _release/samples/Richard_Betson/orbit_nebula_source/spark.bmp rename to #Test/samples/Richard_Betson/orbit_nebula_source/spark.bmp diff --git a/_release/samples/Richard_Betson/start.bb b/#Test/samples/Richard_Betson/start.bb similarity index 100% rename from _release/samples/Richard_Betson/start.bb rename to #Test/samples/Richard_Betson/start.bb diff --git a/_release/samples/RobCummings/Bumpy/b.jpg b/#Test/samples/RobCummings/Bumpy/b.jpg similarity index 100% rename from _release/samples/RobCummings/Bumpy/b.jpg rename to #Test/samples/RobCummings/Bumpy/b.jpg diff --git a/_release/samples/RobCummings/Bumpy/bumpyfun.bb b/#Test/samples/RobCummings/Bumpy/bumpyfun.bb similarity index 100% rename from _release/samples/RobCummings/Bumpy/bumpyfun.bb rename to #Test/samples/RobCummings/Bumpy/bumpyfun.bb diff --git a/_release/samples/RobCummings/Bumpy/c.jpg b/#Test/samples/RobCummings/Bumpy/c.jpg similarity index 100% rename from _release/samples/RobCummings/Bumpy/c.jpg rename to #Test/samples/RobCummings/Bumpy/c.jpg diff --git a/_release/samples/RobCummings/Bumpy/glow.bmp b/#Test/samples/RobCummings/Bumpy/glow.bmp similarity index 100% rename from _release/samples/RobCummings/Bumpy/glow.bmp rename to #Test/samples/RobCummings/Bumpy/glow.bmp diff --git a/_release/samples/RobCummings/Bumpy/s.jpg b/#Test/samples/RobCummings/Bumpy/s.jpg similarity index 100% rename from _release/samples/RobCummings/Bumpy/s.jpg rename to #Test/samples/RobCummings/Bumpy/s.jpg diff --git a/_release/samples/RobCummings/PyromaniaBB/PyromaniaBB-1.bb b/#Test/samples/RobCummings/PyromaniaBB/PyromaniaBB-1.bb similarity index 100% rename from _release/samples/RobCummings/PyromaniaBB/PyromaniaBB-1.bb rename to #Test/samples/RobCummings/PyromaniaBB/PyromaniaBB-1.bb diff --git a/_release/samples/RobCummings/PyromaniaBB/boomstrip.bmp b/#Test/samples/RobCummings/PyromaniaBB/boomstrip.bmp similarity index 100% rename from _release/samples/RobCummings/PyromaniaBB/boomstrip.bmp rename to #Test/samples/RobCummings/PyromaniaBB/boomstrip.bmp diff --git a/_release/samples/RobCummings/PyromaniaBB/readme.txt b/#Test/samples/RobCummings/PyromaniaBB/readme.txt similarity index 100% rename from _release/samples/RobCummings/PyromaniaBB/readme.txt rename to #Test/samples/RobCummings/PyromaniaBB/readme.txt diff --git a/_release/samples/RobCummings/PyromaniaBB/start.bb b/#Test/samples/RobCummings/PyromaniaBB/start.bb similarity index 100% rename from _release/samples/RobCummings/PyromaniaBB/start.bb rename to #Test/samples/RobCummings/PyromaniaBB/start.bb diff --git a/_release/samples/RobHutchinson/BBLauncher/About.TXT b/#Test/samples/RobHutchinson/BBLauncher/About.TXT similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/About.TXT rename to #Test/samples/RobHutchinson/BBLauncher/About.TXT diff --git a/_release/samples/RobHutchinson/BBLauncher/Docs/Readme.txt b/#Test/samples/RobHutchinson/BBLauncher/Docs/Readme.txt similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/Docs/Readme.txt rename to #Test/samples/RobHutchinson/BBLauncher/Docs/Readme.txt diff --git a/_release/samples/RobHutchinson/BBLauncher/Launcher.INI b/#Test/samples/RobHutchinson/BBLauncher/Launcher.INI similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/Launcher.INI rename to #Test/samples/RobHutchinson/BBLauncher/Launcher.INI diff --git a/_release/samples/RobHutchinson/BBLauncher/Launcher.exe b/#Test/samples/RobHutchinson/BBLauncher/Launcher.exe similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/Launcher.exe rename to #Test/samples/RobHutchinson/BBLauncher/Launcher.exe diff --git a/_release/samples/RobHutchinson/BBLauncher/Launcher_CLEAN.INI b/#Test/samples/RobHutchinson/BBLauncher/Launcher_CLEAN.INI similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/Launcher_CLEAN.INI rename to #Test/samples/RobHutchinson/BBLauncher/Launcher_CLEAN.INI diff --git a/_release/samples/RobHutchinson/BBLauncher/example.bb b/#Test/samples/RobHutchinson/BBLauncher/example.bb similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/example.bb rename to #Test/samples/RobHutchinson/BBLauncher/example.bb diff --git a/_release/samples/RobHutchinson/BBLauncher/icon.ico b/#Test/samples/RobHutchinson/BBLauncher/icon.ico similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/icon.ico rename to #Test/samples/RobHutchinson/BBLauncher/icon.ico diff --git a/_release/samples/RobHutchinson/BBLauncher/launcher2d.bb b/#Test/samples/RobHutchinson/BBLauncher/launcher2d.bb similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/launcher2d.bb rename to #Test/samples/RobHutchinson/BBLauncher/launcher2d.bb diff --git a/_release/samples/RobHutchinson/BBLauncher/launcher3d.bb b/#Test/samples/RobHutchinson/BBLauncher/launcher3d.bb similarity index 100% rename from _release/samples/RobHutchinson/BBLauncher/launcher3d.bb rename to #Test/samples/RobHutchinson/BBLauncher/launcher3d.bb diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Graveyard.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Graveyard.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Graveyard.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Graveyard.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Heaven.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Heaven.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Heaven.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Block Heaven.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel 2.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel 2.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel 2.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel 2.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Colour Tunnel.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning SLOW.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning SLOW.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning SLOW.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning SLOW.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original + Zoom Panning.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Beta Version.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Beta Version.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Beta Version.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Beta Version.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Fish Eye.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Fish Eye.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Fish Eye.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Original Fish Eye.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Pole Position Tunnel Race I.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Pole Position Tunnel Race I.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Pole Position Tunnel Race I.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Pole Position Tunnel Race I.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Red Weirdness.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Red Weirdness.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Red Weirdness.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Red Weirdness.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Scorching Sun.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Scorching Sun.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Scorching Sun.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Scorching Sun.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Super Fish Eye.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Super Fish Eye.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Super Fish Eye.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Super Fish Eye.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/Warp Factor 10 Tunnel Race.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Warp Factor 10 Tunnel Race.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/Warp Factor 10 Tunnel Race.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/Warp Factor 10 Tunnel Race.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Profiles/_Default.pro b/#Test/samples/RobHutchinson/BloxAndSpheres/Profiles/_Default.pro similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Profiles/_Default.pro rename to #Test/samples/RobHutchinson/BloxAndSpheres/Profiles/_Default.pro diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/BlueMush.bmp b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/BlueMush.bmp similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/BlueMush.bmp rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/BlueMush.bmp diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/Brick1.bmp b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/Brick1.bmp similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/Brick1.bmp rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/Brick1.bmp diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/GridEnv.jpg b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/GridEnv.jpg similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/GridEnv.jpg rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/GridEnv.jpg diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/Marble1.jpg b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/Marble1.jpg similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/Marble1.jpg rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/Marble1.jpg diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/RedTile.bmp b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/RedTile.bmp similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/RedTile.bmp rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/RedTile.bmp diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/SDS.bmp b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/SDS.bmp similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/SDS.bmp rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/SDS.bmp diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/Stone1.bmp b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/Stone1.bmp similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/Stone1.bmp rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/Stone1.bmp diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/Textures/Wood1.bmp b/#Test/samples/RobHutchinson/BloxAndSpheres/Textures/Wood1.bmp similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/Textures/Wood1.bmp rename to #Test/samples/RobHutchinson/BloxAndSpheres/Textures/Wood1.bmp diff --git a/_release/samples/RobHutchinson/BloxAndSpheres/blox&spheres.bb b/#Test/samples/RobHutchinson/BloxAndSpheres/blox&spheres.bb similarity index 100% rename from _release/samples/RobHutchinson/BloxAndSpheres/blox&spheres.bb rename to #Test/samples/RobHutchinson/BloxAndSpheres/blox&spheres.bb diff --git a/_release/samples/RobHutchinson/CraftFlare/Craft1.x b/#Test/samples/RobHutchinson/CraftFlare/Craft1.x similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/Craft1.x rename to #Test/samples/RobHutchinson/CraftFlare/Craft1.x diff --git a/_release/samples/RobHutchinson/CraftFlare/Craft1_0.bmp b/#Test/samples/RobHutchinson/CraftFlare/Craft1_0.bmp similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/Craft1_0.bmp rename to #Test/samples/RobHutchinson/CraftFlare/Craft1_0.bmp diff --git a/_release/samples/RobHutchinson/CraftFlare/Craft1_1.bmp b/#Test/samples/RobHutchinson/CraftFlare/Craft1_1.bmp similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/Craft1_1.bmp rename to #Test/samples/RobHutchinson/CraftFlare/Craft1_1.bmp diff --git a/_release/samples/RobHutchinson/CraftFlare/Craft1_2.bmp b/#Test/samples/RobHutchinson/CraftFlare/Craft1_2.bmp similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/Craft1_2.bmp rename to #Test/samples/RobHutchinson/CraftFlare/Craft1_2.bmp diff --git a/_release/samples/RobHutchinson/CraftFlare/CraftFlare.bb b/#Test/samples/RobHutchinson/CraftFlare/CraftFlare.bb similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/CraftFlare.bb rename to #Test/samples/RobHutchinson/CraftFlare/CraftFlare.bb diff --git a/_release/samples/RobHutchinson/CraftFlare/CraftFlare_Readme.txt b/#Test/samples/RobHutchinson/CraftFlare/CraftFlare_Readme.txt similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/CraftFlare_Readme.txt rename to #Test/samples/RobHutchinson/CraftFlare/CraftFlare_Readme.txt diff --git a/_release/samples/RobHutchinson/CraftFlare/Flame1.bmp b/#Test/samples/RobHutchinson/CraftFlare/Flame1.bmp similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/Flame1.bmp rename to #Test/samples/RobHutchinson/CraftFlare/Flame1.bmp diff --git a/_release/samples/RobHutchinson/CraftFlare/Flame2.bmp b/#Test/samples/RobHutchinson/CraftFlare/Flame2.bmp similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/Flame2.bmp rename to #Test/samples/RobHutchinson/CraftFlare/Flame2.bmp diff --git a/_release/samples/RobHutchinson/CraftFlare/start.bb b/#Test/samples/RobHutchinson/CraftFlare/start.bb similarity index 100% rename from _release/samples/RobHutchinson/CraftFlare/start.bb rename to #Test/samples/RobHutchinson/CraftFlare/start.bb diff --git a/_release/samples/RobHutchinson/ModelChildren/Models/facia.x b/#Test/samples/RobHutchinson/ModelChildren/Models/facia.x similarity index 100% rename from _release/samples/RobHutchinson/ModelChildren/Models/facia.x rename to #Test/samples/RobHutchinson/ModelChildren/Models/facia.x diff --git a/_release/samples/RobHutchinson/ModelChildren/Models/facia_0.bmp b/#Test/samples/RobHutchinson/ModelChildren/Models/facia_0.bmp similarity index 100% rename from _release/samples/RobHutchinson/ModelChildren/Models/facia_0.bmp rename to #Test/samples/RobHutchinson/ModelChildren/Models/facia_0.bmp diff --git a/_release/samples/RobHutchinson/ModelChildren/Models/facia_1.bmp b/#Test/samples/RobHutchinson/ModelChildren/Models/facia_1.bmp similarity index 100% rename from _release/samples/RobHutchinson/ModelChildren/Models/facia_1.bmp rename to #Test/samples/RobHutchinson/ModelChildren/Models/facia_1.bmp diff --git a/_release/samples/RobHutchinson/ModelChildren/modelchildren.bb b/#Test/samples/RobHutchinson/ModelChildren/modelchildren.bb similarity index 100% rename from _release/samples/RobHutchinson/ModelChildren/modelchildren.bb rename to #Test/samples/RobHutchinson/ModelChildren/modelchildren.bb diff --git a/_release/samples/RobHutchinson/ModelChildren/start.bb b/#Test/samples/RobHutchinson/ModelChildren/start.bb similarity index 100% rename from _release/samples/RobHutchinson/ModelChildren/start.bb rename to #Test/samples/RobHutchinson/ModelChildren/start.bb diff --git a/_release/samples/RobHutchinson/SkyPlateau/About.TXT b/#Test/samples/RobHutchinson/SkyPlateau/About.TXT similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/About.TXT rename to #Test/samples/RobHutchinson/SkyPlateau/About.TXT diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/env.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/env.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/env.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/env.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/env2.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/env2.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/env2.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/env2.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/flare.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/flare.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/flare.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/flare.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/hyperflare.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/hyperflare.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/hyperflare.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/hyperflare.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/logo.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/logo.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/logo.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/logo.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/lower.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/lower.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/lower.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/lower.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/menubar.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/menubar.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/menubar.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/menubar.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/options.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/options.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/options.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/options.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/plantlife.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/plantlife.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/plantlife.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/plantlife.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/shields.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/shields.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/shields.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/shields.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/sky.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/sky.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/sky.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/sky.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Graphics/stars.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Graphics/stars.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Graphics/stars.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Graphics/stars.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Launcher.INI b/#Test/samples/RobHutchinson/SkyPlateau/Launcher.INI similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Launcher.INI rename to #Test/samples/RobHutchinson/SkyPlateau/Launcher.INI diff --git a/_release/samples/RobHutchinson/SkyPlateau/Launcher.exe b/#Test/samples/RobHutchinson/SkyPlateau/Launcher.exe similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Launcher.exe rename to #Test/samples/RobHutchinson/SkyPlateau/Launcher.exe diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/ground.x b/#Test/samples/RobHutchinson/SkyPlateau/Models/ground.x similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/ground.x rename to #Test/samples/RobHutchinson/SkyPlateau/Models/ground.x diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/ground_0.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Models/ground_0.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/ground_0.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Models/ground_0.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/ground_1.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Models/ground_1.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/ground_1.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Models/ground_1.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/ground_2.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Models/ground_2.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/ground_2.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Models/ground_2.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/ground_3.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Models/ground_3.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/ground_3.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Models/ground_3.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/icon.x b/#Test/samples/RobHutchinson/SkyPlateau/Models/icon.x similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/icon.x rename to #Test/samples/RobHutchinson/SkyPlateau/Models/icon.x diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/mix.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Models/mix.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/mix.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Models/mix.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/plantlife.md2 b/#Test/samples/RobHutchinson/SkyPlateau/Models/plantlife.md2 similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/plantlife.md2 rename to #Test/samples/RobHutchinson/SkyPlateau/Models/plantlife.md2 diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/totem.x b/#Test/samples/RobHutchinson/SkyPlateau/Models/totem.x similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/totem.x rename to #Test/samples/RobHutchinson/SkyPlateau/Models/totem.x diff --git a/_release/samples/RobHutchinson/SkyPlateau/Models/totem_0.bmp b/#Test/samples/RobHutchinson/SkyPlateau/Models/totem_0.bmp similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Models/totem_0.bmp rename to #Test/samples/RobHutchinson/SkyPlateau/Models/totem_0.bmp diff --git a/_release/samples/RobHutchinson/SkyPlateau/Music/atmos.mp3 b/#Test/samples/RobHutchinson/SkyPlateau/Music/atmos.mp3 similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Music/atmos.mp3 rename to #Test/samples/RobHutchinson/SkyPlateau/Music/atmos.mp3 diff --git a/_release/samples/RobHutchinson/SkyPlateau/Settings.INI b/#Test/samples/RobHutchinson/SkyPlateau/Settings.INI similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/Settings.INI rename to #Test/samples/RobHutchinson/SkyPlateau/Settings.INI diff --git a/_release/samples/RobHutchinson/SkyPlateau/SkyPlateau.bb b/#Test/samples/RobHutchinson/SkyPlateau/SkyPlateau.bb similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/SkyPlateau.bb rename to #Test/samples/RobHutchinson/SkyPlateau/SkyPlateau.bb diff --git a/_release/samples/RobHutchinson/SkyPlateau/icon.ico b/#Test/samples/RobHutchinson/SkyPlateau/icon.ico similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/icon.ico rename to #Test/samples/RobHutchinson/SkyPlateau/icon.ico diff --git a/_release/samples/RobHutchinson/SkyPlateau/launcher3d.bb b/#Test/samples/RobHutchinson/SkyPlateau/launcher3d.bb similarity index 100% rename from _release/samples/RobHutchinson/SkyPlateau/launcher3d.bb rename to #Test/samples/RobHutchinson/SkyPlateau/launcher3d.bb diff --git a/_release/samples/RobHutchinson/WateryTerrain/oceanfloor.bmp b/#Test/samples/RobHutchinson/WateryTerrain/oceanfloor.bmp similarity index 100% rename from _release/samples/RobHutchinson/WateryTerrain/oceanfloor.bmp rename to #Test/samples/RobHutchinson/WateryTerrain/oceanfloor.bmp diff --git a/_release/samples/RobHutchinson/WateryTerrain/start.bb b/#Test/samples/RobHutchinson/WateryTerrain/start.bb similarity index 100% rename from _release/samples/RobHutchinson/WateryTerrain/start.bb rename to #Test/samples/RobHutchinson/WateryTerrain/start.bb diff --git a/_release/samples/RobHutchinson/WateryTerrain/water.bb b/#Test/samples/RobHutchinson/WateryTerrain/water.bb similarity index 100% rename from _release/samples/RobHutchinson/WateryTerrain/water.bb rename to #Test/samples/RobHutchinson/WateryTerrain/water.bb diff --git a/_release/samples/RobHutchinson/WateryTerrain/water.bmp b/#Test/samples/RobHutchinson/WateryTerrain/water.bmp similarity index 100% rename from _release/samples/RobHutchinson/WateryTerrain/water.bmp rename to #Test/samples/RobHutchinson/WateryTerrain/water.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/Craft1.x b/#Test/samples/RobHutchinson/WingPilot/Craft1.x similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/Craft1.x rename to #Test/samples/RobHutchinson/WingPilot/Craft1.x diff --git a/_release/samples/RobHutchinson/WingPilot/Craft1_0.bmp b/#Test/samples/RobHutchinson/WingPilot/Craft1_0.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/Craft1_0.bmp rename to #Test/samples/RobHutchinson/WingPilot/Craft1_0.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/Craft1_1.bmp b/#Test/samples/RobHutchinson/WingPilot/Craft1_1.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/Craft1_1.bmp rename to #Test/samples/RobHutchinson/WingPilot/Craft1_1.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/Craft1_2.bmp b/#Test/samples/RobHutchinson/WingPilot/Craft1_2.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/Craft1_2.bmp rename to #Test/samples/RobHutchinson/WingPilot/Craft1_2.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/WingPilotV0_01.bb b/#Test/samples/RobHutchinson/WingPilot/WingPilotV0_01.bb similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/WingPilotV0_01.bb rename to #Test/samples/RobHutchinson/WingPilot/WingPilotV0_01.bb diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/Lava3.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/Lava3.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/Lava3.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/Lava3.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/Marblate1.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/Marblate1.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/Marblate1.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/Marblate1.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/Watery.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/Watery.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/Watery.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/Watery.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/Watery3.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/Watery3.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/Watery3.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/Watery3.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/Weird.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/Weird.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/Weird.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/Weird.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/bullet1.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/bullet1.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/bullet1.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/bullet1.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/bullet2.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/bullet2.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/bullet2.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/bullet2.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/central.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/central.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/central.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/central.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/flame1.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/flame1.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/flame1.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/flame1.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/flame2.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/flame2.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/flame2.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/flame2.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/lamp.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/lamp.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/lamp.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/lamp.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/ring.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/ring.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/ring.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/ring.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/graphics/shields.bmp b/#Test/samples/RobHutchinson/WingPilot/graphics/shields.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/graphics/shields.bmp rename to #Test/samples/RobHutchinson/WingPilot/graphics/shields.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/image_source/insignia.bmp b/#Test/samples/RobHutchinson/WingPilot/image_source/insignia.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/image_source/insignia.bmp rename to #Test/samples/RobHutchinson/WingPilot/image_source/insignia.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/model_source/eye_piece1.3ds b/#Test/samples/RobHutchinson/WingPilot/model_source/eye_piece1.3ds similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/model_source/eye_piece1.3ds rename to #Test/samples/RobHutchinson/WingPilot/model_source/eye_piece1.3ds diff --git a/_release/samples/RobHutchinson/WingPilot/model_source/frame.bmp b/#Test/samples/RobHutchinson/WingPilot/model_source/frame.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/model_source/frame.bmp rename to #Test/samples/RobHutchinson/WingPilot/model_source/frame.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/model_source/grscreen.bmp b/#Test/samples/RobHutchinson/WingPilot/model_source/grscreen.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/model_source/grscreen.bmp rename to #Test/samples/RobHutchinson/WingPilot/model_source/grscreen.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/objects/eyepiece.x b/#Test/samples/RobHutchinson/WingPilot/objects/eyepiece.x similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/objects/eyepiece.x rename to #Test/samples/RobHutchinson/WingPilot/objects/eyepiece.x diff --git a/_release/samples/RobHutchinson/WingPilot/objects/eyepiece_0.bmp b/#Test/samples/RobHutchinson/WingPilot/objects/eyepiece_0.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/objects/eyepiece_0.bmp rename to #Test/samples/RobHutchinson/WingPilot/objects/eyepiece_0.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/objects/eyepiece_1.bmp b/#Test/samples/RobHutchinson/WingPilot/objects/eyepiece_1.bmp similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/objects/eyepiece_1.bmp rename to #Test/samples/RobHutchinson/WingPilot/objects/eyepiece_1.bmp diff --git a/_release/samples/RobHutchinson/WingPilot/objects/maincent.x b/#Test/samples/RobHutchinson/WingPilot/objects/maincent.x similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/objects/maincent.x rename to #Test/samples/RobHutchinson/WingPilot/objects/maincent.x diff --git a/_release/samples/RobHutchinson/WingPilot/objects/mainring.x b/#Test/samples/RobHutchinson/WingPilot/objects/mainring.x similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/objects/mainring.x rename to #Test/samples/RobHutchinson/WingPilot/objects/mainring.x diff --git a/_release/samples/RobHutchinson/WingPilot/sounds/bonus.wav b/#Test/samples/RobHutchinson/WingPilot/sounds/bonus.wav similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/sounds/bonus.wav rename to #Test/samples/RobHutchinson/WingPilot/sounds/bonus.wav diff --git a/_release/samples/RobHutchinson/WingPilot/sounds/bullet1.wav b/#Test/samples/RobHutchinson/WingPilot/sounds/bullet1.wav similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/sounds/bullet1.wav rename to #Test/samples/RobHutchinson/WingPilot/sounds/bullet1.wav diff --git a/_release/samples/RobHutchinson/WingPilot/sounds/damage.wav b/#Test/samples/RobHutchinson/WingPilot/sounds/damage.wav similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/sounds/damage.wav rename to #Test/samples/RobHutchinson/WingPilot/sounds/damage.wav diff --git a/_release/samples/RobHutchinson/WingPilot/sounds/toot.wav b/#Test/samples/RobHutchinson/WingPilot/sounds/toot.wav similarity index 100% rename from _release/samples/RobHutchinson/WingPilot/sounds/toot.wav rename to #Test/samples/RobHutchinson/WingPilot/sounds/toot.wav diff --git a/_release/samples/Skully/flares/Graphics/redspark.bmp b/#Test/samples/Skully/flares/Graphics/redspark.bmp similarity index 100% rename from _release/samples/Skully/flares/Graphics/redspark.bmp rename to #Test/samples/Skully/flares/Graphics/redspark.bmp diff --git a/_release/samples/Skully/flares/flares.bb b/#Test/samples/Skully/flares/flares.bb similarity index 100% rename from _release/samples/Skully/flares/flares.bb rename to #Test/samples/Skully/flares/flares.bb diff --git a/_release/samples/Skully/flares/readme.txt b/#Test/samples/Skully/flares/readme.txt similarity index 100% rename from _release/samples/Skully/flares/readme.txt rename to #Test/samples/Skully/flares/readme.txt diff --git a/_release/samples/Skully/flares/startup.ini b/#Test/samples/Skully/flares/startup.ini similarity index 100% rename from _release/samples/Skully/flares/startup.ini rename to #Test/samples/Skully/flares/startup.ini diff --git a/_release/samples/Skully/start.bb b/#Test/samples/Skully/start.bb similarity index 100% rename from _release/samples/Skully/start.bb rename to #Test/samples/Skully/start.bb diff --git a/_release/samples/birdie/2d-3dsprites/sprites.bb b/#Test/samples/birdie/2d-3dsprites/sprites.bb similarity index 100% rename from _release/samples/birdie/2d-3dsprites/sprites.bb rename to #Test/samples/birdie/2d-3dsprites/sprites.bb diff --git a/_release/samples/birdie/2d-3dsprites/test.jpg b/#Test/samples/birdie/2d-3dsprites/test.jpg similarity index 100% rename from _release/samples/birdie/2d-3dsprites/test.jpg rename to #Test/samples/birdie/2d-3dsprites/test.jpg diff --git a/_release/samples/birdie/Brush Tiles/Moss.bmp b/#Test/samples/birdie/Brush Tiles/Moss.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/Moss.bmp rename to #Test/samples/birdie/Brush Tiles/Moss.bmp diff --git a/_release/samples/birdie/Brush Tiles/bl3d_big.jpg b/#Test/samples/birdie/Brush Tiles/bl3d_big.jpg similarity index 100% rename from _release/samples/birdie/Brush Tiles/bl3d_big.jpg rename to #Test/samples/birdie/Brush Tiles/bl3d_big.jpg diff --git a/_release/samples/birdie/Brush Tiles/hmap.BMP b/#Test/samples/birdie/Brush Tiles/hmap.BMP similarity index 100% rename from _release/samples/birdie/Brush Tiles/hmap.BMP rename to #Test/samples/birdie/Brush Tiles/hmap.BMP diff --git a/_release/samples/birdie/Brush Tiles/lightmap.bmp b/#Test/samples/birdie/Brush Tiles/lightmap.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/lightmap.bmp rename to #Test/samples/birdie/Brush Tiles/lightmap.bmp diff --git a/_release/samples/birdie/Brush Tiles/mask.BMP b/#Test/samples/birdie/Brush Tiles/mask.BMP similarity index 100% rename from _release/samples/birdie/Brush Tiles/mask.BMP rename to #Test/samples/birdie/Brush Tiles/mask.BMP diff --git a/_release/samples/birdie/Brush Tiles/sky_BK.bmp b/#Test/samples/birdie/Brush Tiles/sky_BK.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/sky_BK.bmp rename to #Test/samples/birdie/Brush Tiles/sky_BK.bmp diff --git a/_release/samples/birdie/Brush Tiles/sky_FR.bmp b/#Test/samples/birdie/Brush Tiles/sky_FR.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/sky_FR.bmp rename to #Test/samples/birdie/Brush Tiles/sky_FR.bmp diff --git a/_release/samples/birdie/Brush Tiles/sky_LF.bmp b/#Test/samples/birdie/Brush Tiles/sky_LF.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/sky_LF.bmp rename to #Test/samples/birdie/Brush Tiles/sky_LF.bmp diff --git a/_release/samples/birdie/Brush Tiles/sky_RT.bmp b/#Test/samples/birdie/Brush Tiles/sky_RT.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/sky_RT.bmp rename to #Test/samples/birdie/Brush Tiles/sky_RT.bmp diff --git a/_release/samples/birdie/Brush Tiles/sky_UP.bmp b/#Test/samples/birdie/Brush Tiles/sky_UP.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/sky_UP.bmp rename to #Test/samples/birdie/Brush Tiles/sky_UP.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex0.bmp b/#Test/samples/birdie/Brush Tiles/tex0.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex0.bmp rename to #Test/samples/birdie/Brush Tiles/tex0.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex1.bmp b/#Test/samples/birdie/Brush Tiles/tex1.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex1.bmp rename to #Test/samples/birdie/Brush Tiles/tex1.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex2.bmp b/#Test/samples/birdie/Brush Tiles/tex2.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex2.bmp rename to #Test/samples/birdie/Brush Tiles/tex2.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex3.bmp b/#Test/samples/birdie/Brush Tiles/tex3.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex3.bmp rename to #Test/samples/birdie/Brush Tiles/tex3.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex4.bmp b/#Test/samples/birdie/Brush Tiles/tex4.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex4.bmp rename to #Test/samples/birdie/Brush Tiles/tex4.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex5.bmp b/#Test/samples/birdie/Brush Tiles/tex5.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex5.bmp rename to #Test/samples/birdie/Brush Tiles/tex5.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex6.bmp b/#Test/samples/birdie/Brush Tiles/tex6.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex6.bmp rename to #Test/samples/birdie/Brush Tiles/tex6.bmp diff --git a/_release/samples/birdie/Brush Tiles/tex7.bmp b/#Test/samples/birdie/Brush Tiles/tex7.bmp similarity index 100% rename from _release/samples/birdie/Brush Tiles/tex7.bmp rename to #Test/samples/birdie/Brush Tiles/tex7.bmp diff --git a/_release/samples/birdie/Brush Tiles/tt.bb b/#Test/samples/birdie/Brush Tiles/tt.bb similarity index 100% rename from _release/samples/birdie/Brush Tiles/tt.bb rename to #Test/samples/birdie/Brush Tiles/tt.bb diff --git a/_release/samples/birdie/CameraPickST/CameraPickST/main.bb b/#Test/samples/birdie/CameraPickST/CameraPickST/main.bb similarity index 100% rename from _release/samples/birdie/CameraPickST/CameraPickST/main.bb rename to #Test/samples/birdie/CameraPickST/CameraPickST/main.bb diff --git a/_release/samples/birdie/Explode/Explode.bb b/#Test/samples/birdie/Explode/Explode.bb similarity index 100% rename from _release/samples/birdie/Explode/Explode.bb rename to #Test/samples/birdie/Explode/Explode.bb diff --git a/_release/samples/birdie/Explode/tex0.bmp b/#Test/samples/birdie/Explode/tex0.bmp similarity index 100% rename from _release/samples/birdie/Explode/tex0.bmp rename to #Test/samples/birdie/Explode/tex0.bmp diff --git a/_release/samples/birdie/Fire Effect/Fire Effect/Main.bb b/#Test/samples/birdie/Fire Effect/Fire Effect/Main.bb similarity index 100% rename from _release/samples/birdie/Fire Effect/Fire Effect/Main.bb rename to #Test/samples/birdie/Fire Effect/Fire Effect/Main.bb diff --git a/_release/samples/birdie/Fire Effect/Fire Effect/particle.bmp b/#Test/samples/birdie/Fire Effect/Fire Effect/particle.bmp similarity index 100% rename from _release/samples/birdie/Fire Effect/Fire Effect/particle.bmp rename to #Test/samples/birdie/Fire Effect/Fire Effect/particle.bmp diff --git a/_release/samples/birdie/Fire Effect/Fire Effect/smk01.BMP b/#Test/samples/birdie/Fire Effect/Fire Effect/smk01.BMP similarity index 100% rename from _release/samples/birdie/Fire Effect/Fire Effect/smk01.BMP rename to #Test/samples/birdie/Fire Effect/Fire Effect/smk01.BMP diff --git a/_release/samples/birdie/Jet Tails/Main.bb b/#Test/samples/birdie/Jet Tails/Main.bb similarity index 100% rename from _release/samples/birdie/Jet Tails/Main.bb rename to #Test/samples/birdie/Jet Tails/Main.bb diff --git a/_release/samples/birdie/Jet Tails/jet.x b/#Test/samples/birdie/Jet Tails/jet.x similarity index 100% rename from _release/samples/birdie/Jet Tails/jet.x rename to #Test/samples/birdie/Jet Tails/jet.x diff --git a/_release/samples/birdie/LodMesh/SKELETON.3DS b/#Test/samples/birdie/LodMesh/SKELETON.3DS similarity index 100% rename from _release/samples/birdie/LodMesh/SKELETON.3DS rename to #Test/samples/birdie/LodMesh/SKELETON.3DS diff --git a/_release/samples/birdie/LodMesh/dolphin.bmp b/#Test/samples/birdie/LodMesh/dolphin.bmp similarity index 100% rename from _release/samples/birdie/LodMesh/dolphin.bmp rename to #Test/samples/birdie/LodMesh/dolphin.bmp diff --git a/_release/samples/birdie/LodMesh/dolphin.x b/#Test/samples/birdie/LodMesh/dolphin.x similarity index 100% rename from _release/samples/birdie/LodMesh/dolphin.x rename to #Test/samples/birdie/LodMesh/dolphin.x diff --git a/_release/samples/birdie/LodMesh/gnome.3DS b/#Test/samples/birdie/LodMesh/gnome.3DS similarity index 100% rename from _release/samples/birdie/LodMesh/gnome.3DS rename to #Test/samples/birdie/LodMesh/gnome.3DS diff --git a/_release/samples/birdie/LodMesh/lmesh.bb b/#Test/samples/birdie/LodMesh/lmesh.bb similarity index 100% rename from _release/samples/birdie/LodMesh/lmesh.bb rename to #Test/samples/birdie/LodMesh/lmesh.bb diff --git a/_release/samples/birdie/LodMesh/skull.3ds b/#Test/samples/birdie/LodMesh/skull.3ds similarity index 100% rename from _release/samples/birdie/LodMesh/skull.3ds rename to #Test/samples/birdie/LodMesh/skull.3ds diff --git a/_release/samples/birdie/Mirror/mirror.bb b/#Test/samples/birdie/Mirror/mirror.bb similarity index 100% rename from _release/samples/birdie/Mirror/mirror.bb rename to #Test/samples/birdie/Mirror/mirror.bb diff --git a/_release/samples/birdie/Mirror/tex0.bmp b/#Test/samples/birdie/Mirror/tex0.bmp similarity index 100% rename from _release/samples/birdie/Mirror/tex0.bmp rename to #Test/samples/birdie/Mirror/tex0.bmp diff --git a/_release/samples/birdie/Quick Deform/bl3d_big.jpg b/#Test/samples/birdie/Quick Deform/bl3d_big.jpg similarity index 100% rename from _release/samples/birdie/Quick Deform/bl3d_big.jpg rename to #Test/samples/birdie/Quick Deform/bl3d_big.jpg diff --git a/_release/samples/birdie/Quick Deform/qd.bb b/#Test/samples/birdie/Quick Deform/qd.bb similarity index 100% rename from _release/samples/birdie/Quick Deform/qd.bb rename to #Test/samples/birdie/Quick Deform/qd.bb diff --git a/_release/samples/birdie/Spherical Landscapes/functions.bb b/#Test/samples/birdie/Spherical Landscapes/functions.bb similarity index 100% rename from _release/samples/birdie/Spherical Landscapes/functions.bb rename to #Test/samples/birdie/Spherical Landscapes/functions.bb diff --git a/_release/samples/birdie/Spherical Landscapes/geosphere.3DS b/#Test/samples/birdie/Spherical Landscapes/geosphere.3DS similarity index 100% rename from _release/samples/birdie/Spherical Landscapes/geosphere.3DS rename to #Test/samples/birdie/Spherical Landscapes/geosphere.3DS diff --git a/_release/samples/birdie/Spherical Landscapes/testbed.bb b/#Test/samples/birdie/Spherical Landscapes/testbed.bb similarity index 100% rename from _release/samples/birdie/Spherical Landscapes/testbed.bb rename to #Test/samples/birdie/Spherical Landscapes/testbed.bb diff --git a/_release/samples/birdie/Spherical Landscapes/tex0.bmp b/#Test/samples/birdie/Spherical Landscapes/tex0.bmp similarity index 100% rename from _release/samples/birdie/Spherical Landscapes/tex0.bmp rename to #Test/samples/birdie/Spherical Landscapes/tex0.bmp diff --git a/_release/samples/birdie/Terrain Tiling/16tex.bmp b/#Test/samples/birdie/Terrain Tiling/16tex.bmp similarity index 100% rename from _release/samples/birdie/Terrain Tiling/16tex.bmp rename to #Test/samples/birdie/Terrain Tiling/16tex.bmp diff --git a/_release/samples/birdie/Terrain Tiling/PREVIEW.PIX b/#Test/samples/birdie/Terrain Tiling/PREVIEW.PIX similarity index 100% rename from _release/samples/birdie/Terrain Tiling/PREVIEW.PIX rename to #Test/samples/birdie/Terrain Tiling/PREVIEW.PIX diff --git a/_release/samples/birdie/Terrain Tiling/hmap.BMP b/#Test/samples/birdie/Terrain Tiling/hmap.BMP similarity index 100% rename from _release/samples/birdie/Terrain Tiling/hmap.BMP rename to #Test/samples/birdie/Terrain Tiling/hmap.BMP diff --git a/_release/samples/birdie/Terrain Tiling/mask.BMP b/#Test/samples/birdie/Terrain Tiling/mask.BMP similarity index 100% rename from _release/samples/birdie/Terrain Tiling/mask.BMP rename to #Test/samples/birdie/Terrain Tiling/mask.BMP diff --git a/_release/samples/birdie/Terrain Tiling/tex0.bmp b/#Test/samples/birdie/Terrain Tiling/tex0.bmp similarity index 100% rename from _release/samples/birdie/Terrain Tiling/tex0.bmp rename to #Test/samples/birdie/Terrain Tiling/tex0.bmp diff --git a/_release/samples/birdie/Terrain Tiling/tt.bb b/#Test/samples/birdie/Terrain Tiling/tt.bb similarity index 100% rename from _release/samples/birdie/Terrain Tiling/tt.bb rename to #Test/samples/birdie/Terrain Tiling/tt.bb diff --git a/_release/samples/birdie/UVMapping/UVMapping/test.bb b/#Test/samples/birdie/UVMapping/UVMapping/test.bb similarity index 100% rename from _release/samples/birdie/UVMapping/UVMapping/test.bb rename to #Test/samples/birdie/UVMapping/UVMapping/test.bb diff --git a/_release/samples/birdie/UVMapping/UVMapping/tex0.jpg b/#Test/samples/birdie/UVMapping/UVMapping/tex0.jpg similarity index 100% rename from _release/samples/birdie/UVMapping/UVMapping/tex0.jpg rename to #Test/samples/birdie/UVMapping/UVMapping/tex0.jpg diff --git a/_release/samples/birdie/dolphin/ddown.x b/#Test/samples/birdie/dolphin/ddown.x similarity index 100% rename from _release/samples/birdie/dolphin/ddown.x rename to #Test/samples/birdie/dolphin/ddown.x diff --git a/_release/samples/birdie/dolphin/dolphin.bb b/#Test/samples/birdie/dolphin/dolphin.bb similarity index 100% rename from _release/samples/birdie/dolphin/dolphin.bb rename to #Test/samples/birdie/dolphin/dolphin.bb diff --git a/_release/samples/birdie/dolphin/dolphin.bmp b/#Test/samples/birdie/dolphin/dolphin.bmp similarity index 100% rename from _release/samples/birdie/dolphin/dolphin.bmp rename to #Test/samples/birdie/dolphin/dolphin.bmp diff --git a/_release/samples/birdie/dolphin/dolphin.x b/#Test/samples/birdie/dolphin/dolphin.x similarity index 100% rename from _release/samples/birdie/dolphin/dolphin.x rename to #Test/samples/birdie/dolphin/dolphin.x diff --git a/_release/samples/birdie/dolphin/dup.x b/#Test/samples/birdie/dolphin/dup.x similarity index 100% rename from _release/samples/birdie/dolphin/dup.x rename to #Test/samples/birdie/dolphin/dup.x diff --git a/_release/samples/birdie/dolphin/seafloor.bmp b/#Test/samples/birdie/dolphin/seafloor.bmp similarity index 100% rename from _release/samples/birdie/dolphin/seafloor.bmp rename to #Test/samples/birdie/dolphin/seafloor.bmp diff --git a/_release/samples/birdie/dolphin/seafloor.x b/#Test/samples/birdie/dolphin/seafloor.x similarity index 100% rename from _release/samples/birdie/dolphin/seafloor.x rename to #Test/samples/birdie/dolphin/seafloor.x diff --git a/_release/samples/birdie/dominos/FloorTile.bmp b/#Test/samples/birdie/dominos/FloorTile.bmp similarity index 100% rename from _release/samples/birdie/dominos/FloorTile.bmp rename to #Test/samples/birdie/dominos/FloorTile.bmp diff --git a/_release/samples/birdie/dominos/dominos.bb b/#Test/samples/birdie/dominos/dominos.bb similarity index 100% rename from _release/samples/birdie/dominos/dominos.bb rename to #Test/samples/birdie/dominos/dominos.bb diff --git a/_release/samples/birdie/dominos/tex0.bmp b/#Test/samples/birdie/dominos/tex0.bmp similarity index 100% rename from _release/samples/birdie/dominos/tex0.bmp rename to #Test/samples/birdie/dominos/tex0.bmp diff --git a/_release/samples/birdie/lodBalls/geo1.3DS b/#Test/samples/birdie/lodBalls/geo1.3DS similarity index 100% rename from _release/samples/birdie/lodBalls/geo1.3DS rename to #Test/samples/birdie/lodBalls/geo1.3DS diff --git a/_release/samples/birdie/lodBalls/subdiv.bb b/#Test/samples/birdie/lodBalls/subdiv.bb similarity index 100% rename from _release/samples/birdie/lodBalls/subdiv.bb rename to #Test/samples/birdie/lodBalls/subdiv.bb diff --git a/_release/samples/birdie/lodBalls/tex0.bmp b/#Test/samples/birdie/lodBalls/tex0.bmp similarity index 100% rename from _release/samples/birdie/lodBalls/tex0.bmp rename to #Test/samples/birdie/lodBalls/tex0.bmp diff --git a/_release/samples/birdie/te/TE.bb b/#Test/samples/birdie/te/TE.bb similarity index 100% rename from _release/samples/birdie/te/TE.bb rename to #Test/samples/birdie/te/TE.bb diff --git a/_release/samples/birdie/te/forest.BMP b/#Test/samples/birdie/te/forest.BMP similarity index 100% rename from _release/samples/birdie/te/forest.BMP rename to #Test/samples/birdie/te/forest.BMP diff --git a/_release/samples/birdie/te/hmap.bmp b/#Test/samples/birdie/te/hmap.bmp similarity index 100% rename from _release/samples/birdie/te/hmap.bmp rename to #Test/samples/birdie/te/hmap.bmp diff --git a/_release/samples/birdie/te/hmap2.bmp b/#Test/samples/birdie/te/hmap2.bmp similarity index 100% rename from _release/samples/birdie/te/hmap2.bmp rename to #Test/samples/birdie/te/hmap2.bmp diff --git a/_release/samples/birdie/te/rock.bmp b/#Test/samples/birdie/te/rock.bmp similarity index 100% rename from _release/samples/birdie/te/rock.bmp rename to #Test/samples/birdie/te/rock.bmp diff --git a/_release/samples/birdie/te/tex0.bmp b/#Test/samples/birdie/te/tex0.bmp similarity index 100% rename from _release/samples/birdie/te/tex0.bmp rename to #Test/samples/birdie/te/tex0.bmp diff --git a/_release/samples/birdie/te/tex1.bmp b/#Test/samples/birdie/te/tex1.bmp similarity index 100% rename from _release/samples/birdie/te/tex1.bmp rename to #Test/samples/birdie/te/tex1.bmp diff --git a/_release/samples/birdie/texpaint/main.bb b/#Test/samples/birdie/texpaint/main.bb similarity index 100% rename from _release/samples/birdie/texpaint/main.bb rename to #Test/samples/birdie/texpaint/main.bb diff --git a/_release/samples/birdie/texpaint/tex0.bmp b/#Test/samples/birdie/texpaint/tex0.bmp similarity index 100% rename from _release/samples/birdie/texpaint/tex0.bmp rename to #Test/samples/birdie/texpaint/tex0.bmp diff --git a/_release/samples/birdie/thunder/PREVIEW.PIX b/#Test/samples/birdie/thunder/PREVIEW.PIX similarity index 100% rename from _release/samples/birdie/thunder/PREVIEW.PIX rename to #Test/samples/birdie/thunder/PREVIEW.PIX diff --git a/_release/samples/birdie/thunder/WIND.wav b/#Test/samples/birdie/thunder/WIND.wav similarity index 100% rename from _release/samples/birdie/thunder/WIND.wav rename to #Test/samples/birdie/thunder/WIND.wav diff --git a/_release/samples/birdie/thunder/forest.BMP b/#Test/samples/birdie/thunder/forest.BMP similarity index 100% rename from _release/samples/birdie/thunder/forest.BMP rename to #Test/samples/birdie/thunder/forest.BMP diff --git a/_release/samples/birdie/thunder/hmap.bmp b/#Test/samples/birdie/thunder/hmap.bmp similarity index 100% rename from _release/samples/birdie/thunder/hmap.bmp rename to #Test/samples/birdie/thunder/hmap.bmp diff --git a/_release/samples/birdie/thunder/lightning.bb b/#Test/samples/birdie/thunder/lightning.bb similarity index 100% rename from _release/samples/birdie/thunder/lightning.bb rename to #Test/samples/birdie/thunder/lightning.bb diff --git a/_release/samples/birdie/thunder/tex0.bmp b/#Test/samples/birdie/thunder/tex0.bmp similarity index 100% rename from _release/samples/birdie/thunder/tex0.bmp rename to #Test/samples/birdie/thunder/tex0.bmp diff --git a/_release/samples/birdie/thunder/tex1.bmp b/#Test/samples/birdie/thunder/tex1.bmp similarity index 100% rename from _release/samples/birdie/thunder/tex1.bmp rename to #Test/samples/birdie/thunder/tex1.bmp diff --git a/_release/samples/birdie/thunder/thunder.bb b/#Test/samples/birdie/thunder/thunder.bb similarity index 100% rename from _release/samples/birdie/thunder/thunder.bb rename to #Test/samples/birdie/thunder/thunder.bb diff --git a/_release/samples/birdie/thunder/thunder.wav b/#Test/samples/birdie/thunder/thunder.wav similarity index 100% rename from _release/samples/birdie/thunder/thunder.wav rename to #Test/samples/birdie/thunder/thunder.wav diff --git a/_release/samples/halo/Lightmap/blocks.bmp b/#Test/samples/halo/Lightmap/blocks.bmp similarity index 100% rename from _release/samples/halo/Lightmap/blocks.bmp rename to #Test/samples/halo/Lightmap/blocks.bmp diff --git a/_release/samples/halo/Lightmap/flagstn.bmp b/#Test/samples/halo/Lightmap/flagstn.bmp similarity index 100% rename from _release/samples/halo/Lightmap/flagstn.bmp rename to #Test/samples/halo/Lightmap/flagstn.bmp diff --git a/_release/samples/halo/Lightmap/level.x b/#Test/samples/halo/Lightmap/level.x similarity index 100% rename from _release/samples/halo/Lightmap/level.x rename to #Test/samples/halo/Lightmap/level.x diff --git a/_release/samples/halo/Lightmap/lightmap.bb b/#Test/samples/halo/Lightmap/lightmap.bb similarity index 100% rename from _release/samples/halo/Lightmap/lightmap.bb rename to #Test/samples/halo/Lightmap/lightmap.bb diff --git a/_release/samples/halo/Lightmap/lightmap.bmp b/#Test/samples/halo/Lightmap/lightmap.bmp similarity index 100% rename from _release/samples/halo/Lightmap/lightmap.bmp rename to #Test/samples/halo/Lightmap/lightmap.bmp diff --git a/_release/samples/halo/Lightmap/lightmap.x b/#Test/samples/halo/Lightmap/lightmap.x similarity index 100% rename from _release/samples/halo/Lightmap/lightmap.x rename to #Test/samples/halo/Lightmap/lightmap.x diff --git a/_release/samples/halo/Lightmap/log.txt b/#Test/samples/halo/Lightmap/log.txt similarity index 100% rename from _release/samples/halo/Lightmap/log.txt rename to #Test/samples/halo/Lightmap/log.txt diff --git a/_release/samples/halo/Lightmap/readme.txt b/#Test/samples/halo/Lightmap/readme.txt similarity index 100% rename from _release/samples/halo/Lightmap/readme.txt rename to #Test/samples/halo/Lightmap/readme.txt diff --git a/_release/samples/halo/MeshFX/meshfx.bb b/#Test/samples/halo/MeshFX/meshfx.bb similarity index 100% rename from _release/samples/halo/MeshFX/meshfx.bb rename to #Test/samples/halo/MeshFX/meshfx.bb diff --git a/_release/samples/halo/MeshFX/readme.txt b/#Test/samples/halo/MeshFX/readme.txt similarity index 100% rename from _release/samples/halo/MeshFX/readme.txt rename to #Test/samples/halo/MeshFX/readme.txt diff --git a/_release/samples/halo/MeshFX/skin.bmp b/#Test/samples/halo/MeshFX/skin.bmp similarity index 100% rename from _release/samples/halo/MeshFX/skin.bmp rename to #Test/samples/halo/MeshFX/skin.bmp diff --git a/_release/samples/halo/MeshFX/test.3DS b/#Test/samples/halo/MeshFX/test.3DS similarity index 100% rename from _release/samples/halo/MeshFX/test.3DS rename to #Test/samples/halo/MeshFX/test.3DS diff --git a/_release/samples/halo/Shadows/blitzlogo.bmp b/#Test/samples/halo/Shadows/blitzlogo.bmp similarity index 100% rename from _release/samples/halo/Shadows/blitzlogo.bmp rename to #Test/samples/halo/Shadows/blitzlogo.bmp diff --git a/_release/samples/halo/Shadows/flare0.bmp b/#Test/samples/halo/Shadows/flare0.bmp similarity index 100% rename from _release/samples/halo/Shadows/flare0.bmp rename to #Test/samples/halo/Shadows/flare0.bmp diff --git a/_release/samples/halo/Shadows/readme.txt b/#Test/samples/halo/Shadows/readme.txt similarity index 100% rename from _release/samples/halo/Shadows/readme.txt rename to #Test/samples/halo/Shadows/readme.txt diff --git a/_release/samples/halo/Shadows/shadows.bb b/#Test/samples/halo/Shadows/shadows.bb similarity index 100% rename from _release/samples/halo/Shadows/shadows.bb rename to #Test/samples/halo/Shadows/shadows.bb diff --git a/_release/samples/halo/Shadows/wall.bmp b/#Test/samples/halo/Shadows/wall.bmp similarity index 100% rename from _release/samples/halo/Shadows/wall.bmp rename to #Test/samples/halo/Shadows/wall.bmp diff --git a/_release/samples/halo/start.bb b/#Test/samples/halo/start.bb similarity index 100% rename from _release/samples/halo/start.bb rename to #Test/samples/halo/start.bb diff --git a/_release/samples/mak/anim/anim.bb b/#Test/samples/mak/anim/anim.bb similarity index 100% rename from _release/samples/mak/anim/anim.bb rename to #Test/samples/mak/anim/anim.bb diff --git a/_release/samples/mak/anim/makbot/MAK-sfx.bb b/#Test/samples/mak/anim/makbot/MAK-sfx.bb similarity index 100% rename from _release/samples/mak/anim/makbot/MAK-sfx.bb rename to #Test/samples/mak/anim/makbot/MAK-sfx.bb diff --git a/_release/samples/mak/anim/makbot/Panels.jpg b/#Test/samples/mak/anim/makbot/Panels.jpg similarity index 100% rename from _release/samples/mak/anim/makbot/Panels.jpg rename to #Test/samples/mak/anim/makbot/Panels.jpg diff --git a/_release/samples/mak/anim/makbot/README.txt b/#Test/samples/mak/anim/makbot/README.txt similarity index 100% rename from _release/samples/mak/anim/makbot/README.txt rename to #Test/samples/mak/anim/makbot/README.txt diff --git a/_release/samples/mak/anim/makbot/blshine.jpg b/#Test/samples/mak/anim/makbot/blshine.jpg similarity index 100% rename from _release/samples/mak/anim/makbot/blshine.jpg rename to #Test/samples/mak/anim/makbot/blshine.jpg diff --git a/_release/samples/mak/anim/makbot/dkshine.jpg b/#Test/samples/mak/anim/makbot/dkshine.jpg similarity index 100% rename from _release/samples/mak/anim/makbot/dkshine.jpg rename to #Test/samples/mak/anim/makbot/dkshine.jpg diff --git a/_release/samples/mak/anim/makbot/flare.bmp b/#Test/samples/mak/anim/makbot/flare.bmp similarity index 100% rename from _release/samples/mak/anim/makbot/flare.bmp rename to #Test/samples/mak/anim/makbot/flare.bmp diff --git a/_release/samples/mak/anim/makbot/mak_robotic.3DS b/#Test/samples/mak/anim/makbot/mak_robotic.3DS similarity index 100% rename from _release/samples/mak/anim/makbot/mak_robotic.3DS rename to #Test/samples/mak/anim/makbot/mak_robotic.3DS diff --git a/_release/samples/mak/anim/makbot/mak_robotic.x b/#Test/samples/mak/anim/makbot/mak_robotic.x similarity index 100% rename from _release/samples/mak/anim/makbot/mak_robotic.x rename to #Test/samples/mak/anim/makbot/mak_robotic.x diff --git a/_release/samples/mak/anim/makbot/mak_running.3DS b/#Test/samples/mak/anim/makbot/mak_running.3DS similarity index 100% rename from _release/samples/mak/anim/makbot/mak_running.3DS rename to #Test/samples/mak/anim/makbot/mak_running.3DS diff --git a/_release/samples/mak/anim/makbot/mak_running.x b/#Test/samples/mak/anim/makbot/mak_running.x similarity index 100% rename from _release/samples/mak/anim/makbot/mak_running.x rename to #Test/samples/mak/anim/makbot/mak_running.x diff --git a/_release/samples/mak/b3dlogo.jpg b/#Test/samples/mak/b3dlogo.jpg similarity index 100% rename from _release/samples/mak/b3dlogo.jpg rename to #Test/samples/mak/b3dlogo.jpg diff --git a/_release/samples/mak/castle/castle.bb b/#Test/samples/mak/castle/castle.bb similarity index 100% rename from _release/samples/mak/castle/castle.bb rename to #Test/samples/mak/castle/castle.bb diff --git a/_release/samples/mak/castle/castle/CASTLE1.X b/#Test/samples/mak/castle/castle/CASTLE1.X similarity index 100% rename from _release/samples/mak/castle/castle/CASTLE1.X rename to #Test/samples/mak/castle/castle/CASTLE1.X diff --git a/_release/samples/mak/castle/castle/castlest.jpg b/#Test/samples/mak/castle/castle/castlest.jpg similarity index 100% rename from _release/samples/mak/castle/castle/castlest.jpg rename to #Test/samples/mak/castle/castle/castlest.jpg diff --git a/_release/samples/mak/castle/castle/gothic3.jpg b/#Test/samples/mak/castle/castle/gothic3.jpg similarity index 100% rename from _release/samples/mak/castle/castle/gothic3.jpg rename to #Test/samples/mak/castle/castle/gothic3.jpg diff --git a/_release/samples/mak/castle/castle/oldbric.jpg b/#Test/samples/mak/castle/castle/oldbric.jpg similarity index 100% rename from _release/samples/mak/castle/castle/oldbric.jpg rename to #Test/samples/mak/castle/castle/oldbric.jpg diff --git a/_release/samples/mak/castle/castle/shingle.jpg b/#Test/samples/mak/castle/castle/shingle.jpg similarity index 100% rename from _release/samples/mak/castle/castle/shingle.jpg rename to #Test/samples/mak/castle/castle/shingle.jpg diff --git a/_release/samples/mak/castle/castle/stone2.jpg b/#Test/samples/mak/castle/castle/stone2.jpg similarity index 100% rename from _release/samples/mak/castle/castle/stone2.jpg rename to #Test/samples/mak/castle/castle/stone2.jpg diff --git a/_release/samples/mak/castle/environ/Water-2_mip.BMP b/#Test/samples/mak/castle/environ/Water-2_mip.BMP similarity index 100% rename from _release/samples/mak/castle/environ/Water-2_mip.BMP rename to #Test/samples/mak/castle/environ/Water-2_mip.BMP diff --git a/_release/samples/mak/castle/environ/heightmap_256.BMP b/#Test/samples/mak/castle/environ/heightmap_256.BMP similarity index 100% rename from _release/samples/mak/castle/environ/heightmap_256.BMP rename to #Test/samples/mak/castle/environ/heightmap_256.BMP diff --git a/_release/samples/mak/castle/environ/sky_BK.jpg b/#Test/samples/mak/castle/environ/sky_BK.jpg similarity index 100% rename from _release/samples/mak/castle/environ/sky_BK.jpg rename to #Test/samples/mak/castle/environ/sky_BK.jpg diff --git a/_release/samples/mak/castle/environ/sky_DN.jpg b/#Test/samples/mak/castle/environ/sky_DN.jpg similarity index 100% rename from _release/samples/mak/castle/environ/sky_DN.jpg rename to #Test/samples/mak/castle/environ/sky_DN.jpg diff --git a/_release/samples/mak/castle/environ/sky_FR.jpg b/#Test/samples/mak/castle/environ/sky_FR.jpg similarity index 100% rename from _release/samples/mak/castle/environ/sky_FR.jpg rename to #Test/samples/mak/castle/environ/sky_FR.jpg diff --git a/_release/samples/mak/castle/environ/sky_LF.jpg b/#Test/samples/mak/castle/environ/sky_LF.jpg similarity index 100% rename from _release/samples/mak/castle/environ/sky_LF.jpg rename to #Test/samples/mak/castle/environ/sky_LF.jpg diff --git a/_release/samples/mak/castle/environ/sky_RT.jpg b/#Test/samples/mak/castle/environ/sky_RT.jpg similarity index 100% rename from _release/samples/mak/castle/environ/sky_RT.jpg rename to #Test/samples/mak/castle/environ/sky_RT.jpg diff --git a/_release/samples/mak/castle/environ/sky_UP.jpg b/#Test/samples/mak/castle/environ/sky_UP.jpg similarity index 100% rename from _release/samples/mak/castle/environ/sky_UP.jpg rename to #Test/samples/mak/castle/environ/sky_UP.jpg diff --git a/_release/samples/mak/castle/environ/terrain-1.jpg b/#Test/samples/mak/castle/environ/terrain-1.jpg similarity index 100% rename from _release/samples/mak/castle/environ/terrain-1.jpg rename to #Test/samples/mak/castle/environ/terrain-1.jpg diff --git a/_release/samples/mak/castle/markio/blue.bmp b/#Test/samples/mak/castle/markio/blue.bmp similarity index 100% rename from _release/samples/mak/castle/markio/blue.bmp rename to #Test/samples/mak/castle/markio/blue.bmp diff --git a/_release/samples/mak/castle/markio/brown.bmp b/#Test/samples/mak/castle/markio/brown.bmp similarity index 100% rename from _release/samples/mak/castle/markio/brown.bmp rename to #Test/samples/mak/castle/markio/brown.bmp diff --git a/_release/samples/mak/castle/markio/face.bmp b/#Test/samples/mak/castle/markio/face.bmp similarity index 100% rename from _release/samples/mak/castle/markio/face.bmp rename to #Test/samples/mak/castle/markio/face.bmp diff --git a/_release/samples/mak/castle/markio/hatM.bmp b/#Test/samples/mak/castle/markio/hatM.bmp similarity index 100% rename from _release/samples/mak/castle/markio/hatM.bmp rename to #Test/samples/mak/castle/markio/hatM.bmp diff --git a/_release/samples/mak/castle/markio/mariorun.x b/#Test/samples/mak/castle/markio/mariorun.x similarity index 100% rename from _release/samples/mak/castle/markio/mariorun.x rename to #Test/samples/mak/castle/markio/mariorun.x diff --git a/_release/samples/mak/castle/markio/red.bmp b/#Test/samples/mak/castle/markio/red.bmp similarity index 100% rename from _release/samples/mak/castle/markio/red.bmp rename to #Test/samples/mak/castle/markio/red.bmp diff --git a/_release/samples/mak/castle/sounds/boom.wav b/#Test/samples/mak/castle/sounds/boom.wav similarity index 100% rename from _release/samples/mak/castle/sounds/boom.wav rename to #Test/samples/mak/castle/sounds/boom.wav diff --git a/_release/samples/mak/castle/sounds/shoot.wav b/#Test/samples/mak/castle/sounds/shoot.wav similarity index 100% rename from _release/samples/mak/castle/sounds/shoot.wav rename to #Test/samples/mak/castle/sounds/shoot.wav diff --git a/_release/samples/mak/castle/sprites/Bigspark.BMP b/#Test/samples/mak/castle/sprites/Bigspark.BMP similarity index 100% rename from _release/samples/mak/castle/sprites/Bigspark.BMP rename to #Test/samples/mak/castle/sprites/Bigspark.BMP diff --git a/_release/samples/mak/castle/sprites/bluspark.BMP b/#Test/samples/mak/castle/sprites/bluspark.BMP similarity index 100% rename from _release/samples/mak/castle/sprites/bluspark.BMP rename to #Test/samples/mak/castle/sprites/bluspark.BMP diff --git a/_release/samples/mak/castle/sprites/bullet_hole.BMP b/#Test/samples/mak/castle/sprites/bullet_hole.BMP similarity index 100% rename from _release/samples/mak/castle/sprites/bullet_hole.BMP rename to #Test/samples/mak/castle/sprites/bullet_hole.BMP diff --git a/_release/samples/mak/castle/sprites/tree.BMP b/#Test/samples/mak/castle/sprites/tree.BMP similarity index 100% rename from _release/samples/mak/castle/sprites/tree.BMP rename to #Test/samples/mak/castle/sprites/tree.BMP diff --git a/_release/samples/mak/collide/collide.bb b/#Test/samples/mak/collide/collide.bb similarity index 100% rename from _release/samples/mak/collide/collide.bb rename to #Test/samples/mak/collide/collide.bb diff --git a/_release/samples/mak/createanim/createanim.bb b/#Test/samples/mak/createanim/createanim.bb similarity index 100% rename from _release/samples/mak/createanim/createanim.bb rename to #Test/samples/mak/createanim/createanim.bb diff --git a/_release/samples/mak/detailtex/detail2.JPG b/#Test/samples/mak/detailtex/detail2.JPG similarity index 100% rename from _release/samples/mak/detailtex/detail2.JPG rename to #Test/samples/mak/detailtex/detail2.JPG diff --git a/_release/samples/mak/detailtex/detailtex.bb b/#Test/samples/mak/detailtex/detailtex.bb similarity index 100% rename from _release/samples/mak/detailtex/detailtex.bb rename to #Test/samples/mak/detailtex/detailtex.bb diff --git a/_release/samples/mak/detailtex/texture.JPG b/#Test/samples/mak/detailtex/texture.JPG similarity index 100% rename from _release/samples/mak/detailtex/texture.JPG rename to #Test/samples/mak/detailtex/texture.JPG diff --git a/_release/samples/mak/dragon/Chorme-2.BMP b/#Test/samples/mak/dragon/Chorme-2.BMP similarity index 100% rename from _release/samples/mak/dragon/Chorme-2.BMP rename to #Test/samples/mak/dragon/Chorme-2.BMP diff --git a/_release/samples/mak/dragon/dragon.bb b/#Test/samples/mak/dragon/dragon.bb similarity index 100% rename from _release/samples/mak/dragon/dragon.bb rename to #Test/samples/mak/dragon/dragon.bb diff --git a/_release/samples/mak/dragon/model/dragon.bmp b/#Test/samples/mak/dragon/model/dragon.bmp similarity index 100% rename from _release/samples/mak/dragon/model/dragon.bmp rename to #Test/samples/mak/dragon/model/dragon.bmp diff --git a/_release/samples/mak/dragon/model/dragon.md2 b/#Test/samples/mak/dragon/model/dragon.md2 similarity index 100% rename from _release/samples/mak/dragon/model/dragon.md2 rename to #Test/samples/mak/dragon/model/dragon.md2 diff --git a/_release/samples/mak/driver/car.x b/#Test/samples/mak/driver/car.x similarity index 100% rename from _release/samples/mak/driver/car.x rename to #Test/samples/mak/driver/car.x diff --git a/_release/samples/mak/driver/driver.bb b/#Test/samples/mak/driver/driver.bb similarity index 100% rename from _release/samples/mak/driver/driver.bb rename to #Test/samples/mak/driver/driver.bb diff --git a/_release/samples/mak/driver/heightmap_256.BMP b/#Test/samples/mak/driver/heightmap_256.BMP similarity index 100% rename from _release/samples/mak/driver/heightmap_256.BMP rename to #Test/samples/mak/driver/heightmap_256.BMP diff --git a/_release/samples/mak/driver/terrain-1.jpg b/#Test/samples/mak/driver/terrain-1.jpg similarity index 100% rename from _release/samples/mak/driver/terrain-1.jpg rename to #Test/samples/mak/driver/terrain-1.jpg diff --git a/_release/samples/mak/fakelight/brick.bmp b/#Test/samples/mak/fakelight/brick.bmp similarity index 100% rename from _release/samples/mak/fakelight/brick.bmp rename to #Test/samples/mak/fakelight/brick.bmp diff --git a/_release/samples/mak/fakelight/fakelight.bb b/#Test/samples/mak/fakelight/fakelight.bb similarity index 100% rename from _release/samples/mak/fakelight/fakelight.bb rename to #Test/samples/mak/fakelight/fakelight.bb diff --git a/_release/samples/mak/firepaint3d/blitzlogo.bmp b/#Test/samples/mak/firepaint3d/blitzlogo.bmp similarity index 100% rename from _release/samples/mak/firepaint3d/blitzlogo.bmp rename to #Test/samples/mak/firepaint3d/blitzlogo.bmp diff --git a/_release/samples/mak/firepaint3d/bluspark.bmp b/#Test/samples/mak/firepaint3d/bluspark.bmp similarity index 100% rename from _release/samples/mak/firepaint3d/bluspark.bmp rename to #Test/samples/mak/firepaint3d/bluspark.bmp diff --git a/_release/samples/mak/firepaint3d/firepaint3d.bb b/#Test/samples/mak/firepaint3d/firepaint3d.bb similarity index 100% rename from _release/samples/mak/firepaint3d/firepaint3d.bb rename to #Test/samples/mak/firepaint3d/firepaint3d.bb diff --git a/_release/samples/mak/firepaint3d/stars.bmp b/#Test/samples/mak/firepaint3d/stars.bmp similarity index 100% rename from _release/samples/mak/firepaint3d/stars.bmp rename to #Test/samples/mak/firepaint3d/stars.bmp diff --git a/_release/samples/mak/flag/b3dlogo.jpg b/#Test/samples/mak/flag/b3dlogo.jpg similarity index 100% rename from _release/samples/mak/flag/b3dlogo.jpg rename to #Test/samples/mak/flag/b3dlogo.jpg diff --git a/_release/samples/mak/flag/flag.bb b/#Test/samples/mak/flag/flag.bb similarity index 100% rename from _release/samples/mak/flag/flag.bb rename to #Test/samples/mak/flag/flag.bb diff --git a/_release/samples/mak/insaner/CrackedStone.BMP b/#Test/samples/mak/insaner/CrackedStone.BMP similarity index 100% rename from _release/samples/mak/insaner/CrackedStone.BMP rename to #Test/samples/mak/insaner/CrackedStone.BMP diff --git a/_release/samples/mak/insaner/CrackedStone_diff.BMP b/#Test/samples/mak/insaner/CrackedStone_diff.BMP similarity index 100% rename from _release/samples/mak/insaner/CrackedStone_diff.BMP rename to #Test/samples/mak/insaner/CrackedStone_diff.BMP diff --git a/_release/samples/mak/insaner/MossyGround.BMP b/#Test/samples/mak/insaner/MossyGround.BMP similarity index 100% rename from _release/samples/mak/insaner/MossyGround.BMP rename to #Test/samples/mak/insaner/MossyGround.BMP diff --git a/_release/samples/mak/insaner/hmap.BMP b/#Test/samples/mak/insaner/hmap.BMP similarity index 100% rename from _release/samples/mak/insaner/hmap.BMP rename to #Test/samples/mak/insaner/hmap.BMP diff --git a/_release/samples/mak/insaner/hmap_1024.BMP b/#Test/samples/mak/insaner/hmap_1024.BMP similarity index 100% rename from _release/samples/mak/insaner/hmap_1024.BMP rename to #Test/samples/mak/insaner/hmap_1024.BMP diff --git a/_release/samples/mak/insaner/insaner.bb b/#Test/samples/mak/insaner/insaner.bb similarity index 100% rename from _release/samples/mak/insaner/insaner.bb rename to #Test/samples/mak/insaner/insaner.bb diff --git a/_release/samples/mak/insaner/lmap.BMP b/#Test/samples/mak/insaner/lmap.BMP similarity index 100% rename from _release/samples/mak/insaner/lmap.BMP rename to #Test/samples/mak/insaner/lmap.BMP diff --git a/_release/samples/mak/insaner/lmap_1024.BMP b/#Test/samples/mak/insaner/lmap_1024.BMP similarity index 100% rename from _release/samples/mak/insaner/lmap_1024.BMP rename to #Test/samples/mak/insaner/lmap_1024.BMP diff --git a/_release/samples/mak/insaner/track.BMP b/#Test/samples/mak/insaner/track.BMP similarity index 100% rename from _release/samples/mak/insaner/track.BMP rename to #Test/samples/mak/insaner/track.BMP diff --git a/_release/samples/mak/insectoids/graphics/alien.bmp b/#Test/samples/mak/insectoids/graphics/alien.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/alien.bmp rename to #Test/samples/mak/insectoids/graphics/alien.bmp diff --git a/_release/samples/mak/insectoids/graphics/ball.bmp b/#Test/samples/mak/insectoids/graphics/ball.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/ball.bmp rename to #Test/samples/mak/insectoids/graphics/ball.bmp diff --git a/_release/samples/mak/insectoids/graphics/bang.bmp b/#Test/samples/mak/insectoids/graphics/bang.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/bang.bmp rename to #Test/samples/mak/insectoids/graphics/bang.bmp diff --git a/_release/samples/mak/insectoids/graphics/bat.bmp b/#Test/samples/mak/insectoids/graphics/bat.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/bat.bmp rename to #Test/samples/mak/insectoids/graphics/bat.bmp diff --git a/_release/samples/mak/insectoids/graphics/bbomb.bmp b/#Test/samples/mak/insectoids/graphics/bbomb.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/bbomb.bmp rename to #Test/samples/mak/insectoids/graphics/bbomb.bmp diff --git a/_release/samples/mak/insectoids/graphics/bomb.bmp b/#Test/samples/mak/insectoids/graphics/bomb.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/bomb.bmp rename to #Test/samples/mak/insectoids/graphics/bomb.bmp diff --git a/_release/samples/mak/insectoids/graphics/bullet.bmp b/#Test/samples/mak/insectoids/graphics/bullet.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/bullet.bmp rename to #Test/samples/mak/insectoids/graphics/bullet.bmp diff --git a/_release/samples/mak/insectoids/graphics/bullet_mask.bmp b/#Test/samples/mak/insectoids/graphics/bullet_mask.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/bullet_mask.bmp rename to #Test/samples/mak/insectoids/graphics/bullet_mask.bmp diff --git a/_release/samples/mak/insectoids/graphics/dir.bmp b/#Test/samples/mak/insectoids/graphics/dir.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/dir.bmp rename to #Test/samples/mak/insectoids/graphics/dir.bmp diff --git a/_release/samples/mak/insectoids/graphics/disc.bmp b/#Test/samples/mak/insectoids/graphics/disc.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/disc.bmp rename to #Test/samples/mak/insectoids/graphics/disc.bmp diff --git a/_release/samples/mak/insectoids/graphics/file.bmp b/#Test/samples/mak/insectoids/graphics/file.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/file.bmp rename to #Test/samples/mak/insectoids/graphics/file.bmp diff --git a/_release/samples/mak/insectoids/graphics/insectoids_logo.bmp b/#Test/samples/mak/insectoids/graphics/insectoids_logo.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/insectoids_logo.bmp rename to #Test/samples/mak/insectoids/graphics/insectoids_logo.bmp diff --git a/_release/samples/mak/insectoids/graphics/kaboom.bmp b/#Test/samples/mak/insectoids/graphics/kaboom.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/kaboom.bmp rename to #Test/samples/mak/insectoids/graphics/kaboom.bmp diff --git a/_release/samples/mak/insectoids/graphics/player.bmp b/#Test/samples/mak/insectoids/graphics/player.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/player.bmp rename to #Test/samples/mak/insectoids/graphics/player.bmp diff --git a/_release/samples/mak/insectoids/graphics/pointer.bmp b/#Test/samples/mak/insectoids/graphics/pointer.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/pointer.bmp rename to #Test/samples/mak/insectoids/graphics/pointer.bmp diff --git a/_release/samples/mak/insectoids/graphics/ship1.bmp b/#Test/samples/mak/insectoids/graphics/ship1.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/ship1.bmp rename to #Test/samples/mak/insectoids/graphics/ship1.bmp diff --git a/_release/samples/mak/insectoids/graphics/spark.bmp b/#Test/samples/mak/insectoids/graphics/spark.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/spark.bmp rename to #Test/samples/mak/insectoids/graphics/spark.bmp diff --git a/_release/samples/mak/insectoids/graphics/star1.bmp b/#Test/samples/mak/insectoids/graphics/star1.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/star1.bmp rename to #Test/samples/mak/insectoids/graphics/star1.bmp diff --git a/_release/samples/mak/insectoids/graphics/star2.bmp b/#Test/samples/mak/insectoids/graphics/star2.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/star2.bmp rename to #Test/samples/mak/insectoids/graphics/star2.bmp diff --git a/_release/samples/mak/insectoids/graphics/star3.bmp b/#Test/samples/mak/insectoids/graphics/star3.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/star3.bmp rename to #Test/samples/mak/insectoids/graphics/star3.bmp diff --git a/_release/samples/mak/insectoids/graphics/stars.bmp b/#Test/samples/mak/insectoids/graphics/stars.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/stars.bmp rename to #Test/samples/mak/insectoids/graphics/stars.bmp diff --git a/_release/samples/mak/insectoids/graphics/starsfar.bmp b/#Test/samples/mak/insectoids/graphics/starsfar.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/starsfar.bmp rename to #Test/samples/mak/insectoids/graphics/starsfar.bmp diff --git a/_release/samples/mak/insectoids/graphics/starsmid.bmp b/#Test/samples/mak/insectoids/graphics/starsmid.bmp similarity index 100% rename from _release/samples/mak/insectoids/graphics/starsmid.bmp rename to #Test/samples/mak/insectoids/graphics/starsmid.bmp diff --git a/_release/samples/mak/insectoids/insectoids.bb b/#Test/samples/mak/insectoids/insectoids.bb similarity index 100% rename from _release/samples/mak/insectoids/insectoids.bb rename to #Test/samples/mak/insectoids/insectoids.bb diff --git a/_release/samples/mak/insectoids/sounds/beep.wav b/#Test/samples/mak/insectoids/sounds/beep.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/beep.wav rename to #Test/samples/mak/insectoids/sounds/beep.wav diff --git a/_release/samples/mak/insectoids/sounds/beeplow.wav b/#Test/samples/mak/insectoids/sounds/beeplow.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/beeplow.wav rename to #Test/samples/mak/insectoids/sounds/beeplow.wav diff --git a/_release/samples/mak/insectoids/sounds/boom.wav b/#Test/samples/mak/insectoids/sounds/boom.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/boom.wav rename to #Test/samples/mak/insectoids/sounds/boom.wav diff --git a/_release/samples/mak/insectoids/sounds/buzz.wav b/#Test/samples/mak/insectoids/sounds/buzz.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/buzz.wav rename to #Test/samples/mak/insectoids/sounds/buzz.wav diff --git a/_release/samples/mak/insectoids/sounds/cool.wav b/#Test/samples/mak/insectoids/sounds/cool.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/cool.wav rename to #Test/samples/mak/insectoids/sounds/cool.wav diff --git a/_release/samples/mak/insectoids/sounds/kazap.wav b/#Test/samples/mak/insectoids/sounds/kazap.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/kazap.wav rename to #Test/samples/mak/insectoids/sounds/kazap.wav diff --git a/_release/samples/mak/insectoids/sounds/mtruc.wav b/#Test/samples/mak/insectoids/sounds/mtruc.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/mtruc.wav rename to #Test/samples/mak/insectoids/sounds/mtruc.wav diff --git a/_release/samples/mak/insectoids/sounds/shoot.wav b/#Test/samples/mak/insectoids/sounds/shoot.wav similarity index 100% rename from _release/samples/mak/insectoids/sounds/shoot.wav rename to #Test/samples/mak/insectoids/sounds/shoot.wav diff --git a/_release/samples/mak/lights/lights.bb b/#Test/samples/mak/lights/lights.bb similarity index 100% rename from _release/samples/mak/lights/lights.bb rename to #Test/samples/mak/lights/lights.bb diff --git a/_release/samples/mak/multi_tex/blitzlogo.bmp b/#Test/samples/mak/multi_tex/blitzlogo.bmp similarity index 100% rename from _release/samples/mak/multi_tex/blitzlogo.bmp rename to #Test/samples/mak/multi_tex/blitzlogo.bmp diff --git a/_release/samples/mak/multi_tex/multi_tex.bb b/#Test/samples/mak/multi_tex/multi_tex.bb similarity index 100% rename from _release/samples/mak/multi_tex/multi_tex.bb rename to #Test/samples/mak/multi_tex/multi_tex.bb diff --git a/_release/samples/mak/multi_tex/spheremap.bmp b/#Test/samples/mak/multi_tex/spheremap.bmp similarity index 100% rename from _release/samples/mak/multi_tex/spheremap.bmp rename to #Test/samples/mak/multi_tex/spheremap.bmp diff --git a/_release/samples/mak/multicam/multicam.bb b/#Test/samples/mak/multicam/multicam.bb similarity index 100% rename from _release/samples/mak/multicam/multicam.bb rename to #Test/samples/mak/multicam/multicam.bb diff --git a/_release/samples/mak/pick/pick.bb b/#Test/samples/mak/pick/pick.bb similarity index 100% rename from _release/samples/mak/pick/pick.bb rename to #Test/samples/mak/pick/pick.bb diff --git a/_release/samples/mak/primitives/primitives.bb b/#Test/samples/mak/primitives/primitives.bb similarity index 100% rename from _release/samples/mak/primitives/primitives.bb rename to #Test/samples/mak/primitives/primitives.bb diff --git a/_release/samples/mak/start.bb b/#Test/samples/mak/start.bb similarity index 100% rename from _release/samples/mak/start.bb rename to #Test/samples/mak/start.bb diff --git a/_release/samples/mak/teapot/b3dlogo.jpg b/#Test/samples/mak/teapot/b3dlogo.jpg similarity index 100% rename from _release/samples/mak/teapot/b3dlogo.jpg rename to #Test/samples/mak/teapot/b3dlogo.jpg diff --git a/_release/samples/mak/teapot/blitzlogo.bmp b/#Test/samples/mak/teapot/blitzlogo.bmp similarity index 100% rename from _release/samples/mak/teapot/blitzlogo.bmp rename to #Test/samples/mak/teapot/blitzlogo.bmp diff --git a/_release/samples/mak/teapot/spheremap.bmp b/#Test/samples/mak/teapot/spheremap.bmp similarity index 100% rename from _release/samples/mak/teapot/spheremap.bmp rename to #Test/samples/mak/teapot/spheremap.bmp diff --git a/_release/samples/mak/teapot/teapot.bb b/#Test/samples/mak/teapot/teapot.bb similarity index 100% rename from _release/samples/mak/teapot/teapot.bb rename to #Test/samples/mak/teapot/teapot.bb diff --git a/_release/samples/mak/teapot/teapot.x b/#Test/samples/mak/teapot/teapot.x similarity index 100% rename from _release/samples/mak/teapot/teapot.x rename to #Test/samples/mak/teapot/teapot.x diff --git a/_release/samples/mak/tex_render/b3dlogo.jpg b/#Test/samples/mak/tex_render/b3dlogo.jpg similarity index 100% rename from _release/samples/mak/tex_render/b3dlogo.jpg rename to #Test/samples/mak/tex_render/b3dlogo.jpg diff --git a/_release/samples/mak/tex_render/tex_render.bb b/#Test/samples/mak/tex_render/tex_render.bb similarity index 100% rename from _release/samples/mak/tex_render/tex_render.bb rename to #Test/samples/mak/tex_render/tex_render.bb diff --git a/_release/samples/mak/tron/b3dlogo.jpg b/#Test/samples/mak/tron/b3dlogo.jpg similarity index 100% rename from _release/samples/mak/tron/b3dlogo.jpg rename to #Test/samples/mak/tron/b3dlogo.jpg diff --git a/_release/samples/mak/tron/tron.bb b/#Test/samples/mak/tron/tron.bb similarity index 100% rename from _release/samples/mak/tron/tron.bb rename to #Test/samples/mak/tron/tron.bb diff --git a/_release/samples/mak/xfighter/Water-2_mip.BMP b/#Test/samples/mak/xfighter/Water-2_mip.BMP similarity index 100% rename from _release/samples/mak/xfighter/Water-2_mip.BMP rename to #Test/samples/mak/xfighter/Water-2_mip.BMP diff --git a/_release/samples/mak/xfighter/bihull.bmp b/#Test/samples/mak/xfighter/bihull.bmp similarity index 100% rename from _release/samples/mak/xfighter/bihull.bmp rename to #Test/samples/mak/xfighter/bihull.bmp diff --git a/_release/samples/mak/xfighter/biplane.x b/#Test/samples/mak/xfighter/biplane.x similarity index 100% rename from _release/samples/mak/xfighter/biplane.x rename to #Test/samples/mak/xfighter/biplane.x diff --git a/_release/samples/mak/xfighter/cloud_2.BMP b/#Test/samples/mak/xfighter/cloud_2.BMP similarity index 100% rename from _release/samples/mak/xfighter/cloud_2.BMP rename to #Test/samples/mak/xfighter/cloud_2.BMP diff --git a/_release/samples/mak/xfighter/coolgrass2.BMP b/#Test/samples/mak/xfighter/coolgrass2.BMP similarity index 100% rename from _release/samples/mak/xfighter/coolgrass2.BMP rename to #Test/samples/mak/xfighter/coolgrass2.BMP diff --git a/_release/samples/mak/xfighter/hmap_1024.BMP b/#Test/samples/mak/xfighter/hmap_1024.BMP similarity index 100% rename from _release/samples/mak/xfighter/hmap_1024.BMP rename to #Test/samples/mak/xfighter/hmap_1024.BMP diff --git a/_release/samples/mak/xfighter/lmap_256.BMP b/#Test/samples/mak/xfighter/lmap_256.BMP similarity index 100% rename from _release/samples/mak/xfighter/lmap_256.BMP rename to #Test/samples/mak/xfighter/lmap_256.BMP diff --git a/_release/samples/mak/xfighter/wings.bmp b/#Test/samples/mak/xfighter/wings.bmp similarity index 100% rename from _release/samples/mak/xfighter/wings.bmp rename to #Test/samples/mak/xfighter/wings.bmp diff --git a/_release/samples/mak/xfighter/xfighter.bb b/#Test/samples/mak/xfighter/xfighter.bb similarity index 100% rename from _release/samples/mak/xfighter/xfighter.bb rename to #Test/samples/mak/xfighter/xfighter.bb diff --git a/_release/samples/si/fps/Bigspark.BMP b/#Test/samples/si/fps/Bigspark.BMP similarity index 100% rename from _release/samples/si/fps/Bigspark.BMP rename to #Test/samples/si/fps/Bigspark.BMP diff --git a/_release/samples/si/fps/Gargoyle/Gargoyle.bmp b/#Test/samples/si/fps/Gargoyle/Gargoyle.bmp similarity index 100% rename from _release/samples/si/fps/Gargoyle/Gargoyle.bmp rename to #Test/samples/si/fps/Gargoyle/Gargoyle.bmp diff --git a/_release/samples/si/fps/Gargoyle/Gargoyle.md2 b/#Test/samples/si/fps/Gargoyle/Gargoyle.md2 similarity index 100% rename from _release/samples/si/fps/Gargoyle/Gargoyle.md2 rename to #Test/samples/si/fps/Gargoyle/Gargoyle.md2 diff --git a/_release/samples/si/fps/Gargoyle/GargoyleSkin.PCX b/#Test/samples/si/fps/Gargoyle/GargoyleSkin.PCX similarity index 100% rename from _release/samples/si/fps/Gargoyle/GargoyleSkin.PCX rename to #Test/samples/si/fps/Gargoyle/GargoyleSkin.PCX diff --git a/_release/samples/si/fps/Stone_grey1.bmp b/#Test/samples/si/fps/Stone_grey1.bmp similarity index 100% rename from _release/samples/si/fps/Stone_grey1.bmp rename to #Test/samples/si/fps/Stone_grey1.bmp diff --git a/_release/samples/si/fps/blood.bmp b/#Test/samples/si/fps/blood.bmp similarity index 100% rename from _release/samples/si/fps/blood.bmp rename to #Test/samples/si/fps/blood.bmp diff --git a/_release/samples/si/fps/fps.bb b/#Test/samples/si/fps/fps.bb similarity index 100% rename from _release/samples/si/fps/fps.bb rename to #Test/samples/si/fps/fps.bb diff --git a/_release/samples/si/fps/gunshot.wav b/#Test/samples/si/fps/gunshot.wav similarity index 100% rename from _release/samples/si/fps/gunshot.wav rename to #Test/samples/si/fps/gunshot.wav diff --git a/_release/samples/si/fps/interior.X b/#Test/samples/si/fps/interior.X similarity index 100% rename from _release/samples/si/fps/interior.X rename to #Test/samples/si/fps/interior.X diff --git a/_release/samples/si/fps/ladders.BMP b/#Test/samples/si/fps/ladders.BMP similarity index 100% rename from _release/samples/si/fps/ladders.BMP rename to #Test/samples/si/fps/ladders.BMP diff --git a/_release/samples/si/fps/ladders.X b/#Test/samples/si/fps/ladders.X similarity index 100% rename from _release/samples/si/fps/ladders.X rename to #Test/samples/si/fps/ladders.X diff --git a/_release/samples/si/fps/squish.wav b/#Test/samples/si/fps/squish.wav similarity index 100% rename from _release/samples/si/fps/squish.wav rename to #Test/samples/si/fps/squish.wav diff --git a/_release/samples/si/fps/stone_blue1.bmp b/#Test/samples/si/fps/stone_blue1.bmp similarity index 100% rename from _release/samples/si/fps/stone_blue1.bmp rename to #Test/samples/si/fps/stone_blue1.bmp diff --git a/_release/samples/si/fps/stone_red1.bmp b/#Test/samples/si/fps/stone_red1.bmp similarity index 100% rename from _release/samples/si/fps/stone_red1.bmp rename to #Test/samples/si/fps/stone_red1.bmp diff --git a/_release/samples/si/fps/stone_yellow1.bmp b/#Test/samples/si/fps/stone_yellow1.bmp similarity index 100% rename from _release/samples/si/fps/stone_yellow1.bmp rename to #Test/samples/si/fps/stone_yellow1.bmp diff --git a/_release/samples/si/fps/target.bmp b/#Test/samples/si/fps/target.bmp similarity index 100% rename from _release/samples/si/fps/target.bmp rename to #Test/samples/si/fps/target.bmp diff --git a/_release/samples/si/matrix/command_ref.bb b/#Test/samples/si/matrix/command_ref.bb similarity index 100% rename from _release/samples/si/matrix/command_ref.bb rename to #Test/samples/si/matrix/command_ref.bb diff --git a/_release/samples/si/matrix/example.bb b/#Test/samples/si/matrix/example.bb similarity index 100% rename from _release/samples/si/matrix/example.bb rename to #Test/samples/si/matrix/example.bb diff --git a/_release/samples/si/matrix/matrix.bb b/#Test/samples/si/matrix/matrix.bb similarity index 100% rename from _release/samples/si/matrix/matrix.bb rename to #Test/samples/si/matrix/matrix.bb diff --git a/_release/samples/si/matrix/tiles.bmp b/#Test/samples/si/matrix/tiles.bmp similarity index 100% rename from _release/samples/si/matrix/tiles.bmp rename to #Test/samples/si/matrix/tiles.bmp diff --git a/_release/samples/warpy/blitzdoc.bb b/#Test/samples/warpy/blitzdoc.bb similarity index 100% rename from _release/samples/warpy/blitzdoc.bb rename to #Test/samples/warpy/blitzdoc.bb diff --git a/_release/samples/zenith/scare/models/cb.ms3d b/#Test/samples/zenith/scare/models/cb.ms3d similarity index 100% rename from _release/samples/zenith/scare/models/cb.ms3d rename to #Test/samples/zenith/scare/models/cb.ms3d diff --git a/_release/samples/zenith/scare/models/hands/hands.ms3d b/#Test/samples/zenith/scare/models/hands/hands.ms3d similarity index 100% rename from _release/samples/zenith/scare/models/hands/hands.ms3d rename to #Test/samples/zenith/scare/models/hands/hands.ms3d diff --git a/_release/samples/zenith/scare/models/level/crate.ms3d b/#Test/samples/zenith/scare/models/level/crate.ms3d similarity index 100% rename from _release/samples/zenith/scare/models/level/crate.ms3d rename to #Test/samples/zenith/scare/models/level/crate.ms3d diff --git a/_release/samples/zenith/scare/models/level/crate.png b/#Test/samples/zenith/scare/models/level/crate.png similarity index 100% rename from _release/samples/zenith/scare/models/level/crate.png rename to #Test/samples/zenith/scare/models/level/crate.png diff --git a/_release/samples/zenith/scare/models/level/crate.x b/#Test/samples/zenith/scare/models/level/crate.x similarity index 100% rename from _release/samples/zenith/scare/models/level/crate.x rename to #Test/samples/zenith/scare/models/level/crate.x diff --git a/_release/samples/zenith/scare/models/level/level.ms3d b/#Test/samples/zenith/scare/models/level/level.ms3d similarity index 100% rename from _release/samples/zenith/scare/models/level/level.ms3d rename to #Test/samples/zenith/scare/models/level/level.ms3d diff --git a/_release/samples/zenith/scare/models/level/level.x b/#Test/samples/zenith/scare/models/level/level.x similarity index 100% rename from _release/samples/zenith/scare/models/level/level.x rename to #Test/samples/zenith/scare/models/level/level.x diff --git a/_release/samples/zenith/scare/models/level/st1.png b/#Test/samples/zenith/scare/models/level/st1.png similarity index 100% rename from _release/samples/zenith/scare/models/level/st1.png rename to #Test/samples/zenith/scare/models/level/st1.png diff --git a/_release/samples/zenith/scare/models/level/st2.png b/#Test/samples/zenith/scare/models/level/st2.png similarity index 100% rename from _release/samples/zenith/scare/models/level/st2.png rename to #Test/samples/zenith/scare/models/level/st2.png diff --git a/_release/samples/zenith/scare/models/level/wall.png b/#Test/samples/zenith/scare/models/level/wall.png similarity index 100% rename from _release/samples/zenith/scare/models/level/wall.png rename to #Test/samples/zenith/scare/models/level/wall.png diff --git a/_release/tutorials/basic_tuts/hello.bb b/#Test/samples/zenith/scare/models/pistol/Sav7115.TMP similarity index 100% rename from _release/tutorials/basic_tuts/hello.bb rename to #Test/samples/zenith/scare/models/pistol/Sav7115.TMP diff --git a/_release/samples/zenith/scare/models/pistol/g1.png b/#Test/samples/zenith/scare/models/pistol/g1.png similarity index 100% rename from _release/samples/zenith/scare/models/pistol/g1.png rename to #Test/samples/zenith/scare/models/pistol/g1.png diff --git a/_release/samples/zenith/scare/models/pistol/ghit.png b/#Test/samples/zenith/scare/models/pistol/ghit.png similarity index 100% rename from _release/samples/zenith/scare/models/pistol/ghit.png rename to #Test/samples/zenith/scare/models/pistol/ghit.png diff --git a/_release/samples/zenith/scare/models/pistol/gun.ms3d b/#Test/samples/zenith/scare/models/pistol/gun.ms3d similarity index 100% rename from _release/samples/zenith/scare/models/pistol/gun.ms3d rename to #Test/samples/zenith/scare/models/pistol/gun.ms3d diff --git a/_release/samples/zenith/scare/models/pistol/gun.png b/#Test/samples/zenith/scare/models/pistol/gun.png similarity index 100% rename from _release/samples/zenith/scare/models/pistol/gun.png rename to #Test/samples/zenith/scare/models/pistol/gun.png diff --git a/_release/samples/zenith/scare/models/pistol/hit.png b/#Test/samples/zenith/scare/models/pistol/hit.png similarity index 100% rename from _release/samples/zenith/scare/models/pistol/hit.png rename to #Test/samples/zenith/scare/models/pistol/hit.png diff --git a/_release/samples/zenith/scare/models/pistol/pistol.x b/#Test/samples/zenith/scare/models/pistol/pistol.x similarity index 100% rename from _release/samples/zenith/scare/models/pistol/pistol.x rename to #Test/samples/zenith/scare/models/pistol/pistol.x diff --git a/_release/samples/zenith/scare/models/player/guy.ms3d b/#Test/samples/zenith/scare/models/player/guy.ms3d similarity index 100% rename from _release/samples/zenith/scare/models/player/guy.ms3d rename to #Test/samples/zenith/scare/models/player/guy.ms3d diff --git a/_release/samples/zenith/scare/models/player/guy.png b/#Test/samples/zenith/scare/models/player/guy.png similarity index 100% rename from _release/samples/zenith/scare/models/player/guy.png rename to #Test/samples/zenith/scare/models/player/guy.png diff --git a/_release/samples/zenith/scare/scare.bb b/#Test/samples/zenith/scare/scare.bb similarity index 100% rename from _release/samples/zenith/scare/scare.bb rename to #Test/samples/zenith/scare/scare.bb diff --git a/_release/samples/zenith/scare/sounds/boot1.wav b/#Test/samples/zenith/scare/sounds/boot1.wav similarity index 100% rename from _release/samples/zenith/scare/sounds/boot1.wav rename to #Test/samples/zenith/scare/sounds/boot1.wav diff --git a/_release/samples/zenith/scare/sounds/boot2.wav b/#Test/samples/zenith/scare/sounds/boot2.wav similarity index 100% rename from _release/samples/zenith/scare/sounds/boot2.wav rename to #Test/samples/zenith/scare/sounds/boot2.wav diff --git a/_release/samples/zenith/scare/sounds/fall1.wav b/#Test/samples/zenith/scare/sounds/fall1.wav similarity index 100% rename from _release/samples/zenith/scare/sounds/fall1.wav rename to #Test/samples/zenith/scare/sounds/fall1.wav diff --git a/_release/samples/zenith/scare/sounds/jump1.wav b/#Test/samples/zenith/scare/sounds/jump1.wav similarity index 100% rename from _release/samples/zenith/scare/sounds/jump1.wav rename to #Test/samples/zenith/scare/sounds/jump1.wav diff --git a/_release/samples/zenith/scare/textures/gui/chat.png b/#Test/samples/zenith/scare/textures/gui/chat.png similarity index 100% rename from _release/samples/zenith/scare/textures/gui/chat.png rename to #Test/samples/zenith/scare/textures/gui/chat.png diff --git a/_release/samples/zenith/scare/textures/gui/cursors.png b/#Test/samples/zenith/scare/textures/gui/cursors.png similarity index 100% rename from _release/samples/zenith/scare/textures/gui/cursors.png rename to #Test/samples/zenith/scare/textures/gui/cursors.png diff --git a/#Test/tmp/tmp.bb b/#Test/tmp/tmp.bb new file mode 100644 index 0000000..20484c5 --- /dev/null +++ b/#Test/tmp/tmp.bb @@ -0,0 +1,16 @@ +Graphics3D 800,600,32,2 +SetBuffer BackBuffer() + +Cam = CreateCamera() +Cube = CreateCube() +MoveEntity(Cam, 0, 0, -5) + +While Not KeyHit(1) + TurnEntity Cube, 0.1, 0.1, 0.1 + + RenderWorld + Flip 0 +Wend + +EndGraphics +End \ No newline at end of file diff --git a/_release/tutorials/GCUK_Tuts/10c.jpg b/#Test/tutorials/GCUK_Tuts/10c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/10c.jpg rename to #Test/tutorials/GCUK_Tuts/10c.jpg diff --git a/_release/tutorials/GCUK_Tuts/1c.jpg b/#Test/tutorials/GCUK_Tuts/1c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/1c.jpg rename to #Test/tutorials/GCUK_Tuts/1c.jpg diff --git a/_release/tutorials/GCUK_Tuts/2c.jpg b/#Test/tutorials/GCUK_Tuts/2c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/2c.jpg rename to #Test/tutorials/GCUK_Tuts/2c.jpg diff --git a/_release/tutorials/GCUK_Tuts/3c.jpg b/#Test/tutorials/GCUK_Tuts/3c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/3c.jpg rename to #Test/tutorials/GCUK_Tuts/3c.jpg diff --git a/_release/tutorials/GCUK_Tuts/4c.jpg b/#Test/tutorials/GCUK_Tuts/4c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/4c.jpg rename to #Test/tutorials/GCUK_Tuts/4c.jpg diff --git a/_release/tutorials/GCUK_Tuts/5c.jpg b/#Test/tutorials/GCUK_Tuts/5c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/5c.jpg rename to #Test/tutorials/GCUK_Tuts/5c.jpg diff --git a/_release/tutorials/GCUK_Tuts/6c.jpg b/#Test/tutorials/GCUK_Tuts/6c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/6c.jpg rename to #Test/tutorials/GCUK_Tuts/6c.jpg diff --git a/_release/tutorials/GCUK_Tuts/7c.jpg b/#Test/tutorials/GCUK_Tuts/7c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/7c.jpg rename to #Test/tutorials/GCUK_Tuts/7c.jpg diff --git a/_release/tutorials/GCUK_Tuts/8c.jpg b/#Test/tutorials/GCUK_Tuts/8c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/8c.jpg rename to #Test/tutorials/GCUK_Tuts/8c.jpg diff --git a/_release/tutorials/GCUK_Tuts/9c.jpg b/#Test/tutorials/GCUK_Tuts/9c.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/9c.jpg rename to #Test/tutorials/GCUK_Tuts/9c.jpg diff --git a/_release/tutorials/GCUK_Tuts/Cameras.html b/#Test/tutorials/GCUK_Tuts/Cameras.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/Cameras.html rename to #Test/tutorials/GCUK_Tuts/Cameras.html diff --git a/_release/tutorials/GCUK_Tuts/Entities.html b/#Test/tutorials/GCUK_Tuts/Entities.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/Entities.html rename to #Test/tutorials/GCUK_Tuts/Entities.html diff --git a/_release/tutorials/GCUK_Tuts/Gargoyle.md2 b/#Test/tutorials/GCUK_Tuts/Gargoyle.md2 similarity index 100% rename from _release/tutorials/GCUK_Tuts/Gargoyle.md2 rename to #Test/tutorials/GCUK_Tuts/Gargoyle.md2 diff --git a/_release/tutorials/GCUK_Tuts/Meshes.html b/#Test/tutorials/GCUK_Tuts/Meshes.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/Meshes.html rename to #Test/tutorials/GCUK_Tuts/Meshes.html diff --git a/_release/tutorials/GCUK_Tuts/Planes.html b/#Test/tutorials/GCUK_Tuts/Planes.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/Planes.html rename to #Test/tutorials/GCUK_Tuts/Planes.html diff --git a/_release/tutorials/GCUK_Tuts/Terrains.html b/#Test/tutorials/GCUK_Tuts/Terrains.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/Terrains.html rename to #Test/tutorials/GCUK_Tuts/Terrains.html diff --git a/_release/tutorials/GCUK_Tuts/Texturing.html b/#Test/tutorials/GCUK_Tuts/Texturing.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/Texturing.html rename to #Test/tutorials/GCUK_Tuts/Texturing.html diff --git a/_release/tutorials/GCUK_Tuts/animation.bb b/#Test/tutorials/GCUK_Tuts/animation.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/animation.bb rename to #Test/tutorials/GCUK_Tuts/animation.bb diff --git a/_release/tutorials/GCUK_Tuts/b3dlogo_small.jpg b/#Test/tutorials/GCUK_Tuts/b3dlogo_small.jpg similarity index 100% rename from _release/tutorials/GCUK_Tuts/b3dlogo_small.jpg rename to #Test/tutorials/GCUK_Tuts/b3dlogo_small.jpg diff --git a/_release/tutorials/GCUK_Tuts/blitztexture.bmp b/#Test/tutorials/GCUK_Tuts/blitztexture.bmp similarity index 100% rename from _release/tutorials/GCUK_Tuts/blitztexture.bmp rename to #Test/tutorials/GCUK_Tuts/blitztexture.bmp diff --git a/_release/tutorials/GCUK_Tuts/camera.bb b/#Test/tutorials/GCUK_Tuts/camera.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/camera.bb rename to #Test/tutorials/GCUK_Tuts/camera.bb diff --git a/_release/tutorials/GCUK_Tuts/collision.bb b/#Test/tutorials/GCUK_Tuts/collision.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/collision.bb rename to #Test/tutorials/GCUK_Tuts/collision.bb diff --git a/_release/tutorials/GCUK_Tuts/house.3ds b/#Test/tutorials/GCUK_Tuts/house.3ds similarity index 100% rename from _release/tutorials/GCUK_Tuts/house.3ds rename to #Test/tutorials/GCUK_Tuts/house.3ds diff --git a/_release/tutorials/GCUK_Tuts/lights.bb b/#Test/tutorials/GCUK_Tuts/lights.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/lights.bb rename to #Test/tutorials/GCUK_Tuts/lights.bb diff --git a/_release/tutorials/GCUK_Tuts/movement.bb b/#Test/tutorials/GCUK_Tuts/movement.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/movement.bb rename to #Test/tutorials/GCUK_Tuts/movement.bb diff --git a/_release/tutorials/GCUK_Tuts/page1.html b/#Test/tutorials/GCUK_Tuts/page1.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page1.html rename to #Test/tutorials/GCUK_Tuts/page1.html diff --git a/_release/tutorials/GCUK_Tuts/page2.html b/#Test/tutorials/GCUK_Tuts/page2.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page2.html rename to #Test/tutorials/GCUK_Tuts/page2.html diff --git a/_release/tutorials/GCUK_Tuts/page3.html b/#Test/tutorials/GCUK_Tuts/page3.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page3.html rename to #Test/tutorials/GCUK_Tuts/page3.html diff --git a/_release/tutorials/GCUK_Tuts/page4.html b/#Test/tutorials/GCUK_Tuts/page4.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page4.html rename to #Test/tutorials/GCUK_Tuts/page4.html diff --git a/_release/tutorials/GCUK_Tuts/page5.html b/#Test/tutorials/GCUK_Tuts/page5.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page5.html rename to #Test/tutorials/GCUK_Tuts/page5.html diff --git a/_release/tutorials/GCUK_Tuts/page6.html b/#Test/tutorials/GCUK_Tuts/page6.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page6.html rename to #Test/tutorials/GCUK_Tuts/page6.html diff --git a/_release/tutorials/GCUK_Tuts/page7.html b/#Test/tutorials/GCUK_Tuts/page7.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page7.html rename to #Test/tutorials/GCUK_Tuts/page7.html diff --git a/_release/tutorials/GCUK_Tuts/page8.html b/#Test/tutorials/GCUK_Tuts/page8.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/page8.html rename to #Test/tutorials/GCUK_Tuts/page8.html diff --git a/_release/tutorials/GCUK_Tuts/plane.3ds b/#Test/tutorials/GCUK_Tuts/plane.3ds similarity index 100% rename from _release/tutorials/GCUK_Tuts/plane.3ds rename to #Test/tutorials/GCUK_Tuts/plane.3ds diff --git a/_release/tutorials/GCUK_Tuts/rocket.3ds b/#Test/tutorials/GCUK_Tuts/rocket.3ds similarity index 100% rename from _release/tutorials/GCUK_Tuts/rocket.3ds rename to #Test/tutorials/GCUK_Tuts/rocket.3ds diff --git a/_release/tutorials/GCUK_Tuts/settingup.bb b/#Test/tutorials/GCUK_Tuts/settingup.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/settingup.bb rename to #Test/tutorials/GCUK_Tuts/settingup.bb diff --git a/_release/tutorials/GCUK_Tuts/startup.html b/#Test/tutorials/GCUK_Tuts/startup.html similarity index 100% rename from _release/tutorials/GCUK_Tuts/startup.html rename to #Test/tutorials/GCUK_Tuts/startup.html diff --git a/_release/tutorials/GCUK_Tuts/texture.bb b/#Test/tutorials/GCUK_Tuts/texture.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/texture.bb rename to #Test/tutorials/GCUK_Tuts/texture.bb diff --git a/_release/tutorials/GCUK_Tuts/vertex.bb b/#Test/tutorials/GCUK_Tuts/vertex.bb similarity index 100% rename from _release/tutorials/GCUK_Tuts/vertex.bb rename to #Test/tutorials/GCUK_Tuts/vertex.bb diff --git a/_release/tutorials/basic_tuts/array.bb b/#Test/tutorials/basic_tuts/array.bb similarity index 100% rename from _release/tutorials/basic_tuts/array.bb rename to #Test/tutorials/basic_tuts/array.bb diff --git a/_release/tutorials/basic_tuts/array1.bb b/#Test/tutorials/basic_tuts/array1.bb similarity index 100% rename from _release/tutorials/basic_tuts/array1.bb rename to #Test/tutorials/basic_tuts/array1.bb diff --git a/_release/tutorials/basic_tuts/array2.bb b/#Test/tutorials/basic_tuts/array2.bb similarity index 100% rename from _release/tutorials/basic_tuts/array2.bb rename to #Test/tutorials/basic_tuts/array2.bb diff --git a/_release/tutorials/basic_tuts/basic.html b/#Test/tutorials/basic_tuts/basic.html similarity index 100% rename from _release/tutorials/basic_tuts/basic.html rename to #Test/tutorials/basic_tuts/basic.html diff --git a/_release/tutorials/basic_tuts/blitzlogo.gif b/#Test/tutorials/basic_tuts/blitzlogo.gif similarity index 100% rename from _release/tutorials/basic_tuts/blitzlogo.gif rename to #Test/tutorials/basic_tuts/blitzlogo.gif diff --git a/_release/tutorials/basic_tuts/counter.bb b/#Test/tutorials/basic_tuts/counter.bb similarity index 100% rename from _release/tutorials/basic_tuts/counter.bb rename to #Test/tutorials/basic_tuts/counter.bb diff --git a/_release/tutorials/basic_tuts/credits.html b/#Test/tutorials/basic_tuts/credits.html similarity index 100% rename from _release/tutorials/basic_tuts/credits.html rename to #Test/tutorials/basic_tuts/credits.html diff --git a/_release/tutorials/basic_tuts/doublebuffering.bb b/#Test/tutorials/basic_tuts/doublebuffering.bb similarity index 100% rename from _release/tutorials/basic_tuts/doublebuffering.bb rename to #Test/tutorials/basic_tuts/doublebuffering.bb diff --git a/_release/tutorials/basic_tuts/end if.bb b/#Test/tutorials/basic_tuts/end if.bb similarity index 100% rename from _release/tutorials/basic_tuts/end if.bb rename to #Test/tutorials/basic_tuts/end if.bb diff --git a/_release/tutorials/basic_tuts/examples.html b/#Test/tutorials/basic_tuts/examples.html similarity index 100% rename from _release/tutorials/basic_tuts/examples.html rename to #Test/tutorials/basic_tuts/examples.html diff --git a/_release/tutorials/basic_tuts/for next loop.bb b/#Test/tutorials/basic_tuts/for next loop.bb similarity index 100% rename from _release/tutorials/basic_tuts/for next loop.bb rename to #Test/tutorials/basic_tuts/for next loop.bb diff --git a/_release/tutorials/basic_tuts/game.html b/#Test/tutorials/basic_tuts/game.html similarity index 100% rename from _release/tutorials/basic_tuts/game.html rename to #Test/tutorials/basic_tuts/game.html diff --git a/_release/tutorials/basic_tuts/gettingstarted.html b/#Test/tutorials/basic_tuts/gettingstarted.html similarity index 100% rename from _release/tutorials/basic_tuts/gettingstarted.html rename to #Test/tutorials/basic_tuts/gettingstarted.html diff --git a/_release/tutorials/basic_tuts/goto.bb b/#Test/tutorials/basic_tuts/goto.bb similarity index 100% rename from _release/tutorials/basic_tuts/goto.bb rename to #Test/tutorials/basic_tuts/goto.bb diff --git a/_release/tutorials/basic_tuts/goto1.bb b/#Test/tutorials/basic_tuts/goto1.bb similarity index 100% rename from _release/tutorials/basic_tuts/goto1.bb rename to #Test/tutorials/basic_tuts/goto1.bb diff --git a/bbruntime/runtime.cpp b/#Test/tutorials/basic_tuts/hello.bb similarity index 100% rename from bbruntime/runtime.cpp rename to #Test/tutorials/basic_tuts/hello.bb diff --git a/_release/tutorials/basic_tuts/hello.gif b/#Test/tutorials/basic_tuts/hello.gif similarity index 100% rename from _release/tutorials/basic_tuts/hello.gif rename to #Test/tutorials/basic_tuts/hello.gif diff --git a/_release/tutorials/basic_tuts/hellooutput.gif b/#Test/tutorials/basic_tuts/hellooutput.gif similarity index 100% rename from _release/tutorials/basic_tuts/hellooutput.gif rename to #Test/tutorials/basic_tuts/hellooutput.gif diff --git a/_release/tutorials/basic_tuts/if then.bb b/#Test/tutorials/basic_tuts/if then.bb similarity index 100% rename from _release/tutorials/basic_tuts/if then.bb rename to #Test/tutorials/basic_tuts/if then.bb diff --git a/_release/tutorials/basic_tuts/if then1.bb b/#Test/tutorials/basic_tuts/if then1.bb similarity index 100% rename from _release/tutorials/basic_tuts/if then1.bb rename to #Test/tutorials/basic_tuts/if then1.bb diff --git a/_release/tutorials/basic_tuts/index.html b/#Test/tutorials/basic_tuts/index.html similarity index 100% rename from _release/tutorials/basic_tuts/index.html rename to #Test/tutorials/basic_tuts/index.html diff --git a/_release/tutorials/basic_tuts/input.bb b/#Test/tutorials/basic_tuts/input.bb similarity index 100% rename from _release/tutorials/basic_tuts/input.bb rename to #Test/tutorials/basic_tuts/input.bb diff --git a/_release/tutorials/basic_tuts/input1.bb b/#Test/tutorials/basic_tuts/input1.bb similarity index 100% rename from _release/tutorials/basic_tuts/input1.bb rename to #Test/tutorials/basic_tuts/input1.bb diff --git a/_release/tutorials/basic_tuts/main.html b/#Test/tutorials/basic_tuts/main.html similarity index 100% rename from _release/tutorials/basic_tuts/main.html rename to #Test/tutorials/basic_tuts/main.html diff --git a/_release/tutorials/basic_tuts/maths.bb b/#Test/tutorials/basic_tuts/maths.bb similarity index 100% rename from _release/tutorials/basic_tuts/maths.bb rename to #Test/tutorials/basic_tuts/maths.bb diff --git a/_release/tutorials/basic_tuts/print.bb b/#Test/tutorials/basic_tuts/print.bb similarity index 100% rename from _release/tutorials/basic_tuts/print.bb rename to #Test/tutorials/basic_tuts/print.bb diff --git a/_release/tutorials/basic_tuts/random numbers.bb b/#Test/tutorials/basic_tuts/random numbers.bb similarity index 100% rename from _release/tutorials/basic_tuts/random numbers.bb rename to #Test/tutorials/basic_tuts/random numbers.bb diff --git a/_release/tutorials/basic_tuts/rocket.gif b/#Test/tutorials/basic_tuts/rocket.gif similarity index 100% rename from _release/tutorials/basic_tuts/rocket.gif rename to #Test/tutorials/basic_tuts/rocket.gif diff --git a/_release/tutorials/basic_tuts/simple maths.bb b/#Test/tutorials/basic_tuts/simple maths.bb similarity index 100% rename from _release/tutorials/basic_tuts/simple maths.bb rename to #Test/tutorials/basic_tuts/simple maths.bb diff --git a/_release/tutorials/basic_tuts/step.bb b/#Test/tutorials/basic_tuts/step.bb similarity index 100% rename from _release/tutorials/basic_tuts/step.bb rename to #Test/tutorials/basic_tuts/step.bb diff --git a/_release/tutorials/basic_tuts/toolbar1.bmp b/#Test/tutorials/basic_tuts/toolbar1.bmp similarity index 100% rename from _release/tutorials/basic_tuts/toolbar1.bmp rename to #Test/tutorials/basic_tuts/toolbar1.bmp diff --git a/_release/tutorials/basic_tuts/topbar.html b/#Test/tutorials/basic_tuts/topbar.html similarity index 100% rename from _release/tutorials/basic_tuts/topbar.html rename to #Test/tutorials/basic_tuts/topbar.html diff --git a/_release/tutorials/basic_tuts/types1.bb b/#Test/tutorials/basic_tuts/types1.bb similarity index 100% rename from _release/tutorials/basic_tuts/types1.bb rename to #Test/tutorials/basic_tuts/types1.bb diff --git a/_release/tutorials/basic_tuts/types2.bb b/#Test/tutorials/basic_tuts/types2.bb similarity index 100% rename from _release/tutorials/basic_tuts/types2.bb rename to #Test/tutorials/basic_tuts/types2.bb diff --git a/_release/tutorials/basic_tuts/variables.bb b/#Test/tutorials/basic_tuts/variables.bb similarity index 100% rename from _release/tutorials/basic_tuts/variables.bb rename to #Test/tutorials/basic_tuts/variables.bb diff --git a/_release/tutorials/basic_tuts/variables1.bb b/#Test/tutorials/basic_tuts/variables1.bb similarity index 100% rename from _release/tutorials/basic_tuts/variables1.bb rename to #Test/tutorials/basic_tuts/variables1.bb diff --git a/_release/tutorials/basic_tuts/variables2.bb b/#Test/tutorials/basic_tuts/variables2.bb similarity index 100% rename from _release/tutorials/basic_tuts/variables2.bb rename to #Test/tutorials/basic_tuts/variables2.bb diff --git a/_release/tutorials/basic_tuts/variables3.bb b/#Test/tutorials/basic_tuts/variables3.bb similarity index 100% rename from _release/tutorials/basic_tuts/variables3.bb rename to #Test/tutorials/basic_tuts/variables3.bb diff --git a/#Test/userlibs/BlitzPointer.decls b/#Test/userlibs/BlitzPointer.decls new file mode 100644 index 0000000..c2c0edc --- /dev/null +++ b/#Test/userlibs/BlitzPointer.decls @@ -0,0 +1,1136 @@ +; BlitzPointer - Adding Pointers to Blitz. +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzPointer.dll" + +; BlitzPointer +BP_GetReturnAddress%() +BP_GetFunctionPointer%() +;BP_GetLastCalledFunctionPointer%() +;BP_GetNextCalledFunctionPointer%() +;BP_GetVariablePointer%(pVariable%) +BP_GetVariablePointerI%(pVariable%) : "BP_GetVariablePointer" +BP_GetVariablePointerF%(pVariable#) : "BP_GetVariablePointer" +BP_GetVariablePointerP%(pVariable*) : "BP_GetVariablePointerType" +BP_GetLocalVariablePointerI%(pVariable%) : "BP_GetLocalVariablePointer" +BP_GetLocalVariablePointerF%(pVariable#) : "BP_GetLocalVariablePointer" +BP_GetLocalVariablePointerP%(pVariable*) : "BP_GetLocalVariablePointer" + +; Memory Modification +PeekMemoryByte%(lpMemoryPointer%) +PeekMemoryShort%(lpMemoryPointer%) +PeekMemoryInt%(lpMemoryPointer%) +PeekMemoryFloat#(lpMemoryPointer%) +PeekMemory(lpMemoryPointer%, iLength%, lpBank*) +PokeMemoryByte(lpMemoryPointer%, value%) +PokeMemoryShort(lpMemoryPointer%, value%) +PokeMemoryInt(lpMemoryPointer%, value%) +PokeMemoryFloat(lpMemoryPointer%, value#) +PokeMemory(lpMemoryPointer%, iLength%, lpBank*) + +; Function Calling +BP_CallFunctionV(fpFunctionPointer%): "BP_CallFunction0" +BP_CallFunctionI%(fpFunctionPointer%): "BP_CallFunction0" +BP_CallFunctionF#(fpFunctionPointer%): "BP_CallFunction0" +BP_CallFunctionVI(fpFunctionPointer%, Integer1%): "BP_CallFunction1" +BP_CallFunctionII%(fpFunctionPointer%, Integer1%): "BP_CallFunction1" +BP_CallFunctionFI#(fpFunctionPointer%, Integer1%): "BP_CallFunction1" +BP_CallFunctionVF(fpFunctionPointer%, Float1#): "BP_CallFunction1" +BP_CallFunctionIF%(fpFunctionPointer%, Float1#): "BP_CallFunction1" +BP_CallFunctionFF#(fpFunctionPointer%, Float1#): "BP_CallFunction1" +BP_CallFunctionVP(fpFunctionPointer%, Pointer1*): "BP_CallFunction1" +BP_CallFunctionIP%(fpFunctionPointer%, Pointer1*): "BP_CallFunction1" +BP_CallFunctionFP#(fpFunctionPointer%, Pointer1*): "BP_CallFunction1" +BP_CallFunctionVII(fpFunctionPointer%, Integer1%, Integer2%): "BP_CallFunction2" +BP_CallFunctionIII%(fpFunctionPointer%, Integer1%, Integer2%): "BP_CallFunction2" +BP_CallFunctionFII#(fpFunctionPointer%, Integer1%, Integer2%): "BP_CallFunction2" +BP_CallFunctionVFI(fpFunctionPointer%, Float1#, Integer2%): "BP_CallFunction2" +BP_CallFunctionIFI%(fpFunctionPointer%, Float1#, Integer2%): "BP_CallFunction2" +BP_CallFunctionFFI#(fpFunctionPointer%, Float1#, Integer2%): "BP_CallFunction2" +BP_CallFunctionVPI(fpFunctionPointer%, Pointer1*, Integer2%): "BP_CallFunction2" +BP_CallFunctionIPI%(fpFunctionPointer%, Pointer1*, Integer2%): "BP_CallFunction2" +BP_CallFunctionFPI#(fpFunctionPointer%, Pointer1*, Integer2%): "BP_CallFunction2" +BP_CallFunctionVIF(fpFunctionPointer%, Integer1%, Float2#): "BP_CallFunction2" +BP_CallFunctionIIF%(fpFunctionPointer%, Integer1%, Float2#): "BP_CallFunction2" +BP_CallFunctionFIF#(fpFunctionPointer%, Integer1%, Float2#): "BP_CallFunction2" +BP_CallFunctionVFF(fpFunctionPointer%, Float1#, Float2#): "BP_CallFunction2" +BP_CallFunctionIFF%(fpFunctionPointer%, Float1#, Float2#): "BP_CallFunction2" +BP_CallFunctionFFF#(fpFunctionPointer%, Float1#, Float2#): "BP_CallFunction2" +BP_CallFunctionVPF(fpFunctionPointer%, Pointer1*, Float2#): "BP_CallFunction2" +BP_CallFunctionIPF%(fpFunctionPointer%, Pointer1*, Float2#): "BP_CallFunction2" +BP_CallFunctionFPF#(fpFunctionPointer%, Pointer1*, Float2#): "BP_CallFunction2" +BP_CallFunctionVIP(fpFunctionPointer%, Integer1%, Pointer2*): "BP_CallFunction2" +BP_CallFunctionIIP%(fpFunctionPointer%, Integer1%, Pointer2*): "BP_CallFunction2" +BP_CallFunctionFIP#(fpFunctionPointer%, Integer1%, Pointer2*): "BP_CallFunction2" +BP_CallFunctionVFP(fpFunctionPointer%, Float1#, Pointer2*): "BP_CallFunction2" +BP_CallFunctionIFP%(fpFunctionPointer%, Float1#, Pointer2*): "BP_CallFunction2" +BP_CallFunctionFFP#(fpFunctionPointer%, Float1#, Pointer2*): "BP_CallFunction2" +BP_CallFunctionVPP(fpFunctionPointer%, Pointer1*, Pointer2*): "BP_CallFunction2" +BP_CallFunctionIPP%(fpFunctionPointer%, Pointer1*, Pointer2*): "BP_CallFunction2" +BP_CallFunctionFPP#(fpFunctionPointer%, Pointer1*, Pointer2*): "BP_CallFunction2" +BP_CallFunctionVIII(fpFunctionPointer%, Integer1%, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionIIII%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionFIII#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionVFII(fpFunctionPointer%, Float1#, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionIFII%(fpFunctionPointer%, Float1#, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionFFII#(fpFunctionPointer%, Float1#, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionVPII(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionIPII%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionFPII#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%): "BP_CallFunction3" +BP_CallFunctionVIFI(fpFunctionPointer%, Integer1%, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionIIFI%(fpFunctionPointer%, Integer1%, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionFIFI#(fpFunctionPointer%, Integer1%, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionVFFI(fpFunctionPointer%, Float1#, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionIFFI%(fpFunctionPointer%, Float1#, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionFFFI#(fpFunctionPointer%, Float1#, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionVPFI(fpFunctionPointer%, Pointer1*, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionIPFI%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionFPFI#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%): "BP_CallFunction3" +BP_CallFunctionVIPI(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionIIPI%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionFIPI#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionVFPI(fpFunctionPointer%, Float1#, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionIFPI%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionFFPI#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionVPPI(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionIPPI%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionFPPI#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%): "BP_CallFunction3" +BP_CallFunctionVIIF(fpFunctionPointer%, Integer1%, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionIIIF%(fpFunctionPointer%, Integer1%, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionFIIF#(fpFunctionPointer%, Integer1%, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionVFIF(fpFunctionPointer%, Float1#, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionIFIF%(fpFunctionPointer%, Float1#, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionFFIF#(fpFunctionPointer%, Float1#, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionVPIF(fpFunctionPointer%, Pointer1*, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionIPIF%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionFPIF#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#): "BP_CallFunction3" +BP_CallFunctionVIFF(fpFunctionPointer%, Integer1%, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionIIFF%(fpFunctionPointer%, Integer1%, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionFIFF#(fpFunctionPointer%, Integer1%, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionVFFF(fpFunctionPointer%, Float1#, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionIFFF%(fpFunctionPointer%, Float1#, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionFFFF#(fpFunctionPointer%, Float1#, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionVPFF(fpFunctionPointer%, Pointer1*, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionIPFF%(fpFunctionPointer%, Pointer1*, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionFPFF#(fpFunctionPointer%, Pointer1*, Float2#, Float3#): "BP_CallFunction3" +BP_CallFunctionVIPF(fpFunctionPointer%, Integer1%, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionIIPF%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionFIPF#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionVFPF(fpFunctionPointer%, Float1#, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionIFPF%(fpFunctionPointer%, Float1#, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionFFPF#(fpFunctionPointer%, Float1#, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionVPPF(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionIPPF%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionFPPF#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#): "BP_CallFunction3" +BP_CallFunctionVIIP(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIIIP%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFIIP#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVFIP(fpFunctionPointer%, Float1#, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIFIP%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFFIP#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVPIP(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIPIP%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFPIP#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVIFP(fpFunctionPointer%, Integer1%, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIIFP%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFIFP#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVFFP(fpFunctionPointer%, Float1#, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIFFP%(fpFunctionPointer%, Float1#, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFFFP#(fpFunctionPointer%, Float1#, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVPFP(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIPFP%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFPFP#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVIPP(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIIPP%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFIPP#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVFPP(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIFPP%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFFPP#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVPPP(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionIPPP%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionFPPP#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*): "BP_CallFunction3" +BP_CallFunctionVIIII(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIIII%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIIII#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFIII(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFIII%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFIII#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPIII(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPIII%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPIII#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIFII(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIFII%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIFII#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFFII(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFFII%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFFII#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPFII(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPFII%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPFII#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIPII(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIPII%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIPII#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFPII(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFPII%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFPII#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPPII(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPPII%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPPII#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIIFI(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIIFI%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIIFI#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFIFI(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFIFI%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFIFI#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPIFI(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPIFI%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPIFI#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIFFI(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIFFI%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIFFI#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFFFI(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFFFI%(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFFFI#(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPFFI(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPFFI%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPFFI#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIPFI(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIPFI%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIPFI#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFPFI(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFPFI%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFPFI#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPPFI(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPPFI%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPPFI#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIIPI(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIIPI%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIIPI#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFIPI(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFIPI%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFIPI#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPIPI(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPIPI%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPIPI#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIFPI(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIFPI%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIFPI#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFFPI(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFFPI%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFFPI#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPFPI(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPFPI%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPFPI#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIPPI(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIIPPI%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFIPPI#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVFPPI(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIFPPI%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFFPPI#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVPPPI(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionIPPPI%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionFPPPI#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%): "BP_CallFunction4" +BP_CallFunctionVIIIF(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIIIIF%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFIIIF#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVFIIF(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIFIIF%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFFIIF#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVPIIF(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIPIIF%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFPIIF#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVIFIF(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIIFIF%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFIFIF#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVFFIF(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIFFIF%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFFFIF#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVPFIF(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIPFIF%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFPFIF#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVIPIF(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIIPIF%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFIPIF#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVFPIF(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIFPIF%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFFPIF#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVPPIF(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionIPPIF%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionFPPIF#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#): "BP_CallFunction4" +BP_CallFunctionVIIFF(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIIIFF%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFIIFF#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVFIFF(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIFIFF%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFFIFF#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVPIFF(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIPIFF%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFPIFF#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVIFFF(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIIFFF%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFIFFF#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVFFFF(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIFFFF%(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFFFFF#(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVPFFF(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIPFFF%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFPFFF#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVIPFF(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIIPFF%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFIPFF#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVFPFF(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIFPFF%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFFPFF#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVPPFF(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionIPPFF%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionFPPFF#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#): "BP_CallFunction4" +BP_CallFunctionVIIPF(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIIIPF%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFIIPF#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVFIPF(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIFIPF%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFFIPF#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVPIPF(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIPIPF%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFPIPF#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVIFPF(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIIFPF%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFIFPF#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVFFPF(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIFFPF%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFFFPF#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVPFPF(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIPFPF%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFPFPF#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVIPPF(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIIPPF%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFIPPF#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVFPPF(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIFPPF%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFFPPF#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVPPPF(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionIPPPF%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionFPPPF#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#): "BP_CallFunction4" +BP_CallFunctionVIIIP(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIIIP%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIIIP#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFIIP(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFIIP%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFIIP#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPIIP(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPIIP%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPIIP#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIFIP(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIFIP%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIFIP#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFFIP(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFFIP%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFFIP#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPFIP(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPFIP%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPFIP#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIPIP(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIPIP%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIPIP#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFPIP(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFPIP%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFPIP#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPPIP(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPPIP%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPPIP#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIIFP(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIIFP%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIIFP#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFIFP(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFIFP%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFIFP#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPIFP(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPIFP%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPIFP#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIFFP(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIFFP%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIFFP#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFFFP(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFFFP%(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFFFP#(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPFFP(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPFFP%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPFFP#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIPFP(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIPFP%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIPFP#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFPFP(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFPFP%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFPFP#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPPFP(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPPFP%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPPFP#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIIPP(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIIPP%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIIPP#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFIPP(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFIPP%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFIPP#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPIPP(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPIPP%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPIPP#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIFPP(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIFPP%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIFPP#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFFPP(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFFPP%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFFPP#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPFPP(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPFPP%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPFPP#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIPPP(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIIPPP%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFIPPP#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVFPPP(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIFPPP%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFFPPP#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVPPPP(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionIPPPP%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionFPPPP#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*): "BP_CallFunction4" +BP_CallFunctionVIIIII(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIIII%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIIII#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIIII(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIIII%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIIII#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIIII(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIIII%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIIII#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFIII(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFIII%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFIII#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFIII(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFIII%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFIII#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFIII(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFIII%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFIII#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPIII(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPIII%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPIII#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPIII(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPIII%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPIII#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPIII(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPIII%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPIII#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIFII(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIFII%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIFII#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIFII(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIFII%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIFII#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIFII(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIFII%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIFII#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFFII(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFFII%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFFII#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFFII(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFFII%(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFFII#(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFFII(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFFII%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFFII#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPFII(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPFII%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPFII#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPFII(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPFII%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPFII#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPFII(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPFII%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPFII#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIPII(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIPII%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIPII#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIPII(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIPII%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIPII#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIPII(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIPII%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIPII#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFPII(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFPII%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFPII#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFPII(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFPII%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFPII#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFPII(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFPII%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFPII#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPPII(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPPII%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPPII#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPPII(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPPII%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPPII#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPPII(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPPII%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPPII#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIIFI(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIIFI%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIIFI#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIIFI(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIIFI%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIIFI#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIIFI(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIIFI%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIIFI#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFIFI(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFIFI%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFIFI#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFIFI(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFIFI%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFIFI#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFIFI(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFIFI%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFIFI#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPIFI(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPIFI%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPIFI#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPIFI(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPIFI%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPIFI#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPIFI(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPIFI%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPIFI#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIFFI(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIFFI%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIFFI#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIFFI(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIFFI%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIFFI#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIFFI(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIFFI%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIFFI#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFFFI(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFFFI%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFFFI#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFFFI(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFFFI%(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFFFI#(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFFFI(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFFFI%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFFFI#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPFFI(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPFFI%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPFFI#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPFFI(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPFFI%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPFFI#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPFFI(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPFFI%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPFFI#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIPFI(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIPFI%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIPFI#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIPFI(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIPFI%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIPFI#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIPFI(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIPFI%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIPFI#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFPFI(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFPFI%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFPFI#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFPFI(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFPFI%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFPFI#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFPFI(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFPFI%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFPFI#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPPFI(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPPFI%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPPFI#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPPFI(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPPFI%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPPFI#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPPFI(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPPFI%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPPFI#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIIPI(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIIPI%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIIPI#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIIPI(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIIPI%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIIPI#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIIPI(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIIPI%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIIPI#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFIPI(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFIPI%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFIPI#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFIPI(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFIPI%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFIPI#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFIPI(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFIPI%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFIPI#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPIPI(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPIPI%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPIPI#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPIPI(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPIPI%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPIPI#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPIPI(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPIPI%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPIPI#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIFPI(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIFPI%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIFPI#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIFPI(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIFPI%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIFPI#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIFPI(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIFPI%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIFPI#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFFPI(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFFPI%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFFPI#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFFPI(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFFPI%(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFFPI#(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFFPI(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFFPI%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFFPI#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPFPI(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPFPI%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPFPI#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPFPI(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPFPI%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPFPI#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPFPI(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPFPI%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPFPI#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIPPI(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIIPPI%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIIPPI#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFIPPI(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFIPPI%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFIPPI#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPIPPI(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPIPPI%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPIPPI#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIFPPI(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIFPPI%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIFPPI#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFFPPI(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFFPPI%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFFPPI#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPFPPI(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPFPPI%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPFPPI#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIPPPI(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIIPPPI%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFIPPPI#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVFPPPI(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIFPPPI%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFFPPPI#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVPPPPI(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionIPPPPI%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionFPPPPI#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Integer5%): "BP_CallFunction5" +BP_CallFunctionVIIIIF(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIIIF%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIIIF#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIIIF(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIIIF%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIIIF#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIIIF(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIIIF%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIIIF#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFIIF(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFIIF%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFIIF#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFIIF(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFIIF%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFIIF#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFIIF(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFIIF%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFIIF#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPIIF(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPIIF%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPIIF#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPIIF(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPIIF%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPIIF#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPIIF(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPIIF%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPIIF#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIFIF(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIFIF%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIFIF#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIFIF(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIFIF%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIFIF#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIFIF(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIFIF%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIFIF#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFFIF(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFFIF%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFFIF#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFFIF(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFFIF%(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFFIF#(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFFIF(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFFIF%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFFIF#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPFIF(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPFIF%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPFIF#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPFIF(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPFIF%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPFIF#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPFIF(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPFIF%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPFIF#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIPIF(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIPIF%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIPIF#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIPIF(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIPIF%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIPIF#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIPIF(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIPIF%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIPIF#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFPIF(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFPIF%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFPIF#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFPIF(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFPIF%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFPIF#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFPIF(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFPIF%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFPIF#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPPIF(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPPIF%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPPIF#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPPIF(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPPIF%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPPIF#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPPIF(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPPIF%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPPIF#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIIFF(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIIFF%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIIFF#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIIFF(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIIFF%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIIFF#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIIFF(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIIFF%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIIFF#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFIFF(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFIFF%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFIFF#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFIFF(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFIFF%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFIFF#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFIFF(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFIFF%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFIFF#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPIFF(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPIFF%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPIFF#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPIFF(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPIFF%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPIFF#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPIFF(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPIFF%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPIFF#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIFFF(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIFFF%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIFFF#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIFFF(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIFFF%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIFFF#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIFFF(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIFFF%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIFFF#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFFFF(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFFFF%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFFFF#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFFFF(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFFFF%(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFFFF#(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFFFF(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFFFF%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFFFF#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPFFF(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPFFF%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPFFF#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPFFF(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPFFF%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPFFF#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPFFF(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPFFF%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPFFF#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIPFF(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIPFF%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIPFF#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIPFF(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIPFF%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIPFF#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIPFF(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIPFF%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIPFF#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFPFF(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFPFF%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFPFF#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFPFF(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFPFF%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFPFF#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFPFF(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFPFF%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFPFF#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPPFF(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPPFF%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPPFF#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPPFF(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPPFF%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPPFF#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPPFF(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPPFF%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPPFF#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIIPF(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIIPF%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIIPF#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIIPF(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIIPF%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIIPF#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIIPF(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIIPF%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIIPF#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFIPF(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFIPF%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFIPF#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFIPF(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFIPF%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFIPF#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFIPF(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFIPF%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFIPF#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPIPF(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPIPF%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPIPF#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPIPF(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPIPF%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPIPF#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPIPF(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPIPF%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPIPF#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIFPF(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIFPF%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIFPF#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIFPF(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIFPF%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIFPF#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIFPF(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIFPF%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIFPF#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFFPF(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFFPF%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFFPF#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFFPF(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFFPF%(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFFPF#(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFFPF(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFFPF%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFFPF#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPFPF(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPFPF%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPFPF#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPFPF(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPFPF%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPFPF#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPFPF(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPFPF%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPFPF#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIPPF(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIIPPF%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIIPPF#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFIPPF(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFIPPF%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFIPPF#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPIPPF(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPIPPF%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPIPPF#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIFPPF(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIFPPF%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIFPPF#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFFPPF(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFFPPF%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFFPPF#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPFPPF(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPFPPF%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPFPPF#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIPPPF(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIIPPPF%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFIPPPF#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVFPPPF(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIFPPPF%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFFPPPF#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVPPPPF(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionIPPPPF%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionFPPPPF#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Float5#): "BP_CallFunction5" +BP_CallFunctionVIIIIP(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIIIP%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIIIP#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIIIP(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIIIP%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIIIP#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIIIP(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIIIP%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIIIP#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFIIP(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFIIP%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFIIP#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFIIP(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFIIP%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFIIP#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFIIP(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFIIP%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFIIP#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPIIP(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPIIP%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPIIP#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPIIP(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPIIP%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPIIP#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPIIP(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPIIP%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPIIP#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIFIP(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIFIP%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIFIP#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIFIP(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIFIP%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIFIP#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIFIP(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIFIP%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIFIP#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFFIP(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFFIP%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFFIP#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFFIP(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFFIP%(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFFIP#(fpFunctionPointer%, Float1#, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFFIP(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFFIP%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFFIP#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPFIP(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPFIP%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPFIP#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPFIP(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPFIP%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPFIP#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPFIP(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPFIP%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPFIP#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIPIP(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIPIP%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIPIP#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIPIP(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIPIP%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIPIP#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIPIP(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIPIP%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIPIP#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFPIP(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFPIP%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFPIP#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFPIP(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFPIP%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFPIP#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFPIP(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFPIP%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFPIP#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPPIP(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPPIP%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPPIP#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPPIP(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPPIP%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPPIP#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPPIP(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPPIP%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPPIP#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Integer4%, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIIFP(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIIFP%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIIFP#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIIFP(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIIFP%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIIFP#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIIFP(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIIFP%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIIFP#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFIFP(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFIFP%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFIFP#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFIFP(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFIFP%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFIFP#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFIFP(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFIFP%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFIFP#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPIFP(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPIFP%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPIFP#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPIFP(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPIFP%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPIFP#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPIFP(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPIFP%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPIFP#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIFFP(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIFFP%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIFFP#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIFFP(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIFFP%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIFFP#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIFFP(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIFFP%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIFFP#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFFFP(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFFFP%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFFFP#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFFFP(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFFFP%(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFFFP#(fpFunctionPointer%, Float1#, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFFFP(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFFFP%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFFFP#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPFFP(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPFFP%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPFFP#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPFFP(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPFFP%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPFFP#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPFFP(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPFFP%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPFFP#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIPFP(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIPFP%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIPFP#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIPFP(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIPFP%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIPFP#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIPFP(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIPFP%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIPFP#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFPFP(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFPFP%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFPFP#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFPFP(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFPFP%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFPFP#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFPFP(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFPFP%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFPFP#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPPFP(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPPFP%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPPFP#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPPFP(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPPFP%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPPFP#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPPFP(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPPFP%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPPFP#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Float4#, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIIPP(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIIPP%(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIIPP#(fpFunctionPointer%, Integer1%, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIIPP(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIIPP%(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIIPP#(fpFunctionPointer%, Float1#, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIIPP(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIIPP%(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIIPP#(fpFunctionPointer%, Pointer1*, Integer2%, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFIPP(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFIPP%(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFIPP#(fpFunctionPointer%, Integer1%, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFIPP(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFIPP%(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFIPP#(fpFunctionPointer%, Float1#, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFIPP(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFIPP%(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFIPP#(fpFunctionPointer%, Pointer1*, Float2#, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPIPP(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPIPP%(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPIPP#(fpFunctionPointer%, Integer1%, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPIPP(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPIPP%(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPIPP#(fpFunctionPointer%, Float1#, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPIPP(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPIPP%(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPIPP#(fpFunctionPointer%, Pointer1*, Pointer2*, Integer3%, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIFPP(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIFPP%(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIFPP#(fpFunctionPointer%, Integer1%, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIFPP(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIFPP%(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIFPP#(fpFunctionPointer%, Float1#, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIFPP(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIFPP%(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIFPP#(fpFunctionPointer%, Pointer1*, Integer2%, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFFPP(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFFPP%(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFFPP#(fpFunctionPointer%, Integer1%, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFFPP(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFFPP%(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFFPP#(fpFunctionPointer%, Float1#, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFFPP(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFFPP%(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFFPP#(fpFunctionPointer%, Pointer1*, Float2#, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPFPP(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPFPP%(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPFPP#(fpFunctionPointer%, Integer1%, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPFPP(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPFPP%(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPFPP#(fpFunctionPointer%, Float1#, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPFPP(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPFPP%(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPFPP#(fpFunctionPointer%, Pointer1*, Pointer2*, Float3#, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIIPPP(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIIPPP%(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIIPPP#(fpFunctionPointer%, Integer1%, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFIPPP(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFIPPP%(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFIPPP#(fpFunctionPointer%, Float1#, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPIPPP(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPIPPP%(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPIPPP#(fpFunctionPointer%, Pointer1*, Integer2%, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIFPPP(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIFPPP%(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIFPPP#(fpFunctionPointer%, Integer1%, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFFPPP(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFFPPP%(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFFPPP#(fpFunctionPointer%, Float1#, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPFPPP(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPFPPP%(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPFPPP#(fpFunctionPointer%, Pointer1*, Float2#, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVIPPPP(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIIPPPP%(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFIPPPP#(fpFunctionPointer%, Integer1%, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVFPPPP(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIFPPPP%(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFFPPPP#(fpFunctionPointer%, Float1#, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionVPPPPP(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionIPPPPP%(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" +BP_CallFunctionFPPPPP#(fpFunctionPointer%, Pointer1*, Pointer2*, Pointer3*, Pointer4*, Pointer5*): "BP_CallFunction5" diff --git a/#Test/userlibs/BlitzPointer.dll b/#Test/userlibs/BlitzPointer.dll new file mode 100644 index 0000000..8276f2a Binary files /dev/null and b/#Test/userlibs/BlitzPointer.dll differ diff --git a/#Test/userlibs/BlitzSteam.decls b/#Test/userlibs/BlitzSteam.decls new file mode 100644 index 0000000..032af34 --- /dev/null +++ b/#Test/userlibs/BlitzSteam.decls @@ -0,0 +1,23 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; Generic --------------------------------------------------------------------- +BS_Helper_FormatUnixTime$(unixTime%, pchFormat$) :"_BS_Helper_FormatUnixTime@8" +BS_Helper_CopyMemoryIntMangle(pSource%, pDest%, iMangling%, iSourceW%, iSourceH%, iDestW%, iDestH%, iAreaX%, iAreaY%, iAreaW%, iAreaH%):"_BS_Helper_CopyMemoryIntMangle@44" + +BS_BlitzPointer_GetReturnAddress%() :"_BS_BlitzPointer_GetReturnAddress@0" +BS_BlitzPointer_GetFunctionPointer%() :"_BS_BlitzPointer_GetFunctionPointer@0" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam.dll b/#Test/userlibs/BlitzSteam.dll new file mode 100644 index 0000000..4df3a21 Binary files /dev/null and b/#Test/userlibs/BlitzSteam.dll differ diff --git a/#Test/userlibs/BlitzSteam_CSteamID.decls b/#Test/userlibs/BlitzSteam_CSteamID.decls new file mode 100644 index 0000000..5aff58d --- /dev/null +++ b/#Test/userlibs/BlitzSteam_CSteamID.decls @@ -0,0 +1,55 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; CSteamID -------------------------------------------------------------------- +BS_CSteamID_New%() :"_BS_CSteamID_New@0" +BS_CSteamID_Copy%(pThis%) :"_BS_CSteamID_Copy@4" +BS_CSteamID_Destroy(pThis%) :"_BS_CSteamID_Destroy@4" +BS_CSteamID_New_IdUniverseType%(iAccountId%, EUniverse%, EAccountType%) :"_BS_CSteamID_New_IdUniverseType@12" +BS_CSteamID_New_IdInstanceUniverseType%(iAccountId%, iInstance%, EUniverse%, EAccountType%):"_BS_CSteamID_New_IdInstanceUniverseType@16" +BS_CSteamID_FromL%(pOther%) :"_BS_CSteamID_FromL@4" +BS_CSteamID_ToL%(pThis%) :"_BS_CSteamID_ToL@4" +BS_CSteamID_Set(pThis%, iAccountId%, EUniverse%, EAccountType%) :"_BS_CSteamID_Set@16" +BS_CSteamID_InstancedSet(pThis%, iAccountId%, iInstance%, EUniverse%, EAccountType%):"_BS_CSteamID_InstancedSet@20" +BS_CSteamID_FullSet(pThis%, plIdentifier%, EUniverse%, EAccountType%) :"_BS_CSteamID_FullSet@16" +BS_CSteamID_SetFromLong(pthis%, plSteamID%) :"_BS_CSteamID_SetFromLong@8" +BS_CSteamID_Clear(pThis%) :"_BS_CSteamID_Clear@4" +BS_CSteamID_GetStaticAccountKey%(pThis%) :"_BS_CSteamID_GetStaticAccountKey@4" +BS_CSteamID_CreateBlankAnonLogon(pThis%, EUniverse%) :"_BS_CSteamID_CreateBlankAnonLogon@8" +BS_CSteamID_CreateBlankAnonUserLogon(pThis%, EUniverse%) :"_BS_CSteamID_CreateBlankAnonUserLogon@8" +BS_CSteamID_IsBlankAnonAccount%(pThis%) :"_BS_CSteamID_IsBlankAnonAccount@4" +BS_CSteamID_IsGameServerAccount%(pThis%) :"_BS_CSteamID_IsGameServerAccount@4" +BS_CSteamID_IsPersistentGameServerAccount%(pThis%) :"_BS_CSteamID_IsPersistentGameServerAccount@4" +BS_CSteamID_IsAnonGameServerAccount%(pThis%) :"_BS_CSteamID_IsAnonGameServerAccount@4" +BS_CSteamID_IsContentServerAccount%(pThis%) :"_BS_CSteamID_IsContentServerAccount@4" +BS_CSteamID_IsClanAccount%(pThis%) :"_BS_CSteamID_IsClanAccount@4" +BS_CSteamID_IsChatAccount%(pThis%) :"_BS_CSteamID_IsChatAccount@4" +BS_CSteamID_IsLobby%(pThis%) :"_BS_CSteamID_IsLobby@4" +BS_CSteamID_IsIndividualAccount%(pThis%) :"_BS_CSteamID_IsIndividualAccount@4" +BS_CSteamID_IsAnonAccount%(pThis%) :"_BS_CSteamID_IsAnonAccount@4" +BS_CSteamID_IsAnonUserAccount%(pThis%) :"_BS_CSteamID_IsAnonUserAccount@4" +BS_CSteamID_IsConsoleUserAccount%(pThis%) :"_BS_CSteamID_IsConsoleUserAccount@4" +BS_CSteamID_SetAccountID(pThis%, iAccountId%) :"_BS_CSteamID_SetAccountID@8" +BS_CSteamID_GetAccountID%(pThis%) :"_BS_CSteamID_GetAccountID@4" +BS_CSteamID_SetAccountInstance(pThis%, iInstance%) :"_BS_CSteamID_SetAccountInstance@8" +BS_CSteamID_ClearIndividualInstance(pThis%) :"_BS_CSteamID_ClearIndividualInstance@4" +BS_CSteamID_HasNoIndividualInstance%(pThis%) :"_BS_CSteamID_HasNoIndividualInstance@4" +BS_CSteamID_GetAccountInstance%(pThis%) :"_BS_CSteamID_GetAccountInstance@4" +BS_CSteamID_GetEAccountType%(pThis%) :"_BS_CSteamID_GetEAccountType@4" +BS_CSteamID_SetEUniverse%(pThis%, EUniverse%) :"_BS_CSteamID_SetEUniverse@8" +BS_CSteamID_GetEUniverse%(pThis%) :"_BS_CSteamID_GetEUniverse@4" +BS_CSteamID_Compare%(pThis%, pOther%) :"_BS_CSteamID_Compare@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_Callback.decls b/#Test/userlibs/BlitzSteam_Callback.decls new file mode 100644 index 0000000..ff20199 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_Callback.decls @@ -0,0 +1,33 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; BlitzCallback --------------------------------------------------------------- +BS_Callback_New%(pFunction%) :"_BS_Callback_New@4" +BS_Callback_Destroy(pThis%) :"_BS_Callback_Destroy@4" +BS_Callback_GetCallbackSizeBytes%(pThis%) :"_BS_Callback_GetCallbackSizeBytes@4" +BS_Callback_SetCallback(pThis%, iCallback%) :"_BS_Callback_SetCallback@8" +BS_Callback_GetCallback%(pThis%) :"_BS_Callback_GetCallback@4" +BS_Callback_SetFunction(pThis%, pFunction%) :"_BS_Callback_SetFunction@8" +BS_Callback_GetFunction%(pThis%) :"_BS_Callback_GetFunction@4" +BS_Callback_SetRegistered(pThis%, bIsRegistered%) :"_BS_Callback_SetRegistered@8" +BS_Callback_IsRegistered%(pThis%) :"_BS_Callback_IsRegistered@4" +BS_Callback_SetGameServer(pThis%, bIsGameServer%) :"_BS_Callback_SetGameServer@8" +BS_Callback_IsGameServer%(pThis%) :"_BS_Callback_IsGameServer@4" +BS_Callback_Register(pThis%, iCallback%) :"_BS_Callback_Register@8" +BS_Callback_Unregister(pThis%) :"_BS_Callback_Unregister@4" +BS_Callback_RegisterResult(pThis%, lSteamAPICall%, iCallback%) :"_BS_Callback_RegisterResult@12" +BS_Callback_UnregisterResult(pThis%) :"_BS_Callback_UnregisterResult@4" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_Double.decls b/#Test/userlibs/BlitzSteam_Double.decls new file mode 100644 index 0000000..f2d0bce --- /dev/null +++ b/#Test/userlibs/BlitzSteam_Double.decls @@ -0,0 +1,42 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; aDouble with this program. If not, see . + +.lib "BlitzSteam.dll" +; Double ------------------------------------------------------------------------ +BS_Double_New%() :"_BS_Double_New@0" +BS_Double_Copy%(pThis%) :"_BS_Double_Copy@4" +BS_Double_Destroy(pThis%) :"_BS_Double_Destroy@4" +BS_Double_ToString$(pThis%) :"_BS_Double_ToString@4" +BS_Double_FromString%(cString$) :"_BS_Double_FromString@4" +BS_Double_FromF%(Float#) :"_BS_Double_FromF@4" +BS_Double_ToF#(pThis%) :"_BS_Double_ToF@4" +BS_Double_FromI%(iRight%) :"_BS_Double_FromI@4" +BS_Double_ToI%(pThis%) :"_BS_Double_ToI@8" +BS_Double_FromL(pDouble%) :"_BS_Double_FromL@4" +BS_Double_ToL(pThis%) :"_BS_Double_ToL@4" +BS_Double_Compare%(pThis%, pOther%) :"_BS_Double_Compare@8" +BS_Double_Set%(pThis%, pOther%) :"_BS_Double_Set@8" +BS_Double_Add%(pThis%, pOther%) :"_BS_Double_Add@8" +BS_Double_Sub%(pThis%, pOther%) :"_BS_Double_Sub@8" +BS_Double_Div%(pThis%, pOther%) :"_BS_Double_Div@8" +BS_Double_Mul%(pThis%, pOther%) :"_BS_Double_Mul@8" +BS_Double_Mod%(pThis%, pOther%) :"_BS_Double_Mod@8" +BS_Double_SetF%(pThis%, fOther%) :"_BS_Double_SetF@8" +BS_Double_AddF%(pThis%, fOther%) :"_BS_Double_AddF@8" +BS_Double_SubF%(pThis%, fOther%) :"_BS_Double_SubF@8" +BS_Double_DivF%(pThis%, fOther%) :"_BS_Double_DivF@8" +BS_Double_MulF%(pThis%, fOther%) :"_BS_Double_MulF@8" +BS_Double_ModF%(pThis%, fOther%) :"_BS_Double_ModF@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_Long.decls b/#Test/userlibs/BlitzSteam_Long.decls new file mode 100644 index 0000000..f227374 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_Long.decls @@ -0,0 +1,52 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; Long ------------------------------------------------------------------------ +BS_Long_New%() :"_BS_Long_New@0" +BS_Long_Copy%(pThis%) :"_BS_Long_Copy@4" +BS_Long_Destroy(pThis%) :"_BS_Long_Destroy@4" +BS_Long_ToString$(pThis%) :"_BS_Long_ToString@4" +BS_Long_FromString%(cString$) :"_BS_Long_FromString@4" +BS_Long_FromI%(iRight%) :"_BS_Long_FromI@4" +BS_Long_FromII%(iLeft%, iRight%) :"_BS_Long_FromII@8" +BS_Long_ToI%(pThis%, iShift%) :"_BS_Long_ToI@8" +BS_Long_ToIH%(pThis%) :"_BS_Long_ToIH@4" +BS_Long_ToIL%(pThis%) :"_BS_Long_ToIL@4" +BS_Long_FromF%(Float#) :"_BS_Long_FromF@4" +BS_Long_ToF#(pThis%) :"_BS_Long_ToF@4" +BS_Long_FromD(pDouble%) :"_BS_Long_FromD@4" +BS_Long_ToD(pThis%) :"_BS_Long_ToD@4" +BS_Long_Compare%(pThis%, pRight%) :"_BS_Long_Compare@8" +BS_Long_Set%(pThis%, pOther%) :"_BS_Long_Set@8" +BS_Long_Add%(pThis%, pOther%) :"_BS_Long_Add@8" +BS_Long_Sub%(pThis%, pOther%) :"_BS_Long_Sub@8" +BS_Long_Div%(pThis%, pOther%) :"_BS_Long_Div@8" +BS_Long_Mul%(pThis%, pOther%) :"_BS_Long_Mul@8" +BS_Long_Mod%(pThis%, pOther%) :"_BS_Long_Mod@8" +BS_Long_SetI%(pThis%, iRight%) :"_BS_Long_SetI@8" +BS_Long_AddI%(pThis%, iRight%) :"_BS_Long_AddI@8" +BS_Long_SubI%(pThis%, iRight%) :"_BS_Long_SubI@8" +BS_Long_DivI%(pThis%, iRight%) :"_BS_Long_DivI@8" +BS_Long_MulI%(pThis%, iRight%) :"_BS_Long_MulI@8" +BS_Long_ModI%(pThis%, iRight%) :"_BS_Long_ModI@8" +BS_Long_SetII%(pThis%, iLeft%, iRight%) :"_BS_Long_SetII@12" +BS_Long_AddII%(pThis%, iLeft%, iRight%) :"_BS_Long_AddII@12" +BS_Long_SubII%(pThis%, iLeft%, iRight%) :"_BS_Long_SubII@12" +BS_Long_DivII%(pThis%, iLeft%, iRight%) :"_BS_Long_DivII@12" +BS_Long_MulII%(pThis%, iLeft%, iRight%) :"_BS_Long_MulII@12" +BS_Long_ModII%(pThis%, iLeft%, iRight%) :"_BS_Long_ModII@12" +BS_Long_Shift%(pThis%, iRight%) :"_BS_Long_Shift@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_Memory.decls b/#Test/userlibs/BlitzSteam_Memory.decls new file mode 100644 index 0000000..8db029f --- /dev/null +++ b/#Test/userlibs/BlitzSteam_Memory.decls @@ -0,0 +1,33 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; Memory ---------------------------------------------------------------------- +BS_Memory_Alloc%(iSize%) :"_BS_Memory_Alloc@4" +BS_Memory_ReAlloc%(pMemory%, iSize%) :"_BS_Memory_ReAlloc@8" +BS_Memory_Free(pMemory%) :"_BS_Memory_Free@4" +BS_Memory_PokeByte(pMemory%, iOffset%, bValue%) :"_BS_Memory_PokeByte@12" +BS_Memory_PeekByte%(pMemory%, iOffset%) :"_BS_Memory_PeekByte@8" +BS_Memory_PokeShort(pMemory%, iOffset%, sValue%) :"_BS_Memory_PokeShort@12" +BS_Memory_PeekShort%(pMemory%, iOffset%) :"_BS_Memory_PeekShort@8" +BS_Memory_PokeInt(pMemory%, iOffset%, iValue%) :"_BS_Memory_PokeInt@12" +BS_Memory_PeekInt%(pMemory%, iOffset%) :"_BS_Memory_PeekInt@8" +BS_Memory_PokeFloat(pMemory%, iOffset%, fValue#) :"_BS_Memory_PokeFloat@12" +BS_Memory_PeekFloat#(pMemory%, iOffset%) :"_BS_Memory_PeekFloat@8" +BS_Memory_PokeLong(pMemory%, iOffset%, lValue%) :"_BS_Memory_PokeLong@12" +BS_Memory_PeekLong%(pMemory%, iOffset%) :"_BS_Memory_PeekLong@8" +BS_Memory_PokeDouble(pMemory%, iOffset%, dValue%) :"_BS_Memory_PokeDouble@12" +BS_Memory_PeekDouble%(pMemory%, iOffset%) :"_BS_Memory_PeekDouble@8" diff --git a/#Test/userlibs/BlitzSteam_Steam.decls b/#Test/userlibs/BlitzSteam_Steam.decls new file mode 100644 index 0000000..75e0ab3 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_Steam.decls @@ -0,0 +1,28 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Steam ----------------------------------------------------------------------- +BS_SteamAPI_Init%() :"_BS_SteamAPI_Init@0" +BS_SteamAPI_Shutdown() :"_BS_SteamAPI_Shutdown@0" +BS_SteamAPI_IsSteamRunning%() :"_BS_SteamAPI_IsSteamRunning@0" +BS_SteamAPI_RestartAppIfNecessary%(iAppId%) :"_BS_SteamAPI_RestartAppIfNecessary@4" +BS_SteamAPI_SetMiniDumpComment(cComment$) :"_BS_SteamAPI_SetMiniDumpComment@4" +BS_SteamAPI_WriteMiniDump(iExceptionCode%, pExceptionInfo*, iBuildId%) :"_BS_SteamAPI_WriteMiniDump@12" +BS_SteamAPI_WriteMiniDumpEx(iExceptionCode%, pExceptionInfo%, iBuildId%) :"_BS_SteamAPI_WriteMiniDump@12" +BS_SteamAPI_ReleaseCurrentThreadMemory%() :"_BS_SteamAPI_ReleaseCurrentThreadMemory@0" +BS_SteamAPI_RunCallbacks() :"_BS_SteamAPI_RunCallbacks@0" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamAppList.decls b/#Test/userlibs/BlitzSteam_SteamAppList.decls new file mode 100644 index 0000000..65f99fb --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamAppList.decls @@ -0,0 +1,28 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; AppList --------------------------------------------------------------------- +BS_SteamAppList%() :"_BS_SteamAppList@0" +BS_ISteamAppList_GetNumInstalledApps%(pThis%) :"_BS_ISteamAppList_GetNumInstalledApps@4" +BS_ISteamAppList_GetInstalledApps%(pThis%, pAppIdBuffer*, iMaxIDs%) :"_BS_ISteamAppList_GetInstalledApps@12" +BS_ISteamAppList_GetInstalledAppsEx%(pThis%, pAppIdBuffer%, iMaxIDs%) :"_BS_ISteamAppList_GetInstalledApps@12" +BS_ISteamAppList_GetAppName%(pThis%, iAppId%, pNameBuffer*, iNameMax%) :"_BS_ISteamAppList_GetAppName@12" +BS_ISteamAppList_GetAppNameEx%(pThis%, iAppId%, pNameBuffer%, iNameMax%) :"_BS_ISteamAppList_GetAppName@12" +BS_ISteamAppList_GetAppInstallDir%(pThis%, iAppId%, pPathBuffer*, iPathMax%) :"_BS_ISteamAppList_GetAppInstallDir@16" +BS_ISteamAppList_GetAppInstallDirEx%(pThis%, iAppId%, pPathBuffer%, iPathMax%) :"_BS_ISteamAppList_GetAppInstallDir@16" +BS_ISteamAppList_GetAppBuildId%(pThis%, iAppId%) :"_BS_ISteamAppList_GetAppBuildId@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamApps.decls b/#Test/userlibs/BlitzSteam_SteamApps.decls new file mode 100644 index 0000000..fc5d46d --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamApps.decls @@ -0,0 +1,49 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Apps ------------------------------------------------------------------------ +BS_SteamApps%() :"_BS_SteamApps@0" +BS_ISteamApps_IsSubscribed%(pThis%) :"_BS_ISteamApps_IsSubscribed@4" +BS_ISteamApps_IsLowViolence%(pThis%) :"_BS_ISteamApps_IsLowViolence@4" +BS_ISteamApps_IsCybercafe%(pThis%) :"_BS_ISteamApps_IsCybercafe@4" +BS_ISteamApps_IsVACBanned%(pThis%) :"_BS_ISteamApps_IsVACBanned@4" +BS_ISteamApps_GetCurrentGameLanguage$(pThis%) :"_BS_ISteamApps_GetCurrentGameLanguage@4" +BS_ISteamApps_GetAvailableGameLanguages$(pThis%) :"_BS_ISteamApps_GetAvailableGameLanguages@4" +BS_ISteamApps_IsSubscribedApp%(pThis%, iAppId%) :"_BS_ISteamApps_IsSubscribedApp@8" +BS_ISteamApps_IsDlcInstalled%(pThis%, iAppId%) :"_BS_ISteamApps_IsDlcInstalled@8" +BS_ISteamApps_GetEarliestPurchaseUnixTime%(pThis%, iAppId%) :"_BS_ISteamApps_GetEarliestPurchaseUnixTime@8" +BS_ISteamApps_IsSubscribedFromFreeWeekend%(pThis%) :"_BS_ISteamApps_IsSubscribedFromFreeWeekend@4" +BS_ISteamApps_GetDLCCount%(pThis%) :"_BS_ISteamApps_GetDLCCount@4" +BS_ISteamApps_GetDLCDataByIndex%(pThis%, iDLC%, pAppId*, pAvailable*, pName*, iNameSize%):"_BS_ISteamApps_GetDLCDataByIndex@24" +BS_ISteamApps_GetDLCDataByIndexEx%(pThis%, iDLC%, pAppId%, pAvailable%, pName%, iNameSize%):"_BS_ISteamApps_GetDLCDataByIndex@24" +BS_ISteamApps_InstallDLC(pThis%, iAppId%) :"_BS_ISteamApps_InstallDLC@8" +BS_ISteamApps_UninstallDLC(pThis%, iAppId%) :"_BS_ISteamApps_UninstallDLC@8" +BS_ISteamApps_RequestAppProofOfPurchaseKey(pThis%, iAppId%) :"_BS_ISteamApps_RequestAppProofOfPurchaseKey@8" +BS_ISteamApps_GetCurrentBetaName%(pThis%, pName*, iNameSize%) :"_BS_ISteamApps_GetCurrentBetaName@12" +BS_ISteamApps_GetCurrentBetaNameEx%(pThis%, pName%, iNameSize%) :"_BS_ISteamApps_GetCurrentBetaName@12" +BS_ISteamApps_MarkContentCorrupt%(pThis%, bMissingFilesOnly%) :"_BS_ISteamApps_MarkContentCorrupt@8" +BS_ISteamApps_GetInstalledDepots%(pThis%, iAppId%, pDepots*, iMaxDepots%) :"_BS_ISteamApps_GetInstalledDepots@16" +BS_ISteamApps_GetInstalledDepotsEx%(pThis%, iAppId%, pDepots%, iMaxDepots%) :"_BS_ISteamApps_GetInstalledDepots@16" +BS_ISteamApps_GetAppInstallDir%(pThis%, iAppId%, pPathBuffer*, iPathBufferSize%):"_BS_ISteamApps_GetAppInstallDir@16" +BS_ISteamApps_GetAppInstallDirEx%(pThis%, iAppId%, pPathBuffer%, iPathBufferSize%):"_BS_ISteamApps_GetAppInstallDir@16" +BS_ISteamApps_IsAppInstalled%(pThis%, iAppId%) :"_BS_ISteamApps_IsAppInstalled@8" +BS_ISteamApps_GetAppOwner%(pThis%) :"_BS_ISteamApps_GetAppOwner@4" +BS_ISteamApps_GetLaunchQueryParam$(pThis%, cKey$) :"_BS_ISteamApps_GetLaunchQueryParam@8" +BS_ISteamApps_GetDlcDownloadProgress%(pThis%, iAppId%, llDownloaded*, llTotal*) :"_BS_ISteamApps_GetDlcDownloadProgress@16" +BS_ISteamApps_GetDlcDownloadProgressEx%(pThis%, iAppId%, llDownloaded%, llTotal%):"_BS_ISteamApps_GetDlcDownloadProgress@16" +BS_ISteamApps_GetAppBuildId%(pThis%) :"_BS_ISteamApps_GetAppBuildId@4" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamClient.decls b/#Test/userlibs/BlitzSteam_SteamClient.decls new file mode 100644 index 0000000..b541e80 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamClient.decls @@ -0,0 +1,51 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Client ---------------------------------------------------------------------- +BS_SteamClient%() :"_BS_SteamClient@0" +BS_ISteamClient_CreateSteamPipe%(pThis%) :"_BS_ISteamClient_CreateSteamPipe@4" +BS_ISteamClient_ReleaseSteamPipe%(pThis%, hPipe%) :"_BS_ISteamClient_ReleaseSteamPipe@8" +BS_ISteamClient_ConnectToGlobalUser%(pThis%, hPipe%) :"_BS_ISteamClient_ConnectToGlobalUser@8" +BS_ISteamClient_SetLocalIPBinding(pThis, unIP%, usPort%) :"_BS_ISteamClient_SetLocalIPBinding@12" +BS_ISteamClient_CreateLocalUser%(pThis%, pSteamPipe%, EAccountType%) :"_BS_ISteamClient_CreateLocalUser@12" +BS_ISteamClient_ReleaseUser(pThis%, hPipe%, hUser%) :"_BS_ISteamClient_ReleaseUser@12" +BS_ISteamClient_GetIPCCallCount%(pThis%) :"_BS_ISteamClient_GetIPCCallCount@4" +BS_ISteamClient_ShutdownIfAllPipesClosed%(pThis%) :"_BS_ISteamClient_ShutdownIfAllPipesClosed@4" +BS_ISteamClient_GetSteamAppList%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamAppList@16" +BS_ISteamClient_GetSteamApps%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamApps@16" +BS_ISteamClient_GetSteamController%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamController@16" +BS_ISteamClient_GetSteamFriends%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamFriends@16" +BS_ISteamClient_GetSteamGameServer%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamGameServer@16" +BS_ISteamClient_GetSteamGameServerStats%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamGameServerStats@16" +BS_ISteamClient_GetSteamHTMLSurface%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamHTMLSurface@16" +BS_ISteamClient_GetSteamHTTP%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamHTTP@16" +BS_ISteamClient_GetSteamInventory%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamInventory@16" +BS_ISteamClient_GetSteamMatchmaking%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamMatchmaking@16" +BS_ISteamClient_GetSteamMatchmakingServers%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamMatchmakingServers@16" +BS_ISteamClient_GetSteamMusic%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamMusic@16" +BS_ISteamClient_GetSteamMusicRemote%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamMusicRemote@16" +BS_ISteamClient_GetSteamNetworking%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamNetworking@16" +BS_ISteamClient_GetSteamRemoteStorage%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamRemoteStorage@16" +BS_ISteamClient_GetSteamScreenshots%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamScreenshots@16" +BS_ISteamClient_GetSteamUGC%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamUGC@16" +BS_ISteamClient_GetSteamUnifiedMessages%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamUnifiedMessages@16" +BS_ISteamClient_GetSteamUser%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamUser@16" +BS_ISteamClient_GetSteamUserStats%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamUserStats@16" +BS_ISteamClient_GetSteamUtils%(pThis%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamUtils@12" +BS_ISteamClient_GetSteamVideo%(pThis%, hUser%, hPipe%, cVersion$) :"_BS_ISteamClient_GetSteamVideo@16" +BS_ISteamClient_SetWarningMessageHook(pThis%, pFunction%) :"_BS_ISteamClient_SetWarningMessageHook@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamController.decls b/#Test/userlibs/BlitzSteam_SteamController.decls new file mode 100644 index 0000000..fb955d7 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamController.decls @@ -0,0 +1,48 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Controller ------------------------------------------------------------------ +BS_SteamController%() :"_BS_SteamController@0" +BS_SteamController_Init%(pThis%, cControlConfigVDF$) :"_BS_ISteamController_Init@8" +BS_ISteamController_Shutdown%(pThis%) :"_BS_ISteamController_Shutdown@4" +BS_ISteamController_RunFrame(pThis%) :"_BS_ISteamController_RunFrame@4" +BS_ISteamController_GetConnectedControllers%(pThis%, pHandles*) :"_BS_ISteamController_GetConnectedControllers@8" +BS_ISteamController_GetConnectedControllersEx%(pThis%, pHandles%) :"_BS_ISteamController_GetConnectedControllers@8" +BS_ISteamController_GetConnectedControllersSimple%(pThis%) :"_BS_ISteamController_GetConnectedControllersSimple@4" +BS_ISteamController_GetConnectedControllersSimple_Index%(iIndex%) :"_BS_ISteamController_GetConnectedControllersSimple@4" +BS_ISteamController_ShowBindingPanel%(pThis%, pController%) :"_BS_ISteamController_ShowBindingPanel@8" +BS_ISteamController_GetActionSetHandle%(pThis%, cSetName$) :"_BS_ISteamController_GetActionSetHandle@8" +;! Returns: ControllerActionSetHandle_t*. Clean Up! +BS_ISteamController_ActivateActionSet(pThis%, pController%, pActionSet%) :"_BS_ISteamController_ActivateActionSet@12" +BS_ISteamController_GetCurrentActionSet%(pThis%, pController%) :"_BS_ISteamController_GetCurrentActionSet@8" +;! Returns: ControllerActionSetHandle_t*. Clean Up! +BS_ISteamController_GetDigitalActionHandle%(pThis%, cName$) :"_BS_ISteamController_GetDigitalActionHandle@8" +;! Returns: ControllerDigitalActionHandle_t*. Clean Up! +BS_ISteamController_GetDigitalActionData%(pThis%, pController%, pDigital%) :"_BS_ISteamController_GetDigitalActionData@12" +;! Returns: ControllerDigitalActionData_t*. Clean Up! +BS_ISteamController_GetDigitalActionOrigins%(pThis%, pController%, pActionSet%, pDigital%, pEControllerActionOrigin*):"_BS_ISteamController_GetDigitalActionOrigins@20" +BS_ISteamController_GetDigitalActionOriginsEx%(pThis%, pController%, pActionSet%, pDigital%, pEControllerActionOrigin%):"_BS_ISteamController_GetDigitalActionOrigins@20" +BS_ISteamController_GetAnalogActionHandle%(pThis%, cName$) :"_BS_ISteamController_GetAnalogActionHandle@8" +;! Returns: ControllerAnalogActionHandle_t*. Clean Up! +BS_ISteamController_GetAnalogActionData%(pThis%, pController%, pAnalog%) :"_BS_ISteamController_GetAnalogActionData@12" +;! Returns: ControllerAnalogActionData_t*. Clean Up! +BS_ISteamController_GetAnalogActionOrigins%(pThis%, pController%, pActionSet%, pAnalog%, pEControllerActionOrigin*):"_BS_ISteamController_GetAnalogActionOrigins@20" +BS_ISteamController_GetAnalogActionOriginsEx%(pThis%, pController%, pActionSet%, pAnalog%, pEControllerActionOrigin*):"_BS_ISteamController_GetAnalogActionOrigins@20" +BS_ISteamController_StopAnalogActionMomentum(pThis%, pController%, pAnalog%):"_BS_ISteamController_StopAnalogActionMomentum@12" +BS_ISteamController_TriggerHapticPulse(pThis%, pController%, ESteamControllerPad%, iDuration%):"_BS_ISteamController_TriggerHapticPulse@16" +BS_ISteamController_TriggerRepeatedHapticPulse(pThis%, pController%, ESteamControllerPad%, iDuration%, iOffDuration%, iRepeats%, iFlags%):"_BS_ISteamController_TriggerRepeatedHapticPulse@28" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamFriends.decls b/#Test/userlibs/BlitzSteam_SteamFriends.decls new file mode 100644 index 0000000..1893a5e --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamFriends.decls @@ -0,0 +1,104 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Friends --------------------------------------------------------------------- +BS_SteamFriends%() :"_BS_SteamFriends@0" +BS_ISteamFriends_GetPersonaName$(pThis%) :"_BS_ISteamFriends_GetPersonaName@4" +BS_ISteamFriends_SetPersonaName%(pThis%, cPersonaName$) :"_BS_ISteamFriends_SetPersonaName@8" +;! Returns: SteamAPICall_t*. Clean Up! +BS_ISteamFriends_GetPersonaState%(pThis%) :"_BS_ISteamFriends_GetPersonaState@4" +BS_ISteamFriends_GetFriendCount%(pThis%, EFriendFlags%) :"_BS_ISteamFriends_GetFriendCount@8" +BS_ISteamFriends_GetFriendByIndex%(pThis%, iFriend%, EFriendFlags%) :"_BS_ISteamFriends_GetFriendByIndex@12" +;! Returns: CSteamID*. Clean Up! +BS_ISteamFriends_GetFriendRelationship%(pThis%, pllFriend%) :"_BS_ISteamFriends_GetFriendRelationship@8" +BS_ISteamFriends_GetFriendPersonaState%(pThis%, pllFriend%) :"_BS_ISteamFriends_GetFriendPersonaState@8" +BS_ISteamFriends_GetFriendPersonaName$(pThis%, pllFriend%) :"_BS_ISteamFriends_GetFriendPersonaName@8" +BS_ISteamFriends_GetFriendGamePlayed%(pThis%, pllFriend%, pFriendGameInfo*) :"_BS_ISteamFriends_GetFriendGamePlayed@12" +BS_ISteamFriends_GetFriendGamePlayedEx%(pThis%, pllFriend%, pFriendGameInfo%) :"_BS_ISteamFriends_GetFriendGamePlayed@12" +BS_ISteamFriends_GetFriendPersonaNameHistory$(pThis%, pllFriend%, iDepth%) :"_BS_ISteamFriends_GetFriendPersonaNameHistory@12" +BS_ISteamFriends_GetFriendSteamLevel%(pThis%, pllFriend%) :"_BS_ISteamFriends_GetFriendSteamLevel@8" +BS_ISteamFriends_GetPlayerNickname$(pThis%, pllFriend%) :"_BS_ISteamFriends_GetPlayerNickname@8" +BS_ISteamFriends_GetFriendsGroupCount%(pThis%) :"_BS_ISteamFriends_GetFriendsGroupCount@4" +BS_ISteamFriends_GetFriendsGroupIDByIndex%(pThis%, iIndex%) :"_BS_ISteamFriends_GetFriendsGroupIDByIndex@8" +BS_ISteamFriends_GetFriendsGroupName$(pThis%, iGroupID%) :"_BS_ISteamFriends_GetFriendsGroupName@8" +BS_ISteamFriends_GetFriendsGroupMembersCount%(pThis%, iGroupID%) :"_BS_ISteamFriends_GetFriendsGroupMembersCount@8" +BS_ISteamFriends_GetFriendsGroupMembersList(pThis%, iGroupID%, pllMembers*, nMembersCount%):"_BS_ISteamFriends_GetFriendsGroupMembersList@16" +BS_ISteamFriends_GetFriendsGroupMembersListEx(pThis%, iGroupID%, pllMembers%, nMembersCount%):"_BS_ISteamFriends_GetFriendsGroupMembersList@16" +BS_ISteamFriends_HasFriend(pThis%, pllFriend%, EFriendFlags%) :"_BS_ISteamFriends_HasFriend@12" +BS_ISteamFriends_GetClanCount%(pThis%) :"_BS_ISteamFriends_GetClanCount@4" +BS_ISteamFriends_GetClanByIndex%(pThis%, iClan%) :"_BS_ISteamFriends_GetClanByIndex@8" +BS_ISteamFriends_GetClanName$(pThis%, llClanID%) :"_BS_ISteamFriends_GetClanName@8" +BS_ISteamFriends_GetClanTag$(pThis%, llClanID%) :"_BS_ISteamFriends_GetClanTag@8" +BS_ISteamFriends_GetClanActivityCounts%(pThis%, llClanID%, pnOnline*, pnInGame*, pnChatting*):"_BS_ISteamFriends_GetClanActivityCounts@20" +BS_ISteamFriends_GetClanActivityCountsEx%(pThis%, llClanID%, pnOnline%, pnInGame%, pnChatting%):"_BS_ISteamFriends_GetClanActivityCounts@20" +BS_ISteamFriends_DownloadClanActivityCounts%(pThis%, llClanID%, cClansToRequest%):"_BS_ISteamFriends_DownloadClanActivityCounts@12" +BS_ISteamFriends_GetFriendCountFromSource%(pThis%, llSourceID%) :"_BS_ISteamFriends_GetFriendCountFromSource@8" +BS_ISteamFriends_GetFriendFromSourceByIndex%(pThis%, llSourceID%, iFriend%) :"_BS_ISteamFriends_GetFriendFromSourceByIndex@12" +BS_ISteamFriends_IsUserInSource%(pThis%, llSteamID%, llSourceID%) :"_BS_ISteamFriends_IsUserInSource@12" +BS_ISteamFriends_SetInGameVoiceSpeaking(pThis%, llSteamID%, bSpeaking%) :"_BS_ISteamFriends_SetInGameVoiceSpeaking@12" +BS_ISteamFriends_ActivateGameOverlay(pThis%, cDialog$) :"_BS_ISteamFriends_ActivateGameOverlay@8" +BS_ISteamFriends_ActivateGameOverlayToUser(pThis%, cDialog$, llSteamID%) :"_BS_ISteamFriends_ActivateGameOverlayToUser@12" +BS_ISteamFriends_ActivateGameOverlayToWebPage(pThis%, cURL$) :"_BS_ISteamFriends_ActivateGameOverlayToWebPage@8" +BS_ISteamFriends_ActivateGameOverlayToStore(pThis%, nAppID%, EOverlayToStoreFlag%):"_BS_ISteamFriends_ActivateGameOverlayToStore@12" +BS_ISteamFriends_SetPlayedWith(pThis%, llSteamID%) :"_BS_ISteamFriends_SetPlayedWith@8" +BS_ISteamFriends_ActivateGameOverlayInviteDialog(pThis%, llLobbyID%) :"_BS_ISteamFriends_ActivateGameOverlayInviteDialog@8" +BS_ISteamFriends_GetSmallFriendAvatar%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetSmallFriendAvatar@8" +BS_ISteamFriends_GetMediumFriendAvatar%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetMediumFriendAvatar@8" +BS_ISteamFriends_GetLargeFriendAvatar%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetLargeFriendAvatar@8" +BS_ISteamFriends_RequestUserInformation%(pThis%, llSteamID%, bNameOnly%) :"_BS_ISteamFriends_RequestUserInformation@12" +BS_ISteamFriends_RequestClanOfficerList%(pThis%, llClanID%) :"_BS_ISteamFriends_RequestClanOfficerList@8" +BS_ISteamFriends_GetClanOwner%(pThis%, llClanID%) :"_BS_ISteamFriends_GetClanOwner@8" +BS_ISteamFriends_GetClanOfficerCount%(pThis%, llClanID%) :"_BS_ISteamFriends_GetClanOfficerCount@8" +BS_ISteamFriends_GetClanOfficerByIndex%(pThis%, llClanID%, iOfficer%) :"_BS_ISteamFriends_GetClanOfficerByIndex@12" +;! Returns: CSteamID*. Clean Up! +BS_ISteamFriends_GetUserRestrictions%(pThis%) :"_BS_ISteamFriends_GetUserRestrictions@4" +BS_ISteamFriends_SetRichPresence%(pThis%, cKey$, cValue$) :"_BS_ISteamFriends_SetRichPresence@12" +BS_ISteamFriends_ClearRichPresence(pThis%) :"_BS_ISteamFriends_ClearRichPresence@4" +BS_ISteamFriends_GetFriendRichPresence$(pThis%, llSteamID%, cKey$) :"_BS_ISteamFriends_GetFriendRichPresence@12" +BS_ISteamFriends_GetFriendRichPresenceKeyCount%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetFriendRichPresenceKeyCount@8" +BS_ISteamFriends_GetFriendRichPresenceKeyByIndex$(pThis%, llSteamID%, iKey%) :"_BS_ISteamFriends_GetFriendRichPresenceKeyByIndex@12" +BS_ISteamFriends_RequestFriendRichPresence(pThis%, llSteamID%) :"_BS_ISteamFriends_RequestFriendRichPresence@8" +BS_ISteamFriends_InviteUserToGame%(pThis%, llSteamID%, cConnectString%) :"_BS_ISteamFriends_InviteUserToGame@12" +BS_ISteamFriends_GetCoplayFriendCount%(pThis%) :"_BS_ISteamFriends_GetCoplayFriendCount@4" +BS_ISteamFriends_GetCoplayFriend%(pThis%, iCoplayFriend%) :"_BS_ISteamFriends_GetCoplayFriend@8" +;! Returns: CSteamID*. Clean Up! +BS_ISteamFriends_GetFriendCoplayTime%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetFriendCoplayTime@8" +BS_ISteamFriends_GetFriendCoplayGame%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetFriendCoplayGame@8" +BS_ISteamFriends_JoinClanChatRoom%(pThis%, llClanID%) :"_BS_ISteamFriends_JoinClanChatRoom@8" +;! Returns: SteamAPICall_t*. Clean Up! +BS_ISteamFriends_LeaveClanChatRoom%(pThis%, llClanID%) :"_BS_ISteamFriends_LeaveClanChatRoom@8" +BS_ISteamFriends_GetClanChatMemberCount%(pThis%, llClanID%) :"_BS_ISteamFriends_GetClanChatMemberCount@8" +BS_ISteamFriends_GetChatMemberByIndex%(pThis%, llClanID%, iUser%) :"_BS_ISteamFriends_GetChatMemberByIndex@12" +;! Returns: CSteamID*. Clean Up! +BS_ISteamFriends_SendClanChatMessage%(pThis%, llClanChatID%, cMessage$) :"_BS_ISteamFriends_SendClanChatMessage@12" +BS_ISteamFriends_GetClanChatMessage%(pThis%, llClanChatID%, iMessage%, pMessage*, iMessageSize%, pEChatEntryType*, pSteamID*):"_BS_ISteamFriends_GetClanChatMessage@28" +BS_ISteamFriends_GetClanChatMessageEx%(pThis%, llClanChatID%, iMessage%, pMessage%, iMessageSize%, peChatEntryType%, pSteamID%):"_BS_ISteamFriends_GetClanChatMessage@28" +BS_ISteamFriends_IsClanChatAdmin%(pThis%, llClanChatID%, llSteamID%) :"_BS_ISteamFriends_IsClanChatAdmin@12" +BS_ISteamFriends_IsClanChatWindowOpenInSteam%(pThis%, llClanChatID%) :"_BS_ISteamFriends_IsClanChatWindowOpenInSteam@8" +BS_ISteamFriends_OpenClanChatWindowInSteam%(pThis%, llClanChatID%) :"_BS_ISteamFriends_OpenClanChatWindowInSteam@8" +BS_ISteamFriends_CloseClanChatWindowInSteam%(pThis%, llClanChatID%) :"_BS_ISteamFriends_CloseClanChatWindowInSteam@8" +BS_ISteamFriends_SetListenForFriendsMessages%(pThis%, bInterceptEnabled%) :"_BS_ISteamFriends_SetListenForFriendsMessages@8" +BS_ISteamFriends_ReplyToFriendMessage%(pThis%, llSteamID%, cMessage$) :"_BS_ISteamFriends_ReplyToFriendMessage@12" +BS_ISteamFriends_GetFriendMessage%(pThis%, llSteamID%, iMessageID%, pData*, iDataSize%, pEChatEntryType*):"_BS_ISteamFriends_GetFriendMessage@24" +BS_ISteamFriends_GetFriendMessageEx%(pThis%, llSteamID%, iMessageID%, pData%, iDataSize%, pEChatEntryType%):"_BS_ISteamFriends_GetFriendMessage@24" +BS_ISteamFriends_GetFollowerCount%(pThis%, llSteamID%) :"_BS_ISteamFriends_GetFollowerCount@8" +;! Returns: SteamAPICall_t*. Clean Up! +BS_ISteamFriends_IsFollowing%(pThis%, llSteamID%) :"_BS_ISteamFriends_IsFollowing@8" +;! Returns: SteamAPICall_t*. Clean Up! +BS_ISteamFriends_EnumerateFollowingList%(pThis%, iStartIndex%) :"_BS_ISteamFriends_EnumerateFollowingList@8" +;! Returns: SteamAPICall_t*. Clean Up! \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamGameServer.decls b/#Test/userlibs/BlitzSteam_SteamGameServer.decls new file mode 100644 index 0000000..d91bf2c --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamGameServer.decls @@ -0,0 +1,77 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; GameServer ------------------------------------------------------------------ +BS_SteamGameServer_Init%(iIP%, sSteamPort%, sGamePort%, sQueryPort%, EServerMode%, cVersion$):"_BS_SteamGameServer_Init@24" +BS_SteamGameServer_Shutdown() :"_BS_SteamGameServer_Shutdown@0" +BS_SteamGameServer_RunCallbacks() :"_BS_SteamGameServer_RunCallbacks@0" +BS_SteamGameServer_GetHSteamPipe%() :"_BS_SteamGameServer_GetHSteamPipe@0" +BS_SteamGameServer_IsSecure%() :"_BS_SteamGameServer_IsSecure@0" +BS_SteamGameServer_GetSteamID%() :"_BS_SteamGameServer_GetSteamID@0" +;! Function above returns a CSteamID*, clean it up afterwards! +BS_SteamGameServer%() :"_BS_SteamGameServer@0" +BS_ISteamGameServer_InitGameServer%(pThis%, iIP%, sGamePort%, sQueryPort%, iFlags%, iAppId%, cVersion$):"_BS_ISteamGameServer_InitGameServer@24" +BS_ISteamGameServer_SetProduct(pThis%, cProduct$) :"_BS_ISteamGameServer_SetProduct@8" +BS_ISteamGameServer_SetGameDescription(pThis%, cDescription$) :"_BS_ISteamGameServer_SetGameDescription@8" +BS_ISteamGameServer_SetModDir(pThis%, cDirectory$) :"_BS_ISteamGameServer_SetModDir@8" +BS_ISteamGameServer_SetDedicatedServer(pThis%, bDedicated%) :"_BS_ISteamGameServer_SetDedicatedServer@8" +BS_ISteamGameServer_LogOn(pThis%, cToken$) :"_BS_ISteamGameServer_LogOn@8" +BS_ISteamGameServer_LogOnAnonymous(pThis%) :"_BS_ISteamGameServer_LogOnAnonymous@4" +BS_ISteamGameServer_LogOff(pThis%) :"_BS_ISteamGameServer_LogOff@4" +BS_ISteamGameServer_IsLoggedOn%(pThis%) :"_BS_ISteamGameServer_IsLoggedOn@4" +BS_ISteamGameServer_IsSecure%(pThis%) :"_BS_ISteamGameServer_IsSecure@4" +BS_ISteamGameServer_GetSteamID%(pThis%) :"_BS_ISteamGameServer_GetSteamID@4" +BS_ISteamGameServer_WasRestartRequested%(pThis%) :"_BS_ISteamGameServer_WasRestartRequested@4" +BS_ISteamGameServer_SetMaxPlayerCount(pThis%, iMaxPlayers%) :"_BS_ISteamGameServer_SetMaxPlayerCount@8" +BS_ISteamGameServer_SetBotPlayerCount(pThis%, iBotPlayers%) :"_BS_ISteamGameServer_SetBotPlayerCount@8" +BS_ISteamGameServer_SetServerName(pThis%, cName$) :"_BS_ISteamGameServer_SetServerName@8" +BS_ISteamGameServer_SetMapName(pThis%, cName$) :"_BS_ISteamGameServer_SetMapName@8" +BS_ISteamGameServer_SetPasswordProtected(pThis%, bPassworded%) :"_BS_ISteamGameServer_SetPasswordProtected@8" +BS_ISteamGameServer_SetSpectatorPort(pThis%, sPort%) :"_BS_ISteamGameServer_SetSpectatorPort@8" +BS_ISteamGameServer_SetSpectatorServerName(pThis%, cName$) :"_BS_ISteamGameServer_SetSpectatorServerName@8" +BS_ISteamGameServer_ClearAllKeyValues(pThis%) :"_BS_ISteamGameServer_ClearAllKeyValues@4" +BS_ISteamGameServer_SetKeyValue(pThis%, cKey$, cValue$) :"_BS_ISteamGameServer_SetKeyValue@12" +BS_ISteamGameServer_SetGameTags(pThis%, cTags$) :"_BS_ISteamGameServer_SetGameTags@8" +BS_ISteamGameServer_SetGameData(pThis%, cData$) :"_BS_ISteamGameServer_SetGameData@8" +BS_ISteamGameServer_SetRegion(pThis%, cRegion$) :"_BS_ISteamGameServer_SetRegion@8" +BS_ISteamGameServer_SendUserConnectAndAuthenticate%(pThis%, iIP%, pAuthBlob*, iAuthBlobSize%, lSteamId%):"_BS_ISteamGameServer_SendUserConnectAndAuthenticate@20" +BS_ISteamGameServer_SendUserConnectAndAuthenticateEx%(pThis%, iIP%, pAuthBlob%, iAuthBlobSize%, lSteamId%):"_BS_ISteamGameServer_SendUserConnectAndAuthenticate@20" +BS_ISteamGameServer_CreateUnauthenticatedUserConnection%(pThis%) :"_BS_ISteamGameServer_CreateUnauthenticatedUserConnection@4" +;! Function above returns a CSteamID*, clean it up afterwards! +BS_ISteamGameServer_SendUserDisconnect(pThis%, lSteamId%) :"_BS_ISteamGameServer_SendUserDisconnect@8" +BS_ISteamGameServer_UpdateUserData%(pThis%, lSteamId%, cName$, iScore%):"_BS_ISteamGameServer_UpdateUserData@16" +BS_ISteamGameServer_GetAuthSessionTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamGameServer_GetAuthSessionTicket@16" +BS_ISteamGameServer_GetAuthSessionTicketEx%(pThis%, pTicket%, iTicketSize%, piTicketSize%):"_BS_ISteamGameServer_GetAuthSessionTicket@16" +BS_ISteamGameServer_BeginAuthSession%(pThis%, pTicket*, iTicketSize%, lSteamId%):"_BS_ISteamGameServer_BeginAuthSession@16" +BS_ISteamGameServer_BeginAuthSessionEx%(pThis%, pTicket%, iTicketSize%, lSteamId%):"_BS_ISteamGameServer_BeginAuthSession@16" +BS_ISteamGameServer_EndAuthSession(pThis%, lSteamId%) :"_BS_ISteamGameServer_EndAuthSession@8" +BS_ISteamGameServer_CancelAuthTicket(pThis%, iAuthTicket%) :"_BS_ISteamGameServer_CancelAuthTicket@8" +BS_ISteamGameServer_UserHasLicenseForApp%(pThis%, lSteamId%, iAppId%) :"_BS_ISteamGameServer_UserHasLicenseForApp@12" +BS_ISteamGameServer_RequestUserGroupStatus%(pThis%, lSteamId%, pSteamIdGroup%) :"_BS_ISteamGameServer_RequestUserGroupStatus@12" +BS_ISteamGameServer_GetPublicIP%(pThis%) :"_BS_ISteamGameServer_GetPublicIP@4" +BS_ISteamGameServer_HandleIncomingPacket%(pThis%, pBuffer*, iBufferSize%, iIP%, sPort%):"_BS_ISteamGameServer_HandleIncomingPacket@20" +BS_ISteamGameServer_HandleIncomingPacketEx%(pThis%, pBuffer%, iBufferSize%, iIP%, sPort%):"_BS_ISteamGameServer_HandleIncomingPacket@20" +BS_ISteamGameServer_GetNextOutgoingPacket%(pThis%, pBuffer*, iBufferSize%, piIP*, psPort*):"_BS_ISteamGameServer_GetNextOutgoingPacket@20" +BS_ISteamGameServer_GetNextOutgoingPacketEx%(pThis%, pBuffer%, iBufferSize%, piIP%, psPort%):"_BS_ISteamGameServer_GetNextOutgoingPacket@20" +BS_ISteamGameServer_EnableHeartbeats(pThis%, bActive%) :"_BS_ISteamGameServer_EnableHeartbeats@8" +BS_ISteamGameServer_SetHeartbeatInterval(pThis%, iInterval%) :"_BS_ISteamGameServer_SetHeartbeatInterval@8" +BS_ISteamGameServer_ForceHeartbeat(pThis%) :"_BS_ISteamGameServer_ForceHeartbeat@4" +BS_ISteamGameServer_AssociateWithClan%(pThis%, pSteamIDClan%) :"_BS_ISteamGameServer_AssociateWithClan@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamGameServer_ComputeNewPlayerCompatibility%(pThis%, pSteamIDNewPlayer%) :"_BS_ISteamGameServer_ComputeNewPlayerCompatibility@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! diff --git a/#Test/userlibs/BlitzSteam_SteamGameServerStats.decls b/#Test/userlibs/BlitzSteam_SteamGameServerStats.decls new file mode 100644 index 0000000..61241d1 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamGameServerStats.decls @@ -0,0 +1,36 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; GameServerStats ------------------------------------------------------------- +BS_SteamGameServerStats%() :"_BS_SteamGameServerStats@0" +BS_ISteamGameServerStats_RequestUserStats%(pThis%, lSteamId%) :"_BS_ISteamGameServerStats_RequestUserStats@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamGameServerStats_StoreUserStats%(pThis%, lSteamId%) :"_BS_ISteamGameServerStats_StoreUserStats@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamGameServerStats_GetUserStat%(pThis%, lSteamId%, cName$, pData*) :"_BS_ISteamGameServerStats_GetUserStat@16" +BS_ISteamGameServerStats_GetUserStatEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_ISteamGameServerStats_GetUserStat@16" +BS_ISteamGameServerStats_GetUserStatF%(pThis%, lSteamId%, cName$, pData*) :"_BS_ISteamGameServerStats_GetUserStatF@16" +BS_ISteamGameServerStats_GetUserStatFEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_ISteamGameServerStats_GetUserStatF@16" +BS_ISteamGameServerStats_GetUserAchievement%(pThis%, lSteamId%, cName$, pbAchieved*):"_BS_ISteamGameServerStats_GetUserAchievement@16" +BS_ISteamGameServerStats_GetUserAchievementEx%(pThis%, lSteamId%, cName$, pbAchieved%):"_BS_ISteamGameServerStats_GetUserAchievement@16" +BS_ISteamGameServerStats_SetUserStat%(pThis%, lSteamId%, cName%, iData%) :"_BS_ISteamGameServerStats_SetUserStat@16" +BS_ISteamGameServerStats_SetUserStatF%(pThis%, lSteamId%, cName%, fData#) :"_BS_ISteamGameServerStats_SetUserStatF@16" +BS_ISteamGameServerStats_UpdateUserAvgRateStat%(pThis%, lSteamId%, cName$, fCountThisSession#, dSessionLength%):"_BS_ISteamGameServerStats_UpdateUserAvgRateStat@20" +;! Function above takes a Double* as last parameter. +BS_ISteamGameServerStats_SetUserAchievement%(pThis%, lSteamId%, cName$) :"_BS_ISteamGameServerStats_SetUserAchievement@12" +BS_ISteamGameServerStats_ClearUserAchievement%(pThis%, lSteamId%, cName$) :"_BS_ISteamGameServerStats_ClearUserAchievement@12" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamHTMLSurface.decls b/#Test/userlibs/BlitzSteam_SteamHTMLSurface.decls new file mode 100644 index 0000000..9e4dee5 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamHTMLSurface.decls @@ -0,0 +1,56 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; HTMLSurface ----------------------------------------------------------------- +BS_SteamHTMLSurface%() :"_BS_SteamHTMLSurface@0" +BS_ISteamHTMLSurface_Init%(pThis%) :"_BS_ISteamHTMLSurface_Init@4" +BS_ISteamHTMLSurface_Shutdown%(pThis%) :"_BS_ISteamHTMLSurface_Shutdown@4" +BS_ISteamHTMLSurface_CreateBrowser%(pThis%, cUserAgent$, cUserCSS$) :"_BS_ISteamHTMLSurface_CreateBrowser@12" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamHTMLSurface_RemoveBrowser(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_RemoveBrowser@8" +BS_ISteamHTMLSurface_LoadURL(pThis%, iHandle%, cURL$, cPostData$) :"_BS_ISteamHTMLSurface_LoadURL@16" +BS_ISteamHTMLSurface_SetSize(pThis%, iHandle%, iWidth%, iHeight%) :"_BS_ISteamHTMLSurface_SetSize@16" +BS_ISteamHTMLSurface_StopLoad(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_StopLoad@8" +BS_ISteamHTMLSurface_Reload(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_Reload@8" +BS_ISteamHTMLSurface_GoBack(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_GoBack@8" +BS_ISteamHTMLSurface_GoForward(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_GoForward@8" +BS_ISteamHTMLSurface_AddHeader(pThis%, iHandle%, cKey$, cValue$) :"_BS_ISteamHTMLSurface_AddHeader@16" +BS_ISteamHTMLSurface_ExecuteJavascript(pThis%, iHandle%, cScript$) :"_BS_ISteamHTMLSurface_ExecuteJavascript@12" +BS_ISteamHTMLSurface_MouseUp(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseUp@12" +BS_ISteamHTMLSurface_MouseDown(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseDown@12" +BS_ISteamHTMLSurface_MouseDoubleClick(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseDoubleClick@12" +BS_ISteamHTMLSurface_MouseMove(pThis%, iHandle%, X%, Y%) :"_BS_ISteamHTMLSurface_MouseMove@16" +BS_ISteamHTMLSurface_MouseWheel(pThis%, iHandle%, iDelta%) :"_BS_ISteamHTMLSurface_MouseWheel@12" +BS_ISteamHTMLSurface_KeyDown(pThis%, iHandle%, iKeyCode%, EHTMLKeyModifiers%) :"_BS_ISteamHTMLSurface_KeyDown@16" +BS_ISteamHTMLSurface_KeyUp(pThis%, iHandle%, iKeyCode%, EHTMLKeyModifiers%) :"_BS_ISteamHTMLSurface_KeyUp@16" +BS_ISteamHTMLSurface_KeyChar(pThis%, iHandle%, iUnicodeChar%, EHTMLKeyModifiers%):"_BS_ISteamHTMLSurface_KeyChar@16" +BS_ISteamHTMLSurface_SetHorizontalScroll(pThis%, iHandle%, iAbsolutePixelScroll%):"_BS_ISteamHTMLSurface_SetHorizontalScroll@16" +BS_ISteamHTMLSurface_SetVerticalScroll(pThis%, iHandle%, iAbsolutePixelScroll%) :"_BS_ISteamHTMLSurface_SetVerticalScroll@16" +BS_ISteamHTMLSurface_SetKeyFocus(pThis%, iHandle%, bHasKeyFocus%) :"_BS_ISteamHTMLSurface_SetKeyFocus@12" +BS_ISteamHTMLSurface_ViewSource(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_ViewSource@8" +BS_ISteamHTMLSurface_CopyToClipboard(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_CopyToClipboard@8" +BS_ISteamHTMLSurface_PasteFromClipboard(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_PasteFromClipboard@8" +BS_ISteamHTMLSurface_Find(pThis%, iHandle%, cSearch$, bCurrentlyInFind%, bReverse%):"_BS_ISteamHTMLSurface_Find@20" +BS_ISteamHTMLSurface_StopFind(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_StopFind@8" +BS_ISteamHTMLSurface_GetLinkAtPosition(pThis%, iHandle%, X%, Y%) :"_BS_ISteamHTMLSurface_GetLinkAtPosition@16" +BS_ISteamHTMLSurface_SetCookie(pThis%, iHandle%, cHostName$, cKey$, cValue$, cPath$, nExpires%, bSecure%, bHTTPOnly%):"_BS_ISteamHTMLSurface_SetCookie@36" +BS_ISteamHTMLSurface_SetPageScaleFactor(pThis%, iHandle%, fZoom#, iX%, iY%) :"_BS_ISteamHTMLSurface_SetPageScaleFactor@20" +BS_ISteamHTMLSurface_SetBackgroundMode(pThis%, iHandle%, bBackgroundMode%) :"_BS_ISteamHTMLSurface_SetBackgroundMode@12" +BS_ISteamHTMLSurface_AllowStartRequest(pThis%, iHandle%, bAllowed%) :"_BS_ISteamHTMLSurface_AllowStartRequest@12" +BS_ISteamHTMLSurface_JSDialogResponse(pThis%, iHandle%, bResult%) :"_BS_ISteamHTMLSurface_JSDialogResponse@12" +BS_ISteamHTMLSurface_FileLoadDialogResponse(pThis%, iHandle%, pcSelectedFiles%) :"_BS_ISteamHTMLSurface_FileLoadDialogResponse@12" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamHTTP.decls b/#Test/userlibs/BlitzSteam_SteamHTTP.decls new file mode 100644 index 0000000..e51d1df --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamHTTP.decls @@ -0,0 +1,54 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; HTTP ------------------------------------------------------------------------ +BS_SteamHTTP%() :"_BS_SteamHTTP@0" +BS_SteamGameServerHTTP%() :"_BS_SteamGameServerHTTP@0" +BS_ISteamHTTP_CreateHTTPRequest%(pThis%, EHTTPRequestMethod%, cAbsoluteUrl$) :"_BS_ISteamHTTP_CreateHTTPRequest@12" +BS_ISteamHTTP_SetHTTPRequestContextValue%(pThis%, iRequest%, lContextValue%) :"_BS_ISteamHTTP_SetHTTPRequestContextValue@12" +BS_ISteamHTTP_SetHTTPNetworkActivityTimeout%(pThis%, iRequest%, iSeconds%) :"_BS_ISteamHTTP_SetHTTPNetworkActivityTimeout@12" +BS_ISteamHTTP_SetHTTPRequestHeaderValue%(pThis%, iRequest%, cName$, cValue$) :"_BS_ISteamHTTP_SetHTTPRequestHeaderValue@16" +BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter%(pThis%, iRequest%, cName$, cValue$):"_BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter@16" +BS_ISteamHTTP_SendHTTPRequest%(pThis%, iRequest, lCallHandle%) :"_BS_ISteamHTTP_SendHTTPRequest@12" +BS_ISteamHTTP_SendHTTPRequestAndStreamResponse%(pThis%, iRequest%, lCallHandle%):"_BS_ISteamHTTP_SendHTTPRequestAndStreamResponse@12" +BS_ISteamHTTP_DeferHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_DeferHTTPRequest@8" +BS_ISteamHTTP_PrioritizeHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_PrioritizeHTTPRequest@8" +BS_ISteamHTTP_GetHTTPResponseHeaderSize%(pThis%, iRequest%, cName$, piSize*) :"_BS_ISteamHTTP_GetHTTPResponseHeaderSize@16" +BS_ISteamHTTP_GetHTTPResponseHeaderSizeEx%(pThis%, iRequest%, cName$, piSize%) :"_BS_ISteamHTTP_GetHTTPResponseHeaderSize@16" +BS_ISteamHTTP_GetHTTPResponseHeaderValue%(pThis%, iRequest%, cName$, pBuffer*, iSize%):"_BS_ISteamHTTP_GetHTTPResponseHeaderValue@20" +BS_ISteamHTTP_GetHTTPResponseHeaderValueEx%(pThis%, iRequest%, cName$, pBuffer%, iSize%):"_BS_ISteamHTTP_GetHTTPResponseHeaderValue@20" +BS_ISteamHTTP_GetHTTPResponseBodySize%(pThis%, iRequest%, piSize*) :"_BS_ISteamHTTP_GetHTTPResponseBodySize@12" +BS_ISteamHTTP_GetHTTPResponseBodySizeEx%(pThis%, iRequest%, piSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodySize@12" +BS_ISteamHTTP_GetHTTPResponseBodyData%(pThis%, iRequest%, pBuffer*, nSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodyData@16" +BS_ISteamHTTP_GetHTTPResponseBodyDataEx%(pThis%, iRequest%, pBuffer%, nSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodyData@16" +BS_ISteamHTTP_GetHTTPStreamingResponseBodyData%(pThis%, iRequest%, iOffset%, pBuffer*, nSize%):"_BS_ISteamHTTP_GetHTTPStreamingResponseBodyData@20" +BS_ISteamHTTP_GetHTTPStreamingResponseBodyDataEx%(pThis%, iRequest%, iOffset%, pBuffer%, nSize%):"_BS_ISteamHTTP_GetHTTPStreamingResponseBodyData@20" +BS_ISteamHTTP_ReleaseHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_ReleaseHTTPRequest@8" +BS_ISteamHTTP_GetHTTPDownloadProgressPct%(pThis%, iRequest%, pfPercent*) :"_BS_ISteamHTTP_GetHTTPDownloadProgressPct@12" +BS_ISteamHTTP_GetHTTPDownloadProgressPctEx%(pThis%, iRequest%, pfPercent%) :"_BS_ISteamHTTP_GetHTTPDownloadProgressPct@12" +BS_ISteamHTTP_SetHTTPRequestRawPostBody%(pThis%, iRequest%, cType$, pBody*, nSize%):"_BS_ISteamHTTP_SetHTTPRequestRawPostBody@16" +BS_ISteamHTTP_SetHTTPRequestRawPostBodyEx%(pThis%, iRequest%, cType$, pBody*, nSize%):"_BS_ISteamHTTP_SetHTTPRequestRawPostBody@16" +BS_ISteamHTTP_CreateCookieContainer%(pThis%, bAllowResponsesToModify%) :"_BS_ISteamHTTP_CreateCookieContainer@8" +BS_ISteamHTTP_ReleaseCookieContainer%(pThis%, iCookieContainer%) :"_BS_ISteamHTTP_ReleaseCookieContainer@8" +BS_ISteamHTTP_SetCookie%(pthis%, iCookieContainer%, cHost$, cUrl$, cCookie$) :"_BS_ISteamHTTP_SetCookie@20" +BS_ISteamHTTP_SetHTTPRequestCookieContainer%(pThis%, iRequest%, iCookieContainer%):"_BS_ISteamHTTP_SetHTTPRequestCookieContainer@12" +BS_ISteamHTTP_SetHTTPRequestUserAgentInfo%(pThis%, iRequest%, cUserAgent$) :"_BS_ISteamHTTP_SetHTTPRequestUserAgentInfo@12" +BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate%(pThis%, iRequest%, bRequire%):"_BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate@12" +BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS%(pThis%, iRequest%, iMilliseconds%):"_BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS@12" +BS_ISteamHTTP_GetHTTPRequestWasTimedOut%(pThis%, iRequest%, pbWasTimedOut*) :"_BS_ISteamHTTP_GetHTTPRequestWasTimedOut@12" +BS_ISteamHTTP_GetHTTPRequestWasTimedOutEx%(pThis%, iRequest%, pbWasTimedOut%) :"_BS_ISteamHTTP_GetHTTPRequestWasTimedOut@12" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamInventory.decls b/#Test/userlibs/BlitzSteam_SteamInventory.decls new file mode 100644 index 0000000..adb6819 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamInventory.decls @@ -0,0 +1,59 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Inventory ------------------------------------------------------------------- +BS_SteamInventory%() :"_BS_SteamInventory@0" +BS_SteamGameServerInventory%() :"_BS_SteamGameServerInventory@0" +BS_ISteamInventory_GetResultStatus%(pThis%, iResultHandle%) :"_BS_ISteamInventory_GetResultStatus@8" +BS_ISteamInventory_GetResultItems%(pThis%, iResultHandle%, pItemsArray*, piItemsArraySize*):"_BS_ISteamInventory_GetResultItems@16" +BS_ISteamInventory_GetResultItemsEx%(pThis%, iResultHandle%, pItemsArray%, piItemsArraySize%):"_BS_ISteamInventory_GetResultItems@16" +BS_ISteamInventory_GetResultTimestamp%(pThis%, iResultHandle%) :"_BS_ISteamInventory_GetResultTimestamp@8" +BS_ISteamInventory_CheckResultSteamID%(pThis%, iResultHandle%, lSteamIdExpected%):"_BS_ISteamInventory_GetResultTimestamp@12" +BS_ISteamInventory_DestroyResult(pThis%, iResultHandle%) :"_BS_ISteamInventory_DestroyResult@8" +BS_ISteamInventory_GetAllItems%(pThis%, piResultHandle*) :"_BS_ISteamInventory_GetAllItems@8" +BS_ISteamInventory_GetAllItemsEx%(pThis%, piResultHandle%) :"_BS_ISteamInventory_GetAllItems@8" +BS_ISteamInventory_GetItemsByID%(pThis%, piResultHandle*, plInstanceIds*, iInstanceIdCount%):"_BS_ISteamInventory_GetItemsByID@16" +BS_ISteamInventory_GetItemsByIDEx%(pThis%, piResultHandle%, plInstanceIds%, iInstanceIdCount%):"_BS_ISteamInventory_GetItemsByID@16" +BS_ISteamInventory_SerializeResult%(pThis%, iResultHandle%, pOutBuffer*, piOutBufferSize*):"_BS_ISteamInventory_SerializeResult@16" +BS_ISteamInventory_SerializeResultEx%(pThis%, iResultHandle%, pOutBuffer%, piOutBufferSize%):"_BS_ISteamInventory_SerializeResult@16" +BS_ISteamInventory_DeserializeResult%(pThis%, piResultHandle*, pBuffer*, iBufferSize%, bReservedMustBeFalse):"_BS_ISteamInventory_DeserializeResult@20" +BS_ISteamInventory_DeserializeResultEx%(pThis%, piResultHandle%, pBuffer%, iBufferSize%, bReservedMustBeFalse):"_BS_ISteamInventory_DeserializeResult@20" +BS_ISteamInventory_GenerateItems%(pThis%, piResultHandle*, piIdArray*, piQuantityArray*, iArrayLength%):"_BS_ISteamInventory_GenerateItems@20" +BS_ISteamInventory_GenerateItemsEx%(pThis%, piResultHandle%, piIdArray%, piQuantityArray%, iArrayLength%):"_BS_ISteamInventory_GenerateItems@20" +BS_ISteamInventory_GrantPromoItems%(pThis%, piResultHandle*) :"_BS_ISteamInventory_GrantPromoItems@8" +BS_ISteamInventory_GrantPromoItemsEx%(pThis%, piResultHandle%) :"_BS_ISteamInventory_GrantPromoItems@8" +BS_ISteamInventory_AddPromoItem%(pThis%, piResultHandle*, iId%) :"_BS_ISteamInventory_AddPromoItem@12" +BS_ISteamInventory_AddPromoItemEx%(pThis%, piResultHandle%, iId%) :"_BS_ISteamInventory_AddPromoItem@12" +BS_ISteamInventory_AddPromoItems%(pThis%, piResultHandle*, piIdsArray*, iArrayLength%):"_BS_ISteamInventory_AddPromoItems@16" +BS_ISteamInventory_AddPromoItemsEx%(pThis%, piResultHandle%, piIdsArray%, iArrayLength%):"_BS_ISteamInventory_AddPromoItems@16" +BS_ISteamInventory_ConsumeItem%(pThis%, piResultHandle*, iId%, iQuantity%) :"_BS_ISteamInventory_ConsumeItem@16" +BS_ISteamInventory_ConsumeItemEx%(pThis%, piResultHandle%, iId%, iQuantity%) :"_BS_ISteamInventory_ConsumeItem@16" +BS_ISteamInventory_ExchangeItems%(pThis%, piResultHandle*, piGenerateArray*, piGenerateQuantityArray*, iArrayGenerateLength%, piDestroyArray*, piDestroyQuantityArray*, iArrayDestroyLength%):"_BS_ISteamInventory_ExchangeItems@32" +BS_ISteamInventory_ExchangeItemsEx%(pThis%, piResultHandle%, piGenerateArray%, piGenerateQuantityArray%, iArrayGenerateLength%, piDestroyArray%, piDestroyQuantityArray%, iArrayDestroyLength%):"_BS_ISteamInventory_ExchangeItems@32" +BS_ISteamInventory_TransferItemQuantity%(pThis%, piResultHandle*, iSourceId%, iQuantity%, iDestId%):"_BS_ISteamInventory_TransferItemQuantity@20" +BS_ISteamInventory_TransferItemQuantityEx%(pThis%, piResultHandle%, iSourceId%, iQuantity%, iDestId%):"_BS_ISteamInventory_TransferItemQuantity@20" +BS_ISteamInventory_SendItemDropHeartbeat%(pThis%) :"_BS_ISteamInventory_SendItemDropHeartbeat@4" +BS_ISteamInventory_TriggerItemDrop%(pThis%, piResultHandle*, iDropListId%) :"_BS_ISteamInventory_TriggerItemDrop@12" +BS_ISteamInventory_TriggerItemDropEx%(pThis%, piResultHandle%, iDropListId%) :"_BS_ISteamInventory_TriggerItemDrop@12" +BS_ISteamInventory_TradeItems%(pThis%, piResultHandle*, lSteamIdPartner%, piArrayGive*, piArrayGiveQuantity*, iArrayGiveLength%, piArrayGet*, piArrayGetQuantity*, iArrayGetLength%):"_BS_ISteamInventory_TradeItems@36" +BS_ISteamInventory_TradeItemsEx%(pThis%, piResultHandle%, lSteamIdPartner%, piArrayGive%, piArrayGiveQuantity%, iArrayGiveLength%, piArrayGet%, piArrayGetQuantity%, iArrayGetLength%):"_BS_ISteamInventory_TradeItems@36" +BS_ISteamInventory_LoadItemDefinitions%(pThis%) :"_BS_ISteamInventory_LoadItemDefinitions@4" +BS_ISteamInventory_GetItemDefinitionIDs%(pThis%, piArrayId*, piArrayIdSize*) :"_BS_ISteamInventory_GetItemDefinitionIDs@12" +BS_ISteamInventory_GetItemDefinitionIDsEx%(pThis%, piArrayId%, piArrayIdSize%) :"_BS_ISteamInventory_GetItemDefinitionIDs@12" +BS_ISteamInventory_GetItemDefinitionProperty%(pThis%, iId%, cName$, pcValueBuffer*, piValueBufferSize*):"_BS_ISteamInventory_GetItemDefinitionProperty@20" +BS_ISteamInventory_GetItemDefinitionPropertyEx%(pThis%, iId%, cName$, pcValueBuffer%, piValueBufferSize%):"_BS_ISteamInventory_GetItemDefinitionProperty@20" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamMatchmaking.decls b/#Test/userlibs/BlitzSteam_SteamMatchmaking.decls new file mode 100644 index 0000000..2923f02 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamMatchmaking.decls @@ -0,0 +1,21 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Matchmaking ----------------------------------------------------------------- +BS_SteamMatchmaking%() :"_BS_SteamMatchmaking@0" +; Todo \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamMatchmakingServers.decls b/#Test/userlibs/BlitzSteam_SteamMatchmakingServers.decls new file mode 100644 index 0000000..337e2f8 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamMatchmakingServers.decls @@ -0,0 +1,42 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; MatchmakingServers ---------------------------------------------------------- +BS_SteamMatchmakingServers%() :"_BS_SteamMatchmakingServers@0" +BS_ISteamMatchmakingServers_RequestInternetServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestInternetServerList@20" +BS_ISteamMatchmakingServers_RequestInternetServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestInternetServerList@20" +BS_ISteamMatchmakingServers_RequestLANServerList%(pThis%, iApp%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestLANServerList@12" +BS_ISteamMatchmakingServers_RequestFriendsServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFriendsServerList@20" +BS_ISteamMatchmakingServers_RequestFriendsServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFriendsServerList@20" +BS_ISteamMatchmakingServers_RequestFavoritesServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFavoritesServerList@20" +BS_ISteamMatchmakingServers_RequestFavoritesServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFavoritesServerList@20" +BS_ISteamMatchmakingServers_RequestHistoryServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestHistoryServerList@20" +BS_ISteamMatchmakingServers_RequestHistoryServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestHistoryServerList@20" +BS_ISteamMatchmakingServers_RequestSpectatorServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestSpectatorServerList@20" +BS_ISteamMatchmakingServers_RequestSpectatorServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestSpectatorServerList@20" +BS_ISteamMatchmakingServers_ReleaseRequest%(pThis%, hServerListRequest%) :"_BS_ISteamMatchmakingServers_ReleaseRequest@8" +BS_ISteamMatchmakingServers_GetServerDetails%(pThis%, hRequest%, iServer%) :"_BS_ISteamMatchmakingServers_GetServerDetails@12" +BS_ISteamMatchmakingServers_CancelQuery%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_CancelQuery@8" +BS_ISteamMatchmakingServers_RefreshQuery%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_RefreshQuery@8" +BS_ISteamMatchmakingServers_IsRefreshing%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_IsRefreshing@8" +BS_ISteamMatchmakingServers_GetServerCount%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_GetServerCount@8" +BS_ISteamMatchmakingServers_RefreshServer%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_RefreshServer@8" +BS_ISteamMatchmakingServers_PingServer%(pThis%, unIP%, usPort%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_PingServer@16" +BS_ISteamMatchmakingServers_PlayerDetails%(pThis%, unIP%, usPort%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_PlayerDetails@16" +BS_ISteamMatchmakingServers_ServerRules%(pThis%, unIP%, usPort%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_ServerRules@16" +BS_ISteamMatchmakingServers_CancelServerQuery%(pThis%, hServerQuery) :"_BS_ISteamMatchmakingServers_CancelServerQuery@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamMatchmakingTypes.decls b/#Test/userlibs/BlitzSteam_SteamMatchmakingTypes.decls new file mode 100644 index 0000000..47c09a7 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamMatchmakingTypes.decls @@ -0,0 +1,78 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; ISteamMatchmakingServerListResponse ----------------------------------------- +BS_ISteamMatchmakingServerListResponse_New%(Data%, pServerResponded%, pServerFailedToRespond%, pRefreshComplete%):"_BS_ISteamMatchmakingServerListResponse_New@16" +BS_ISteamMatchmakingServerListResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingServerListResponse_Destroy@4" +;- Callback pServerResponded: Function(Data%, hRequest%, iServer%) +;- Callback pServerFailedToRespond: Function(Data%, hRequest%, iServer%) +;- Callback pRefreshComplete: Function(Data%) + +; ISteamMatchmakingPingResponse ----------------------------------------------- +BS_ISteamMatchmakingPingResponse_New%(Data%, pServerResponded%, pServerFailedToRespond%):"_BS_ISteamMatchmakingPingResponse_New@12" +BS_ISteamMatchmakingPingResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingPingResponse_Destroy@4" +;- Callback pServerResponded: Function(Data%, TGameServerItem%) +;- Callback pServerFailedToRespond: Function(Data%) + +; ISteamMatchmakingPlayersResponse -------------------------------------------- +BS_ISteamMatchmakingPlayersResponse_New%(Data%, pAddPlayerToList%, pPlayersFailedToRespond%, pPlayersRefreshComplete%):"_BS_ISteamMatchmakingPlayersResponse_New@16" +BS_ISteamMatchmakingPlayersResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingPlayersResponse_Destroy@4" +;- Callback pAddPlayerToList: Function(Data%, pchName%, nScore%, flTimePlayer#) +;- Callback pPlayersFailedToRespond: Function(Data%) +;- Callback pPlayersRefreshComplete: Function(Data%) + +; ISteamMatchmakingRulesResponse ---------------------------------------------- +BS_ISteamMatchmakingRulesResponse_New%(Data%, pRulesResponded%, pRulesFailedToRespond%, pRulesRefreshComplete%):"_BS_ISteamMatchmakingRulesResponse_New@16" +BS_ISteamMatchmakingRulesResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingPlayersResponse_Destroy@4" +;- Callback pRulesResponded: Function(Data%, pchRule%, pchValue%) +;- Callback pRulesFailedToRespond: Function(Data%) +;- Callback pRulesRefreshComplete: Function(Data%) + +; TGameServerItem ------------------------------------------------------------- +BS_TGameServerItem_GetName$(pThis%) :"_BS_TGameServerItem_GetName@4" +BS_TGameServerItem_SetName(pThis%, cName$) :"_BS_TGameServerItem_SetName@8" +BS_TGameServerItem_NetAdr%(pThis%) :"_BS_TGameServerItem_NetAdr@4" +BS_TGameServerItem_Ping%(pThis%) :"_BS_TGameServerItem_Ping@4" +BS_TGameServerItem_HadSuccessfulResponse%(pThis%) :"_BS_TGameServerItem_HadSuccessfulResponse@4" +BS_TGameServerItem_DoNotRefresh%(pThis%) :"_BS_TGameServerItem_DoNotRefresh@4" +BS_TGameServerItem_GameDir$(pThis%) :"_BS_TGameServerItem_GameDir@4" +BS_TGameServerItem_Map$(pThis%) :"_BS_TGameServerItem_Map@4" +BS_TGameServerItem_GameDescription$(pThis%) :"_BS_TGameServerItem_GameDescription@4" +BS_TGameServerItem_AppId%(pThis%) :"_BS_TGameServerItem_AppId@4" +BS_TGameServerItem_Players%(pThis%) :"_BS_TGameServerItem_Players@4" +BS_TGameServerItem_MaxPlayers%(pThis%) :"_BS_TGameServerItem_MaxPlayers@4" +BS_TGameServerItem_BotPlayers%(pThis%) :"_BS_TGameServerItem_BotPlayers@4" +BS_TGameServerItem_Password%(pThis%) :"_BS_TGameServerItem_Password@4" +BS_TGameServerItem_Secure%(pThis%) :"_BS_TGameServerItem_Secure@4" +BS_TGameServerItem_TimeLastPlayed%(pThis%) :"_BS_TGameServerItem_TimeLastPlayed@4" +BS_TGameServerItem_ServerVersion%(pThis%) :"_BS_TGameServerItem_ServerVersion@4" +BS_TGameServerItem_GameTags$(pThis%) :"_BS_TGameServerItem_GameTags@4" +BS_TGameServerItem_SteamID%(pThis%) :"_BS_TGameServerItem_SteamID@4" + +; TServerNetAdr --------------------------------------------------------------- +BS_TServerNetAdr_Set(pThis%, pThat%) :"_BS_TServerNetAdr_Set@8" +BS_TServerNetAdr_Init(pThis%, iIP%, iQueryPort%, iConnectionPort%) :"_BS_TServerNetAdr_Init@16" +BS_TServerNetAdr_GetQueryPort%(pThis%) :"_BS_TServerNetAdr_GetQueryPort@4" +BS_TServerNetAdr_SetQueryPort(pThis%, iPort%) :"_BS_TServerNetAdr_SetQueryPort@8" +BS_TServerNetAdr_GetConnectionPort%(pThis%) :"_BS_TServerNetAdr_GetConnectionPort@4" +BS_TServerNetAdr_SetConnectionPort(pThis%, iPort%) :"_BS_TServerNetAdr_SetConnectionPort@8" +BS_TServerNetAdr_GetIP%(pThis%) :"_BS_TServerNetAdr_GetIP@4" +BS_TServerNetAdr_SetIP(pThis%, iIP%) :"_BS_TServerNetAdr_SetIP@8" +BS_TServerNetAdr_GetConnectionAddressString$(pThis%) :"_BS_TServerNetAdr_GetConnectionAddressString@4" +BS_TServerNetAdr_GetQueryAddressString$(pThis%) :"_BS_TServerNetAdr_GetQueryAddressString@4" +BS_TServerNetAdr_Compare%(pThis%, pThat%) :"_BS_TServerNetAdr_Compare@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamMusic.decls b/#Test/userlibs/BlitzSteam_SteamMusic.decls new file mode 100644 index 0000000..2294d38 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamMusic.decls @@ -0,0 +1,21 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Music ----------------------------------------------------------------------- +BS_SteamMusic%() :"_BS_SteamMusic@0" +; Todo diff --git a/#Test/userlibs/BlitzSteam_SteamMusicRemote.decls b/#Test/userlibs/BlitzSteam_SteamMusicRemote.decls new file mode 100644 index 0000000..2093ce9 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamMusicRemote.decls @@ -0,0 +1,21 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; MusicRemote ----------------------------------------------------------------- +BS_SteamMusicRemote%() :"_BS_SteamMusicRemote@0" +; Todo diff --git a/#Test/userlibs/BlitzSteam_SteamNetworking.decls b/#Test/userlibs/BlitzSteam_SteamNetworking.decls new file mode 100644 index 0000000..ecd6157 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamNetworking.decls @@ -0,0 +1,32 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Networking ------------------------------------------------------------------ +BS_SteamNetworking%() :"_BS_SteamNetworking@0" +BS_SteamGameServerNetworking%() :"_BS_SteamGameServerNetworking@0" +BS_ISteamNetworking_SendP2PPacket%(pThis%, lRemoteSteamId%, pData*, iDataSize%, EP2PSendType%, iChannel%):"_BS_ISteamNetworking_SendP2PPacket@24" +BS_ISteamNetworking_SendP2PPacketEx%(pThis%, lRemoteSteamId%, pData%, iDataSize%, EP2PSendType%, iChannel%):"_BS_ISteamNetworking_SendP2PPacket@24" +BS_ISteamNetworking_IsP2PPacketAvailable%(pThis%, piSize*, iChannel%) :"_BS_ISteamNetworking_IsP2PPacketAvailable@12" +BS_ISteamNetworking_IsP2PPacketAvailableEx%(pThis%, piSize%, iChannel%) :"_BS_ISteamNetworking_IsP2PPacketAvailable@12" +BS_ISteamNetworking_ReadP2PPacket%(pThis%, pBuffer*, iBufferSize%, piMessageSize*, plRemoteSteamId*, iChannel%):"_BS_ISteamNetworking_ReadP2PPacket@24" +BS_ISteamNetworking_ReadP2PPacketEx%(pThis%, pBuffer%, iBufferSize%, piMessageSize%, plRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_ReadP2PPacket@24" +BS_ISteamNetworking_AcceptP2PSessionWithUser%(pThis%, lRemoteSteamId%) :"_BS_ISteamNetworking_AcceptP2PSessionWithUser@8" +BS_ISteamNetworking_CloseP2PSessionWithUser%(pThis%, lRemoteSteamId%) :"_BS_ISteamNetworking_CloseP2PSessionWithUser@8" +BS_ISteamNetworking_CloseP2PChannelWithUser%(pThis%, lRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_CloseP2PChannelWithUser@12" +BS_ISteamNetworking_GetP2PSessionState%(pThis%, lRemoteSteamId%, pConnectionState*):"_BS_ISteamNetworking_GetP2PSessionState@12" +BS_ISteamNetworking_AllowP2PPacketRelay%(pThis%, bAllow%) :"_BS_ISteamNetworking_AllowP2PPacketRelay@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamRemoteStorage.decls b/#Test/userlibs/BlitzSteam_SteamRemoteStorage.decls new file mode 100644 index 0000000..ea3f10b --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamRemoteStorage.decls @@ -0,0 +1,21 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; RemoteStorage --------------------------------------------------------------- +BS_SteamRemoteStorage%() :"_BS_SteamRemoteStorage@0" +; Todo diff --git a/#Test/userlibs/BlitzSteam_SteamScreenshots.decls b/#Test/userlibs/BlitzSteam_SteamScreenshots.decls new file mode 100644 index 0000000..671fa4b --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamScreenshots.decls @@ -0,0 +1,21 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Screenshots ----------------------------------------------------------------- +BS_SteamScreenshots%() :"_BS_SteamScreenshots@0" +; Todo diff --git a/#Test/userlibs/BlitzSteam_SteamUGC.decls b/#Test/userlibs/BlitzSteam_SteamUGC.decls new file mode 100644 index 0000000..ce0a3e6 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamUGC.decls @@ -0,0 +1,22 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; UGC ------------------------------------------------------------------------- +BS_SteamUGC%() :"_BS_SteamUGC@0" +BS_SteamGameServerUGC%() :"_BS_SteamGameServerUGC@0" +; Todo diff --git a/#Test/userlibs/BlitzSteam_SteamUnifiedMessages.decls b/#Test/userlibs/BlitzSteam_SteamUnifiedMessages.decls new file mode 100644 index 0000000..84e4d38 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamUnifiedMessages.decls @@ -0,0 +1,20 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; UnifiedMessages ------------------------------------------------------------- +BS_SteamUnifiedMessages%() :"_BS_SteamUnifiedMessages@0" diff --git a/#Test/userlibs/BlitzSteam_SteamUser.decls b/#Test/userlibs/BlitzSteam_SteamUser.decls new file mode 100644 index 0000000..54037e4 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamUser.decls @@ -0,0 +1,49 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; User ------------------------------------------------------------------------ +BS_SteamUser%() :"_BS_SteamUser@0" +BS_ISteamUser_GetHSteamUser%(pThis%) :"_BS_ISteamUser_GetHSteamUser@4" +BS_ISteamUser_IsLoggedOn%(pThis%) :"_BS_ISteamUser_IsLoggedOn@4" +BS_ISteamUser_GetSteamID%(pThis%) :"_BS_ISteamUser_GetSteamID@4" +BS_ISteamUser_InitiateGameConnection%(pThis%, pAuthBlob*, iAuthBlobSize%, lSteamId%, iIp%, sPort%, bSecure%):"_BS_ISteamUser_InitiateGameConnection@28" +BS_ISteamUser_InitiateGameConnectionEx%(pThis%, pAuthBlob%, iAuthBlobSize%, lSteamId%, iIp%, sPort%, bSecure%):"_BS_ISteamUser_InitiateGameConnection@28" +BS_ISteamUser_TerminateGameConnection(pThis%, iIp%, sPort%) :"_BS_ISteamUser_TerminateGameConnection@12" +BS_ISteamUser_TrackAppUsageEvent(pThis%, iAppId%, EAppUsageEvent%, cExtraInfo$) :"_BS_ISteamUser_TrackAppUsageEvent@16" +BS_ISteamUser_GetUserDataFolder%(pThis%, pBuffer*, iBufferSize%) :"_BS_ISteamUser_GetUserDataFolder@12" +BS_ISteamUser_StartVoiceRecording(pThis%) :"_BS_ISteamUser_StartVoiceRecording@4" +BS_ISteamUser_StopVoiceRecording(pThis%) :"_BS_ISteamUser_StopVoiceRecording@4" +BS_ISteamUser_GetAvailableVoice%(pThis%, pCompressed*, pUncompressed*, nDesiredSampleRate%):"_BS_ISteamUser_GetAvailableVoice@16" +BS_ISteamUser_GetAvailableVoiceEx%(pThis%, pCompressed%, pUncompressed%, nDesiredSampleRate%):"_BS_ISteamUser_GetAvailableVoice@16" +BS_ISteamUser_GetVoice%(pThis%, bCompressed%, pCompressed*, iCompressedSize%, piCompressedBytesWritten*, bUncompressed%, pUncompressed*, iUncompressedSize%, piUncompressedBytesWritten*, iSampleRate%):"_BS_ISteamUser_GetVoice@36" +BS_ISteamUser_GetVoiceEx%(pThisEx%, bCompressed%, pCompressed%, iCompressedSize%, piCompressedBytesWritten%, bUncompressed%, pUncompressed%, iUncompressedSize%, piUncompressedBytesWritten%, iSampleRate%):"_BS_ISteamUser_GetVoice@36" +BS_ISteamUser_DecompressVoice(pThis%, pCompressed*, iCompressedSize%, pUncompressed*, iUncompressedSize%, iUncompressedBytesWritten*, iSampleRate%):"_BS_ISteamUser_DecompressVoice@28" +BS_ISteamUser_DecompressVoiceEx(pThis%, pCompressed*, iCompressedSize%, pUncompressed%, iUncompressedSize%, iUncompressedBytesWritten%, iSampleRate%):"_BS_ISteamUser_DecompressVoice@28" +BS_ISteamUser_GetVoiceOptimalSampleRate%(pThis%) :"_BS_ISteamUser_GetVoiceOptimalSampleRate@4" +BS_ISteamUser_GetAuthSessionTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamUser_GetAuthSessionTicket@16" +BS_ISteamUser_BeginAuthSession%(pThis%, pAuthTicket*, iAuthTicketSize%, lSteamId%):"_BS_ISteamUser_BeginAuthSession@16" +BS_ISteamUser_EndAuthSession(pThis%, lSteamId%) :"_BS_ISteamUser_EndAuthSession@8" +BS_ISteamUser_CancelAuthTicket(pThis%, hAuthTicket%) :"_BS_ISteamUser_CancelAuthTicket@8" +BS_ISteamUser_UserHasLicenseForApp%(pThis%, lSteamId%, iAppId%) :"_BS_ISteamUser_UserHasLicenseForApp@12" +BS_ISteamUser_IsBehindNAT%(pThis%) :"_BS_ISteamUser_IsBehindNAT@4" +BS_ISteamUser_AdvertiseGame%(pThis%, lSteamId%, iIp%, sPort%) :"_BS_ISteamUser_AdvertiseGame@16" +BS_ISteamUser_RequestEncryptedAppTicket%(pThis%, pData*, iDataSize%) :"_BS_ISteamUser_RequestEncryptedAppTicket@12" +BS_ISteamUser_GetEncryptedAppTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamUser_GetEncryptedAppTicket@16" +BS_ISteamUser_GetGameBadgeLevel%(pThis%, iSeries%, bFoil%) :"_BS_ISteamUser_GetGameBadgeLevel@12" +BS_ISteamUser_GetPlayerSteamLevel%(pThis%) :"_BS_ISteamUser_GetPlayerSteamLevel@4" +BS_ISteamUser_RequestStoreAuthURL%(pThis%, cRedirectUrl$) :"_BS_ISteamUser_RequestStoreAuthURL@8" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamUserStats.decls b/#Test/userlibs/BlitzSteam_SteamUserStats.decls new file mode 100644 index 0000000..8f04e41 --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamUserStats.decls @@ -0,0 +1,77 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; UserStats ------------------------------------------------------------------- +BS_UserStats%() :"_BS_UserStats@0" +BS_UserStats_RequestCurrentStats%(pThis%) :"_BS_UserStats_RequestCurrentStats@4" +BS_UserStats_GetStat%(pThis%, cName$, pData*) :"_BS_UserStats_GetStat@12" +BS_UserStats_GetStatEx%(pThis%, cName$, pData%) :"_BS_UserStats_GetStat@12" +BS_UserStats_GetStatF%(pThis%, cName$, pData*) :"_BS_UserStats_GetStatF@12" +BS_UserStats_GetStatFEx%(pThis%, cName$, pData%) :"_BS_UserStats_GetStatF@12" +BS_UserStats_SetStat%(pThis%, cName$, pData%) :"_BS_UserStats_SetStat@12" +BS_UserStats_SetStatF%(pThis%, cName$, pData#) :"_BS_UserStats_SetStatF@12" +BS_UserStats_UpdateAvgRateStat%(pThis%, cName$, fCountThisSession#, dSessionLength%):"_BS_UserStats_UpdateAvgRateStat@16" +BS_UserStats_GetAchievement%(pThis%, cName$, pbAchieved*) :"_BS_UserStats_GetAchievement@12" +BS_UserStats_GetAchievementEx%(pThis%, cName$, pbAchieved%) :"_BS_UserStats_GetAchievement@12" +BS_UserStats_SetAchievement%(pThis%, cName$) :"_BS_UserStats_SetAchievement@8" +BS_UserStats_ClearAchievement%(pThis%, cName$) :"_BS_UserStats_ClearAchievement@8" +BS_UserStats_GetAchievementAndUnlockTime%(pThis%, cName$, pbAchieved*, piUnlockTime*):"_BS_UserStats_GetAchievementAndUnlockTime@16" +BS_UserStats_GetAchievementAndUnlockTimeEx%(pThis%, cName$, pbAchieved%, piUnlockTime%):"_BS_UserStats_GetAchievementAndUnlockTime@16" +BS_UserStats_StoreStats%(pThis%) :"_BS_UserStats_StoreStats@4" +BS_UserStats_GetAchievementIcon%(pThis%, cName$) :"_BS_UserStats_GetAchievementIcon@8" +BS_UserStats_GetAchievementDisplayAttribute$(pThis%, cName$, cKey$) :"_BS_UserStats_GetAchievementDisplayAttribute@12" +BS_UserStats_IndicateAchievementProgress%(pThis%, cName$, iProgress%, iMaxProgress%):"_BS_UserStats_IndicateAchievementProgress@16" +BS_UserStats_GetNumAchievements%(pThis%) :"_BS_UserStats_GetNumAchievements@4" +BS_UserStats_GetAchievementName$(pThis%, iAchievement%) :"_BS_UserStats_GetAchievementName@8" +BS_UserStats_RequestUserStats%(pThis%, lSteamId%) :"_BS_UserStats_RequestUserStats@8" +BS_UserStats_GetUserStat%(pThis%, lSteamId%, cName$, pData*) :"_BS_UserStats_GetUserStat@16" +BS_UserStats_GetUserStatEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_UserStats_GetUserStat@16" +BS_UserStats_GetUserStatF%(pThis%, lSteamId%, cName$, pData*) :"_BS_UserStats_GetUserStatF@16" +BS_UserStats_GetUserStatFEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_UserStats_GetUserStatF@16" +BS_UserStats_GetUserAchievement%(pThis%, lSteamId%, cName$, pbAchieved*) :"_BS_UserStats_GetUserAchievement@16" +BS_UserStats_GetUserAchievementEx%(pThis%, lSteamId%, cName$, pbAchieved%) :"_BS_UserStats_GetUserAchievement@16" +BS_UserStats_GetUserAchievementAndUnlockTime%(pThis%, lSteamId%, cName$, pbAchieved*, piUnlockTime*):"_BS_UserStats_GetUserAchievementAndUnlockTime@20" +BS_UserStats_GetUserAchievementAndUnlockTimeEx%(pThis%, lSteamId%, cName$, pbAchieved%, piUnlockTime%):"_BS_UserStats_GetUserAchievementAndUnlockTime@20" +BS_UserStats_ResetAllStats%(pThis%, bAchievementsToo%) :"_BS_UserStats_ResetAllStats@8" +BS_UserStats_FindOrCreateLeaderboard%(pThis%, cLeaderboardName$, eLeaderboardSortMethod%, eLeaderboardDisplayType%):"_BS_UserStats_FindOrCreateLeaderboard@16" +BS_UserStats_FindLeaderboard%(pThis%, cLeaderboardName$) :"_BS_UserStats_FindLeaderboard@8" +BS_UserStats_GetLeaderboardName$(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardName@8" +BS_UserStats_GetLeaderboardEntryCount%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardEntryCount@8" +BS_UserStats_GetLeaderboardSortMethod%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardSortMethod@8" +BS_UserStats_GetLeaderboardDisplayType%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardDisplayType@8" +BS_UserStats_DownloadLeaderboardEntries%(pThis%, hSteamLeaderboard%, eLeaderboardDataRequest%, iRangeStart%, iRangeEnd%):"_BS_UserStats_DownloadLeaderboardEntries@20" +BS_UserStats_DownloadLeaderboardEntriesForUsers%(pThis%, hSteamLeaderboard%, plUsers*, iUserCount%):"_BS_UserStats_DownloadLeaderboardEntriesForUsers@16" +BS_UserStats_DownloadLeaderboardEntriesForUsersEx%(pThis%, hSteamLeaderboard%, plUsers%, iUserCount%):"_BS_UserStats_DownloadLeaderboardEntriesForUsers@16" +BS_UserStats_GetDownloadedLeaderboardEntry%(lpSteamUsers%, hSteamLeaderboardEntries%, iIndex%, pLeaderboardEntry*, pDetails*, iDetailsMax%):"_BS_UserStats_GetDownloadedLeaderboardEntry@24" +BS_UserStats_GetDownloadedLeaderboardEntryEx%(lpSteamUsers%, hSteamLeaderboardEntries%, iIndex%, pLeaderboardEntry%, pDetails%, iDetailsMax%):"_BS_UserStats_GetDownloadedLeaderboardEntry@24" +BS_UserStats_UploadLeaderboardScore%(pThis%, hSteamLeaderboard%, eLeaderboardUploadScoreMethod%, iScore%, pScoreDetails*, iScoreDetailsCount%):"_BS_UserStats_UploadLeaderboardScore@24" +BS_UserStats_UploadLeaderboardScoreEx%(pThis%, hSteamLeaderboard%, eLeaderboardUploadScoreMethod%, iScore%, pScoreDetails%, iScoreDetailsCount%):"_BS_UserStats_UploadLeaderboardScore@24" +BS_UserStats_AttachLeaderboardUGC%(pThis%, hSteamLeaderboard%, hUGC%) :"_BS_UserStats_AttachLeaderboardUGC@12" +BS_UserStats_GetNumberOfCurrentPlayers%(pThis%) :"_BS_UserStats_GetNumberOfCurrentPlayers@4" +BS_UserStats_RequestGlobalAchievementPercentages%(pThis%) :"_BS_UserStats_RequestGlobalAchievementPercentages@4" +BS_UserStats_GetMostAchievedAchievementInfo%(pThis%, cName$, iNameLength%, pfPercent*, pbAchieved*):"_BS_UserStats_GetMostAchievedAchievementInfo@20" +BS_UserStats_GetMostAchievedAchievementInfoEx%(pThis%, cName$, iNameLength%, pfPercent%, pbAchieved%):"_BS_UserStats_GetMostAchievedAchievementInfo@20" +BS_UserStats_GetNextMostAchievedAchievementInfo%(pThis%, iIteratorPrevious%, cName$, iNameLength%, pfPercent*, pbAchieved*):"_BS_UserStats_GetNextMostAchievedAchievementInfo@24" +BS_UserStats_GetNextMostAchievedAchievementInfoEx%(pThis%, iIteratorPrevious%, cName$, iNameLength%, pfPercent%, pbAchieved%):"_BS_UserStats_GetNextMostAchievedAchievementInfo@24" +BS_UserStats_GetAchievementAchievedPercent%(pThis%, cName$, pfPercent*) :"_BS_UserStats_GetAchievementAchievedPercent@12" +BS_UserStats_GetAchievementAchievedPercentEx%(pThis%, cName$, pfPercent%) :"_BS_UserStats_GetAchievementAchievedPercent@12" +BS_UserStats_RequestGlobalStats%(pThis%, iHistoryDays%) :"_BS_UserStats_RequestGlobalStats@8" +BS_UserStats_GetGlobalStatL%(pThis, cStatName$, plData%) :"_BS_UserStats_GetGlobalStatL@12" +BS_UserStats_GetGlobalStatD%(pThis, cStatName$, pdData%) :"_BS_UserStats_GetGlobalStatD@12" +BS_UserStats_GetGlobalStatHistoryL%(pThis, cStatName$, plDataArray%, iDataSize%):"BS_UserStats_GetGlobalStatHistoryL@16" +BS_UserStats_GetGlobalStatHistoryD%(pThis, cStatName$, pdDataArray%, iDataSize%):"BS_UserStats_GetGlobalStatHistoryD@16" \ No newline at end of file diff --git a/#Test/userlibs/BlitzSteam_SteamUtils.decls b/#Test/userlibs/BlitzSteam_SteamUtils.decls new file mode 100644 index 0000000..25c78ab --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamUtils.decls @@ -0,0 +1,21 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Utils ----------------------------------------------------------------------- +BS_SteamUtils%() :"_BS_SteamUtils@0" +BS_SteamGameServerUtils%() :"_BS_SteamGameServerUtils@0" diff --git a/#Test/userlibs/BlitzSteam_SteamVideo.decls b/#Test/userlibs/BlitzSteam_SteamVideo.decls new file mode 100644 index 0000000..f86493c --- /dev/null +++ b/#Test/userlibs/BlitzSteam_SteamVideo.decls @@ -0,0 +1,20 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Utils ----------------------------------------------------------------------- +BS_SteamVideo%() :"_BS_SteamVideo@0" diff --git a/#Test/userlibs/BlitzUtility.decls b/#Test/userlibs/BlitzUtility.decls new file mode 100644 index 0000000..4fe90cd --- /dev/null +++ b/#Test/userlibs/BlitzUtility.decls @@ -0,0 +1,306 @@ +; BlitzUtility - Expanding the normal Blitz functionality. +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzUtility.dll" +; Container ------------------------------------------------------------------- +; -- List (Single Element) +BU_List_Create%(element*) +BU_List_Destroy%(list%) +BU_List_First%(list%) +BU_List_Last%(list%) +BU_List_Previous%(list%) +BU_List_Next%(list%) +BU_List_Before%(list%, other*) +BU_List_After%(list%, other*) +BU_List_Insert(list%, element*) +BU_List_InsertEx(list%, element*, other*) +BU_List_Remove(list%, element*) +; -- TypeList (Single Type) +BU_TypeList_Create%(obj*) +BU_TypeList_Activate(list%) +BU_TypeList_Deactivate(list%) +BU_TypeList_Destroy(list%) + +; Database -------------------------------------------------------------------- +; -- SQLite3 +; Core +BU_SQLite_Version$() +BU_SQLite_Version_Number%() +BU_SQLite_SourceID$() +BU_SQLite_CompileOption_Used%(zOptName$) +BU_SQLite_CompileOption_Get$(n%) +BU_SQLite_ThreadSafe%() +BU_SQLite_Initialize%() +BU_SQLite_Shutdown%() +BU_SQLite_Sleep%(ms%) +; Open & Close +BU_SQLite_Open%(file$, db*) +BU_SQLite_Open_V2%(file$, db*, flags%, zVfs$) +BU_SQLite_Open_V2Ex%(file$, db*, flags%, zVfs%) : "BU_SQLite_Open_V2" +BU_SQLite_Close%(db%) +BU_SQLite_Close_V2%(db%) +BU_SQLite_OpenSimple%(file$) +BU_SQLite_OpenSimple_V2%(file$, flags%, zVfs$) +BU_SQLite_OpenSimple_V2Ex%(file$, flags%, zVfs%) : "BU_SQLite_OpenSimple_V2" +BU_SQLite_OpenSimpleError%() +; Error Handling +BU_SQLite_Error_Code%(db%) +BU_SQLite_Extended_Error_Code%(db%) +BU_SQLite_Error_Message$(db%) +BU_SQLite_Error_String$(errorCode%) +BU_SQLite_Extended_Result_Codes%(db%, onoff%) +; Busy Handler +BU_SQLite_Busy_Timeout%(db%, timeout%) +BU_SQLite_Busy_Handler%(db%, pHandlerFunction3IPI%, param%) +BU_SQLite_Busy_Handler_Simple%(db%, pHandlerFunc2II%) +; Memory Management +BU_SQLite_Memory_Used%() +BU_SQLite_Memory_Highwater%(bReset%) +BU_SQLite_Release_Memory%(bytes%) +BU_SQLite_DB_Release_Memory%(db%) +BU_SQLite_Randomness(n%, pBank*) +; Database Management & Modification +BU_SQLite_Exec%(db%, sql$, pCallback3PIPP%, param%, errMsg*) +BU_SQLite_ExecEx%(db%, sql$, pCallback3PIPP%, param%, errMsg%) : "BU_SQLite_Exec" +BU_SQLite_Last_Insert_RowId%(db%) +BU_SQLite_Changes%(db%) +BU_SQLite_Total_Changes%(db%) +BU_SQLite_Interrupt(db%) +BU_SQLite_Complete%(sql$) +BU_SQLite_Get_Table%(db, zSql$, pazResult*, pnRow*, pnColumn*, pzErrMessage*) +BU_SQLite_Free_Table%(result*) +BU_SQLite_Set_Authorizer%(db%, pAuth5PIPPPP, pArg%) +BU_SQLite_Trace%(db%, pTrace1PP, pArg%) +BU_SQLite_Profile%(db%, pProfile2PPI, pArg%) +BU_SQLite_Progress_Handler%(db%, nOps%, pProgress1IP%, pArg%) +BU_SQLite_URI_Parameter$(zFilename$, zParam$) +BU_SQLite_URI_Boolean%(zFilename$, zParam$, bDefault%) +BU_SQLite_URI_LongLong%(zFilename$, zParam$, bDefault%) +BU_SQLite_Limit%(db%, id%, newVal%) +; Prepared Statements +BU_SQLite_Next_Statement%(db%, pStmt%) +BU_SQLite_Prepare%(db%, zSql$, nByte%, ppStmt*) +BU_SQLite_PrepareEx%(db%, zSql$, nByte%, ppStmt%) : "BU_SQLite_Prepare" +BU_SQLite_Prepare_V2%(db%, zSql$, nByte%, ppStmt*) +BU_SQLite_Prepare_V2Ex%(db%, zSql$, nByte%, ppStmt%) : "BU_SQLite_Prepare_V2" +BU_SQLite_Statement_ReadOnly%(pStmt%) +BU_SQLite_Statement_Busy%(pStmt%) +BU_SQLite_Statement_Status%(pStmt%, op%, resetFlag%) +BU_SQLite_SQL$(pStmt%) +BU_SQLite_Database_Handle%(pStmt%) +BU_SQLite_Bind_Null%(pStmt%, index%) +BU_SQLite_Bind_Int%(pStmt%, index%, value%) +BU_SQLite_Bind_LongLong%(pStmt%, index%, pValue%) +BU_SQLite_Bind_Float%(pStmt%, index%, value#) +BU_SQLite_Bind_Double%(pStmt%, index%, pValue%) +BU_SQLite_Bind_Text%(pStmt%, index%, zData$, nData%) +BU_SQLite_Bind_Blob%(pStmt%, index%, zData$, nData%) +BU_SQLite_Bind_Value%(pStmt%, index%, pValue%) +BU_SQLite_Bind_ZeroBlob%(pStmt%, index%, bytes%) +BU_SQLite_Bind_Parameter_Count%(pStmt%) +BU_SQLite_Bind_Parameter_Name$(pStmt%, index%) +BU_SQLite_Bind_Parameter_Index%(pStmt%, zName$) +BU_SQLite_Clear_Bindings%(pStmt%) +BU_SQLite_Column_Count%(pStmt%) +BU_SQLite_Column_Name$(pStmt%, index%) +BU_SQLite_Column_DeclaredType$(pStmt%, index%) +BU_SQLite_Step%(pStmt%) +BU_SQLite_Data_Count%(pStmt%) +BU_SQLite_Column_Blob%(pStmt%, iCol%) +BU_SQLite_Column_Bytes%(pStmt%, iCol%) +BU_SQLite_Column_Float%(pStmt%, iCol%) +BU_SQLite_Column_Double%(pStmt%, iCol%) +BU_SQLite_Column_Int%(pStmt%, iCol%) +BU_SQLite_Column_LongLong%(pStmt%, iCol%) +BU_SQLite_Column_Text$(pStmt%, iCol%) +BU_SQLite_Column_Value%(pStmt%, iCol%) +BU_SQLite_Column_Type%(pStmt%, iCol%) +BU_SQLite_Finalize%(pStmt%) +BU_SQLite_Reset%(pStmt%) +; SQLite Values +BU_SQLite_Value_Blob%(pValue%) +BU_SQLite_Value_Bytes%(pValue%) +BU_SQLite_Value_Int%(pValue%) +BU_SQLite_Value_LongLong%(pValue%) +BU_SQLite_Value_Float#(pValue%) +BU_SQLite_Value_Double%(pValue%) +BU_SQLite_Value_Text$(pValue%) +BU_SQLite_Value_Type%(pValue%) +BU_SQLite_Value_Numeric_Type%(pValue%) +BU_SQLite_Value_SubType%(pValue%) +BU_SQLite_Value_Duplicate%(pValue%) +BU_SQLite_Value_Free(pValue%) + +; Time ------------------------------------------------------------------------ +; -- Time +BU_Time_Now%() +BU_Time_Create%(seconds%, minutes%, hours%, days%, months%, years%, isDST%) +BU_Time_Destroy(pTime%) +BU_Time_Format$(pTime%, formatString$) +; -- Timer +BU_Timer_Create%(Interval%, hwnd%) : "_BU_Timer_Create@8" +BU_Timer_Destroy%(Timer%) : "_BU_Timer_Destroy@4" +BU_Timer_Wait%(Timer%) : "_BU_Timer_Wait@4" +; -- SystemClock +BU_SystemClock_Now%() +BU_SystemClock_Destroy(pSystemClock%) +BU_SystemClock_FromTime%(pTime%) +BU_SystemClock_AsTime%(pSystemClock%) +; -- HighResolutionClock +BU_HighResolutionClock_Now%() +BU_HighResolutionClock_Destroy(pHighResolutionClock%) +BU_HighResolutionClock_Duration%(pHighResolutionClock%, pOther%) +BU_HighResolutionClock_DurationLL%(pHighResolutionClock%, pOther%) +BU_HighResolutionClock_DurationF#(pHighResolutionClock%, pOther%) +BU_HighResolutionClock_DurationD%(pHighResolutionClock%, pOther%) + +; Types - Long ---------------------------------------------------------------- +BU_Long_New%() :"_BU_Long_New@0" +BU_Long_Copy%(pThis%) :"_BU_Long_Copy@4" +BU_Long_Destroy(pThis%) :"_BU_Long_Destroy@4" +BU_Long_ToString$(pThis%) :"_BU_Long_ToString@4" +BU_Long_FromString%(cString$) :"_BU_Long_FromString@4" +BU_Long_FromI%(iRight%) :"_BU_Long_FromI@4" +BU_Long_FromII%(iLeft%, iRight%) :"_BU_Long_FromII@8" +BU_Long_ToI%(pThis%, iShift%) :"_BU_Long_ToI@8" +BU_Long_ToIH%(pThis%) :"_BU_Long_ToIH@4" +BU_Long_ToIL%(pThis%) :"_BU_Long_ToIL@4" +BU_Long_FromF%(Float#) :"_BU_Long_FromF@4" +BU_Long_ToF#(pThis%) :"_BU_Long_ToF@4" +BU_Long_FromD(pDouble%) :"_BU_Long_FromD@4" +BU_Long_ToD(pThis%) :"_BU_Long_ToD@4" +BU_Long_Compare%(pThis%, pRight%) :"_BU_Long_Compare@8" +BU_Long_Set%(pThis%, pOther%) :"_BU_Long_Set@8" +BU_Long_Add%(pThis%, pOther%) :"_BU_Long_Add@8" +BU_Long_Sub%(pThis%, pOther%) :"_BU_Long_Sub@8" +BU_Long_Div%(pThis%, pOther%) :"_BU_Long_Div@8" +BU_Long_Mul%(pThis%, pOther%) :"_BU_Long_Mul@8" +BU_Long_Mod%(pThis%, pOther%) :"_BU_Long_Mod@8" +BU_Long_SetI%(pThis%, iRight%) :"_BU_Long_SetI@8" +BU_Long_AddI%(pThis%, iRight%) :"_BU_Long_AddI@8" +BU_Long_SubI%(pThis%, iRight%) :"_BU_Long_SubI@8" +BU_Long_DivI%(pThis%, iRight%) :"_BU_Long_DivI@8" +BU_Long_MulI%(pThis%, iRight%) :"_BU_Long_MulI@8" +BU_Long_ModI%(pThis%, iRight%) :"_BU_Long_ModI@8" +BU_Long_SetII%(pThis%, iLeft%, iRight%) :"_BU_Long_SetII@12" +BU_Long_AddII%(pThis%, iLeft%, iRight%) :"_BU_Long_AddII@12" +BU_Long_SubII%(pThis%, iLeft%, iRight%) :"_BU_Long_SubII@12" +BU_Long_DivII%(pThis%, iLeft%, iRight%) :"_BU_Long_DivII@12" +BU_Long_MulII%(pThis%, iLeft%, iRight%) :"_BU_Long_MulII@12" +BU_Long_ModII%(pThis%, iLeft%, iRight%) :"_BU_Long_ModII@12" +BU_Long_Shift%(pThis%, iRight%) :"_BU_Long_Shift@8" + +; Double ------------------------------------------------------------------------ +BU_Double_New%() :"_BU_Double_New@0" +BU_Double_Copy%(pThis%) :"_BU_Double_Copy@4" +BU_Double_Destroy(pThis%) :"_BU_Double_Destroy@4" +BU_Double_ToString$(pThis%) :"_BU_Double_ToString@4" +BU_Double_FromString%(cString$) :"_BU_Double_FromString@4" +BU_Double_FromF%(Float#) :"_BU_Double_FromF@4" +BU_Double_ToF#(pThis%) :"_BU_Double_ToF@4" +BU_Double_FromI%(iRight%) :"_BU_Double_FromI@4" +BU_Double_ToI%(pThis%) :"_BU_Double_ToI@8" +BU_Double_FromL(pDouble%) :"_BU_Double_FromL@4" +BU_Double_ToL(pThis%) :"_BU_Double_ToL@4" +BU_Double_Compare%(pThis%, pOther%) :"_BU_Double_Compare@8" +BU_Double_Set%(pThis%, pOther%) :"_BU_Double_Set@8" +BU_Double_Add%(pThis%, pOther%) :"_BU_Double_Add@8" +BU_Double_Sub%(pThis%, pOther%) :"_BU_Double_Sub@8" +BU_Double_Div%(pThis%, pOther%) :"_BU_Double_Div@8" +BU_Double_Mul%(pThis%, pOther%) :"_BU_Double_Mul@8" +BU_Double_Mod%(pThis%, pOther%) :"_BU_Double_Mod@8" +BU_Double_SetF%(pThis%, fOther%) :"_BU_Double_SetF@8" +BU_Double_AddF%(pThis%, fOther%) :"_BU_Double_AddF@8" +BU_Double_SubF%(pThis%, fOther%) :"_BU_Double_SubF@8" +BU_Double_DivF%(pThis%, fOther%) :"_BU_Double_DivF@8" +BU_Double_MulF%(pThis%, fOther%) :"_BU_Double_MulF@8" +BU_Double_ModF%(pThis%, fOther%) :"_BU_Double_ModF@8" + +; Utility --------------------------------------------------------------------- +; -- Display Enumerator +BU_DisplayEnumerator_Create%() :"_BU_DisplayEnumerator_Create@0" +BU_DisplayEnumerator_Destroy(DisplayEnumerator%) :"_BU_DisplayEnumerator_Destroy@4" +BU_DisplayEnumerator_Enumerate%(DisplayEnumerator%) :"_BU_DisplayEnumerator_Enumerate@4" +BU_DisplayEnumerator_Count%(DisplayEnumerator%) :"_BU_DisplayEnumerator_Count@4" +BU_DisplayEnumerator_Retrieve(DisplayEnumerator%, index%, Rect*) :"_BU_DisplayEnumerator_Retrieve@12" +; -- Indexer V1 (Array) +BU_IndexerV1_Create%() +BU_IndexerV1_Destroy(Indexer%) +BU_IndexerV1_Mark(Indexer%, Used%) +BU_IndexerV1_MarkFree(Indexer%) +BU_IndexerV1_MarkUsed(Indexer%) +BU_IndexerV1_Is%(Indexer%, Used%) +BU_IndexerV1_IsFree%(Indexer%) +BU_IndexerV1_IsUsed%(Indexer%) +BU_IndexerV1_Get%(Indexer%) +BU_IndexerV1_Count%(Indexer%, Used%) +BU_IndexerV1_CountFree%(Indexer%) +BU_IndexerV1_CountUsed%(Indexer%) +; -- Indexer V2 (List) +BU_IndexerV2_Create%() +BU_IndexerV2_Destroy(Indexer%) +BU_IndexerV2_Mark(Indexer%, Used%) +BU_IndexerV2_MarkFree(Indexer%) +BU_IndexerV2_MarkUsed(Indexer%) +BU_IndexerV2_Is%(Indexer%, Used%) +BU_IndexerV2_IsFree%(Indexer%) +BU_IndexerV2_IsUsed%(Indexer%) +BU_IndexerV2_Get%(Indexer%) +BU_IndexerV2_Count%(Indexer%, Used%) +BU_IndexerV2_CountFree%(Indexer%) +BU_IndexerV2_CountUsed%(Indexer%) +; -- Mass Operation +BU_MassOp_Create%(length%) +BU_MassOp_Destroy(massop%) +BU_MassOp_Instruction(massop%, index%, type%, code%, leftOperand%, rightOperand%, result%) +BU_MassOp_Run(massop%) +; -- Window Message Handler +BU_WindowMessageHandler_Install(hwnd%) +BU_WindowMessageHandler_Uninstall(hwnd%) +BU_WindowMessageHandler_Message_Close%(hwnd%) +BU_WindowMessageHandler_Message_Destroy%(hwnd%) +BU_WindowMessageHandler_Message_Resize%(hwnd%, point*) + +; Helpers --------------------------------------------------------------------- +.lib " " +; -- Blitz Functions +BU_Helper_Window_LockPointer(HWND%) +BU_Helper_Window_LockPointerAuto(HWND%) +BU_Helper_Window_MakeBorderless(HWND%) +BU_Helper_Window_Center(HWND%, Monitor%) +BU_Helper_Window_Fill(HWND%, Monitor%) +; -- Windows API (User32) +.lib "User32.dll" +BU_User32_ClientToScreen%(hwnd%, point*) : "ClientToScreen" +BU_User32_ClientToScreenEx%(hwnd%, point%) : "ClientToScreen" +BU_User32_ClipCursor%(rect*) : "ClipCursor" +BU_User32_ClipCursorEx%(ptr%) : "ClipCursor" +BU_User32_GetActiveWindow%() : "GetActiveWindow" +BU_User32_GetSystemMetrics%(index%) : "GetSystemMetrics" +BU_User32_SetWindowLong%(hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA" +BU_User32_GetWindowLong%(hwnd%, index%) : "GetWindowLongA" +BU_User32_GetWindowRect%(hwnd%, rect*) : "GetWindowRect" +BU_User32_GetWindowRectEx%(hwnd%, rect%) : "GetWindowRect" +BU_User32_GetClientRect%(hwnd%, rect*) : "GetClientRect" +BU_User32_GetClientRectEx%(hwnd%, rect%) : "GetClientRect" +BU_User32_SetWindowPos%(hwnd%, hWndInsertAfter%, x%, y%, cx%, cy%, wFlags%) : "SetWindowPos" +BU_User32_MessageBox%(hwnd%, lpText$, lpCaption$, uType%) : "MessageBoxA" +; -- Windows API (Kernel32) +.lib "Kernel32.dll" +BU_Kernel32_FlushFileBuffers%(hFile%) : "FlushFileBuffers" +FlushFile%(hFile%) : "FlushFileBuffers" +BU_Kernel32_QueryPerformanceCounter%(pLongLong%) : "QueryPerformanceCounter" +BU_Kernel32_QueryPerformanceFrequency%(pLongLong%) : "QueryPerformanceFrequency" \ No newline at end of file diff --git a/#Test/userlibs/BlitzUtility.dll b/#Test/userlibs/BlitzUtility.dll new file mode 100644 index 0000000..b980c69 Binary files /dev/null and b/#Test/userlibs/BlitzUtility.dll differ diff --git a/#Test/userlibs/Draw3D2.decls b/#Test/userlibs/Draw3D2.decls new file mode 100644 index 0000000..9b2046d --- /dev/null +++ b/#Test/userlibs/Draw3D2.decls @@ -0,0 +1,82 @@ +.lib "user32.dll" + +Draw3D2_GCP% (lpPoint*) : "GetCursorPos" +Draw3D2_GWR% (hwnd%,lpRect*) : "GetWindowRect" + +.lib " " + +MouseX3D( ) +MouseY3D( ) +MouseXOld3D( ) +MouseYOld3D( ) +MouseXSpeed3D( ) +MouseYSpeed3D( ) +MouseHit3D( ) +MousePit3D( ) +MouseDown3D( ) +MouseOver3D( ) +MouseTest3D( ) +ProjectedX3D( ) +ProjectedY3D( ) +GetMOW3D( ) + +BumpImage3D( main_handle%, bump_handle% ) +IlluImage3D( main_handle%, illu_handle% ) +CameraProjectEntity3D( entity_handle%, offset_adding% ) +CameraProjectCoords3D( x#, y#, z#, offset_Adding% ) +ChangeCamera3D( camera% ) +CheckQuad3D( x1#, y1#, x2#, y2#, x3#, y3#, x4#, y4#, button%, handle% ) +Clear3D( handle% ) +ClearOff3D( handle% ) +ClearOn3D( handle% ) +ColorG3D( red%, green%, blue%, alpha# ) +ColorT3D( red%, green%, blue%, alpha# ) +CopyImage3D( handle%, mode%, blend%, pivot%, order% ) +CreateImage3D( size%, mode%, blend%, pivot%, order% ) +CreatePivot3D( parent%, x_position#, y_position#, z_position#, x_rotation#, y_rotation#, z_rotation#, scale# ) +DeffBzBend3D( x5#, y5#, x6#, y6#, x7#, y7#, x8#, y8# ) +DeffBzQuad3D( x1#, y1#, x2#, y2#, x3#, y3#, x4#, y4# ) +DrawBzQuad3D( handle%, frame%, depth%, color%, z_position% ) +DrawFree3D( ) +DrawImage3D( handle%, x#, y#, button%, angle#, scale#, frame% ) +DrawImage4D( handle%, x#, y#, z#, button%, angle#, scale#, frame% ) +DrawInit3D( camera% ) +DrawLine3D( handle%, x1#, y1#, x2#, y2#, size#, mode%, frame% ) +DrawLine4D( handle%, x1#, y1#, z1#, x2#, y2#, z2#, size#, frame% ) +DrawNerd3D( handle%, x1#, y1#, x2#, y2#, x3#, y3#, x4#, y4#, u_set#, v_set#, w_set#, h_set#, button% ) +DrawOrder3D( handle%, order% ) +DrawQuad3D( handle%, x1#, y1#, x2#, y2#, x3#, y3#, x4#, y4#, button%, frame% ) +DrawRect3D( handle%, x#, y#, u_set#, v_set#, w_set#, h_set#, button%, angle#, scale# ) +DrawTile3D( handle%, x1#, y1#, x2#, y2#, x3#, y3#, x4#, y4#, scale#, button% ) +FlushFace3D( handle% ) +FontRange3D( link%, u_set%, v_set%, w_set%, h_set%, rows% ) +FreeImage3D( handle% ) +GetPixel3D( handle%, x%, y%, mask% ) +GetTexel3D( handle%, x1#, y1#, x2#, y2#, angle#, scale#, mask% ) +GrabAnimImage3D( handle%, w_set%, h_set%, start%, frames%, x_scale#, y_scale# ) +GrabImage3D( handle%, u_set%, v_set%, w_set%, h_set%, x_scale#, y_scale# ) +ImageSize3D( handle%, source% ) +ImagesOverlap3D( handle1%, x1#, y1#, angle1#, scale1#, handle2%, x2#, y2#, angle2#, scale2# ) +LoadImage3D( file$, mode%, blend%, pivot%, order% ) +MaskImage3D( handle%, rgb% ) +OnLockBuffer3D( handle% ) +Origin3D( x#, y#, pivot% ) +SetFont3D( handle%, scale_font#, height_scale_font#, padding_font#, italic_font# ) +SetPivot3D( handle%, x_position#, y_position#, z_position#, x_rotation#, y_rotation#, z_rotation#, scale# ) +SetPixel3D( handle%, x%, y%, argb% ) +SetTexel3D( handle%, x1#, y1#, x2#, y2#, angle#, scale#, argb% ) +StringHeight3D( handle% ) +StringWidth3D( handle%, string$ ) +Text3D( handle%, x#, y#, string$, align#, button%, angle# ) +Text3DTT( font_handle%, image_handle%, x%, y%, string$ ) +UnLockBuffer3D( handle% ) +USwap3D( handle%, frame%, mode% ) +VSwap3D( handle%, frame%, mode% ) + +ColorN3D( reg%, green%, blue%, alpha# ) +Line3D( handle%, x1#, y1#, x2#, y2#, line_width# ) +Oval3D( handle%, x#, y#, x_size#, y_size#, fill%, border_width# ) +Plot3D( handle%, x#, y#, size# ) +Poly3D( handle%, x1#, y1#, x2#, y2#, x3#, y3# ) +Rect3D( handle%, x#, y#, x_size#, y_size#, fill%, border_width# ) + diff --git a/#Test/userlibs/DrawSGG.decls b/#Test/userlibs/DrawSGG.decls new file mode 100644 index 0000000..eb9bf3a --- /dev/null +++ b/#Test/userlibs/DrawSGG.decls @@ -0,0 +1,49 @@ +.lib " " + +SGGOver3D( ) +SGGDown3D( ) +SGGHit3D( ) +SGGSpz3D( ) +SGGKey3D( ) +SGGEntry( ) + +SGGOUTLAY( ) +SGGBUTTON( ) +SGGINTAKE( ) +SGGROSTER( ) +SGGSLIDER( ) + +AddingSGG%( handle%, arts%, x_pos%, y_pos%, string$, align%, width% ) +AppendSGG%( handle%, string$ ) +CreateSGG%( x_pos%, y_pos%, width%, height%, sgg_file$, pivot%, order% ) +DeleteSGG%( handle%, list_pos% ) +DrawSGG%( handle%, x_pos%, y_pos% ) +FreeSGG%( handle% ) + +GetArtsSGG%( handle% ) +GetAlignSGG%( handle% ) +GetBoundSGG%( handle% ) +GetEntriesSGG%( handle% ) +GetListPosSGG%( handle% ) +GetSelectSGG%( handle% ) +GetStringSGG$( handle% ) +GetWidthSGG%( handle% ) +GetXPosSGG%( handle% ) +GetYPosSGG%( handle% ) + +SetArtsSGG%( handle%, value% ) +SetAlignSGG%( handle%, value% ) +SetBoundSGG%( handle%, value% ) +SetListPosSGG%( handle%, value% ) +SetSelectSGG%( handle%, value% ) +SetStringSGG%( handle%, value% ) +SetWidthSGG%( handle%, value% ) +SetXPosSGG%( handle%, value% ) +SetYPosSGG%( handle%, value% ) + +AddListPosSGG%( handle%, value% ) +AddSelectSGG%( handle%, value% ) +DrawButton3D%( handle%, x_pos%, y_pos%, string$, align%, width% ) +InviteSGG%( handle%, string$, dash%, directory$ ) +SortSGG%( handle% ) + diff --git a/#Test/userlibs/DrawXTD.decls b/#Test/userlibs/DrawXTD.decls new file mode 100644 index 0000000..56100e6 --- /dev/null +++ b/#Test/userlibs/DrawXTD.decls @@ -0,0 +1,32 @@ +.lib " " + +AdaptKPID( handle%, id%, slide# ) +AddCL( handle%, x1#, y1#, x2#, y2# ) +AddKP( handle%, x_pos%, y_pos%, radius%, mass%, collision_type%, torque%, id% ) +AddVK( handle%, source_kp%, destin_kp%, spring%, damping%, id% ) +AddVKIDLen( bank%, id%, lenght# ) +AppCED( handle%, loops# ) +BreakKPID( handle%, id%, linear#, fricty#, free_abs# ) +DelCED( handle% ) +DrawCED( handle% ) +DrawKP( handle%, Image% ) +FreeCED( handle% ) +GetCEDXPos#( handle%, mode% ) +GetCEDYPos#( handle%, mode% ) +GetID( file$, id% ) +LoadCED( file$, scale# ) +LoadVED( file$, scale#, z_step% ) +NewCED( ) +SetCED( handle%, x_pos#, y_pos#, angle#, mode% ) +TurnKPID( handle%, id%, speed#, damping# ) +CollBzQuad3D( area_code%, depth% ) +DrawImageKP( handle%, x_pos#, y_pos#, angle#, size#, frame% ) + +DropSED( image_handle%, sed_handle%, x_pos#, y_pos#, x_adding#, y_adding#, angle#, speed#, adder# ) +LoadSED( file$ ) +AnimSED( ) + +AnimFlakes4D( handle%, x_speed#, y_speed#, z_speed#, muddle# ) +AnimRifled4D( handle%, x_speed#, y_speed#, z_speed#, muddle#, expand# ) +CreateFlakes4D( particles%, dimension#, fading#, lakes# ) + diff --git a/#Test/userlibs/InputEx.decls b/#Test/userlibs/InputEx.decls new file mode 100644 index 0000000..897b4b4 --- /dev/null +++ b/#Test/userlibs/InputEx.decls @@ -0,0 +1,32 @@ +.lib "User32.dll" +InputEx_User32_FindWindow%(class$, title$):"FindWindowA" +InputEx_User32_GetActiveWindow%():"GetActiveWindow" +InputEx_User32_GetCursorPosition%(point*):"GetCursorPos" +InputEx_User32_ScreenToClient%(hwnd%, point*):"ScreenToClient" +InputEx_User32_MapVirtualKeyEx%(code%, mapType%, dwhkl%):"MapVirtualKeyExA" +InputEx_User32_GetAsyncKeyState%(vkey%):"GetAsyncKeyState" + +.lib " " +InputEx_Init() +InputEx_Update() +InputEx_VKeyTime%(VirtualKey%) +InputEx_VKeyDownEx%(VirtualKey%) +InputEx_VKeyDown%(VirtualKey%) +InputEx_VKeyHitEx%(VirtualKey%) +InputEx_VKeyHit%(VirtualKey%) +InputEx_KeyTime%(ScanCode%) +InputEx_KeyDownEx%(ScanCode%) +InputEx_KeyDown%(ScanCode%) +InputEx_KeyHitEx%(ScanCode%) +InputEx_KeyHit%(ScanCode%) +InputEx_MouseTime%(Button%) +InputEx_MouseDownEx%(Button%) +InputEx_MouseDown%(Button%) +InputEx_MouseHitEx%(Button%) +InputEx_MouseHit%(Button%) +KeyTime%(Key%) +KeyDownEx%(Key%) +KeyHitEx%(Key%) +MouseTime%(Button%) +MouseDownEx%(Button%) +MouseHitEx%(Button%) \ No newline at end of file diff --git a/#Test/userlibs/Kernel32.decls b/#Test/userlibs/Kernel32.decls new file mode 100644 index 0000000..fcab8a1 --- /dev/null +++ b/#Test/userlibs/Kernel32.decls @@ -0,0 +1,31 @@ +.lib "Kernel32.dll" +; Mutex +Kernel32_CreateMutex%( lpMutexAttributes%, bInitialOwner%, lpName$ ) : "CreateMutexA" +Kernel32_CreateMutex2%( lpMutexAttributes%, bInitialOwner%, lpName% ) : "CreateMutexA" +Kernel32_ReleaseMutex%( hMutex% ) : "ReleaseMutex" + +; Thread +Kernel32_CreateThread%( lpThreadAttributes%, dwStackSize%, lpStartAddress%, lpParameter%, dwCreationFlags%, lpThreadId% ) : "CreateThread" +Kernel32_TerminateThread%( hThread%, dwExitCode% ) : "TerminateThread" +Kernel32_ExitThread%( dwExitCode% ) : "ExitThread" +Kernel32_GetExitCodeThread%( hThread% ) : "GetExitCodeThread" +Kernel32_ResumeThread%(hThread%) : "ResumeThread" +Kernel32_SuspendThread%(hThread%) : "SuspendThread" + +; Semaphorre +Kernel32_CreateSemaphore%(lpSemaphoreAttributes%, lInitialCount%, lMaximumCount%, lpName$) : "CreateSemaphoreA" +Kernel32_CreateSemaphore2%(lpSemaphoreAttributes%, lInitialCount%, lMaximumCount%, lpName%) : "CreateSemaphoreA" +Kernel32_ReleaseSemaphore%(hSemaphore%, lReleaseCount%, lpPreviousCount%) : "ReleaseSemaphore" + +; Objects +Kernel32_WaitForSingleObject%( hHandle%, dwMilliseconds% ) : "WaitForSingleObject" +Kernel32_WaitForMultipleObjects%( nCount%, lpHandles*, bWaitAll%, dwMilliseconds% ) : "WaitForMultipleObjects" + +; Other +Kernel32_CloseHandle%( hObject% ) : "CloseHandle" +Kernel32_GetLastError%( ) : "GetLastError" +Kernel32_FormatMessage$( dwFlags%, lpSource*, dwMessageId%, dwLanguageId%, lpBuffer$, nSize%, Arguments*) : "FormatMessage" +Kernel32_ExitProcess( uExitCode% ) : "ExitProcess" + +.lib "User32.dll" +User32_MessageBox(hwnd%, lpText$, lpCaption$, uType%) : "MessageBoxA" \ No newline at end of file diff --git a/_release/userlibs/UserLibs.txt b/#Test/userlibs/UserLibs.txt similarity index 97% rename from _release/userlibs/UserLibs.txt rename to #Test/userlibs/UserLibs.txt index 1f1d3de..792b5c0 100644 --- a/_release/userlibs/UserLibs.txt +++ b/#Test/userlibs/UserLibs.txt @@ -1,123 +1,123 @@ - -New DLL interface spec ----------------------- - -There is now a directory in the root blitzpath called 'userlibs'. - -By adding DLLs and '.decls' files to this directory, you can extend blitz's command set. - -DLLs contain actually library code, while .decls files contain 'declarations' to be added to the -base command set. These declarations describe the functions contained in the Dll. - - -Format of decls files ---------------------- - -Decls files should always start with a '.lib' directive, followed by the quoted name of the DLL to be -loaded, eg: - -.lib "mylib.dll" - -Following the .lib is a list of function declarations. The syntax of these is identical to -function declarations in Blitz, with the following exceptions: - -* No default parameter values are allowed. - -* If no function return type is specified, the function is a 'void' function - ie: it returns nothing. - -* Instead of object parameters, you can only specify 'void*' parameters using a '*' type tag. Such -parameters can be assigned ANY object or bank, so BE CAREFUL! - -* A declaration may be optionally followed by a 'decorated name'. This takes the form of a ':' -followed by a quoted string denoting the decorated name, eg: - -MyFunction( text$ ):"_MyFunction@4" -MessageBox%( hwnd,text$,title$,style ):"MessageBoxA" - -The decorated name is the name of the function as it appears in the dll, and only needs to be -specified if it is different from the actual function name. - - -Writing DLLs ------------- - -All functions MUST use the _stdcall calling convention. - -Floats are passed and returned as per standard C/C++ conventions. - -Strings are passed and returned in 'C' format - ie: a pointer to a null-terminated sequence of -characters. - -Returned strings must be in a 'static' memory buffer. Once the function returns, this string is -immediately copied into an internal Blitz style string, so its OK to share this buffer between -multiple functions. - -Both banks and objects can be passed to functions. The value passed is the address of the first byte -of storage. No information is sent regarding the size or type of memory passed so, again, BE CAREFUL! - -Neither Banks or objects can be returned from functions. - -Arrays are not supported at all. - -VisualC decorates symbols quite heavily! If you are coding in 'C', the necessary stdcall specifier -will cause a '_' to be prepended, and a '@' (followed by the number of bytes passed to the function -- ie: number of parameters*4) to be appended. So, something like: 'void _stdcall MyFunc( int x )' -will end up as '_MyFunc@4'. In C++, the name decoration is even messier! But you can supress it by -using the 'extern "C"' feature (see examples below) so you're just left with the 'C' stdcall mess. - -Other languages such as Delphi and Purebasic don't appear to suffer from this feature, but it can be -worthwhile looking through dll symbols if you're having problems. Check out PEview at -http://www.magma.ca/~wjr Open your dll and select 'SECTION .rdata'/'EXPORT address table' -to have a look at the exported symbols your compiler has seen fit to bestow upon your dll. - -Example -------- - -Ok, here's a little C++ example, as it would appear in VisualC. - -First, we write the DLL: - -//demo.dll -// -#include -#include -#include - -#define BBDECL extern "C" _declspec(dllexport) -#define BBCALL _stdcall - -//returns a float and has 6 float parameters -BBDECL float BBCALL VecDistance( float x1,float y1,float z1,float x2,float y2,float z2 ){ - float dx=x1-x2,dy=y1-y2,dz=z1-z2; - return sqrtf( dx*dx+dy*dy+dz*dz ); -} - -//returns a string and has one string parameter -BBDECL const char * BBCALL ShuffleString( const char *str ){ - static char *_buf; - - int sz=strlen(str); - - delete[] _buf; - _buf=new char[ sz+1 ]; - strcpy( _buf,str ); - - for( int k=0;k +#include +#include + +#define BBDECL extern "C" _declspec(dllexport) +#define BBCALL _stdcall + +//returns a float and has 6 float parameters +BBDECL float BBCALL VecDistance( float x1,float y1,float z1,float x2,float y2,float z2 ){ + float dx=x1-x2,dy=y1-y2,dz=z1-z2; + return sqrtf( dx*dx+dy*dy+dz*dz ); +} + +//returns a string and has one string parameter +BBDECL const char * BBCALL ShuffleString( const char *str ){ + static char *_buf; + + int sz=strlen(str); + + delete[] _buf; + _buf=new char[ sz+1 ]; + strcpy( _buf,str ); + + for( int k=0;k // needed for UNICODE functions + +#if defined(FREEIMAGE_LIB) + #define DLL_API + #define DLL_CALLCONV +#else + #if defined(_WIN32) || defined(__WIN32__) + #define DLL_CALLCONV __stdcall + // The following ifdef block is the standard way of creating macros which make exporting + // from a DLL simpler. All files within this DLL are compiled with the FREEIMAGE_EXPORTS + // symbol defined on the command line. this symbol should not be defined on any project + // that uses this DLL. This way any other project whose source files include this file see + // DLL_API functions as being imported from a DLL, wheras this DLL sees symbols + // defined with this macro as being exported. + #ifdef FREEIMAGE_EXPORTS + #define DLL_API __declspec(dllexport) + #else + #define DLL_API __declspec(dllimport) + #endif // FREEIMAGE_EXPORTS + #else + // try the gcc visibility support (see http://gcc.gnu.org/wiki/Visibility) + #if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) + #ifndef GCC_HASCLASSVISIBILITY + #define GCC_HASCLASSVISIBILITY + #endif + #endif // __GNUC__ + #define DLL_CALLCONV + #if defined(GCC_HASCLASSVISIBILITY) + #define DLL_API __attribute__ ((visibility("default"))) + #else + #define DLL_API + #endif + #endif // WIN32 / !WIN32 +#endif // FREEIMAGE_LIB + +// Endianness: +// Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined. +// If your big endian system isn't being detected, add an OS specific check +// or define any of FREEIMAGE_BIGENDIAN and FREEIMAGE_LITTLEENDIAN directly +// to specify the desired endianness. +#if (!defined(FREEIMAGE_BIGENDIAN) && !defined(FREEIMAGE_LITTLEENDIAN)) + #if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || defined(__BIG_ENDIAN__) + #define FREEIMAGE_BIGENDIAN + #endif // BYTE_ORDER +#endif // !FREEIMAGE_[BIG|LITTLE]ENDIAN + +// Color-Order: +// The specified order of color components red, green and blue affects 24- +// and 32-bit images of type FIT_BITMAP as well as the colors that are part +// of a color palette. All other images always use RGB order. By default, +// color order is coupled to endianness: +// little-endian -> BGR +// big-endian -> RGB +// However, you can always define FREEIMAGE_COLORORDER to any of the known +// orders FREEIMAGE_COLORORDER_BGR (0) and FREEIMAGE_COLORORDER_RGB (1) to +// specify your preferred color order. +#define FREEIMAGE_COLORORDER_BGR 0 +#define FREEIMAGE_COLORORDER_RGB 1 +#if (!defined(FREEIMAGE_COLORORDER)) || ((FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_BGR) && (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB)) + #if defined(FREEIMAGE_BIGENDIAN) + #define FREEIMAGE_COLORORDER FREEIMAGE_COLORORDER_RGB + #else + #define FREEIMAGE_COLORORDER FREEIMAGE_COLORORDER_BGR + #endif // FREEIMAGE_BIGENDIAN +#endif // FREEIMAGE_COLORORDER + +// Ensure 4-byte enums if we're using Borland C++ compilers +#if defined(__BORLANDC__) +#pragma option push -b +#endif + +// For C compatibility -------------------------------------------------------- + +#ifdef __cplusplus +#define FI_DEFAULT(x) = x +#define FI_ENUM(x) enum x +#define FI_STRUCT(x) struct x +#else +#define FI_DEFAULT(x) +#define FI_ENUM(x) typedef int x; enum x +#define FI_STRUCT(x) typedef struct x x; struct x +#endif + +// Bitmap types ------------------------------------------------------------- + +FI_STRUCT (FIBITMAP) { void *data; }; +FI_STRUCT (FIMULTIBITMAP) { void *data; }; + +// Types used in the library (directly copied from Windows) ----------------- + +#if defined(__MINGW32__) && defined(_WINDOWS_H) +#define _WINDOWS_ // prevent a bug in MinGW32 +#endif // __MINGW32__ + +#ifndef _WINDOWS_ +#define _WINDOWS_ + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef NULL +#define NULL 0 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#ifndef _MSC_VER +// define portable types for 32-bit / 64-bit OS +#include +typedef int32_t BOOL; +typedef uint8_t BYTE; +typedef uint16_t WORD; +typedef uint32_t DWORD; +typedef int32_t LONG; +typedef int64_t INT64; +typedef uint64_t UINT64; +#else +// MS is not C99 ISO compliant +typedef long BOOL; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef long LONG; +typedef signed __int64 INT64; +typedef unsigned __int64 UINT64; +#endif // _MSC_VER + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(push, 1) +#else +#pragma pack(1) +#endif // WIN32 + +typedef struct tagRGBQUAD { +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; +#else + BYTE rgbRed; + BYTE rgbGreen; + BYTE rgbBlue; +#endif // FREEIMAGE_COLORORDER + BYTE rgbReserved; +} RGBQUAD; + +typedef struct tagRGBTRIPLE { +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR + BYTE rgbtBlue; + BYTE rgbtGreen; + BYTE rgbtRed; +#else + BYTE rgbtRed; + BYTE rgbtGreen; + BYTE rgbtBlue; +#endif // FREEIMAGE_COLORORDER +} RGBTRIPLE; + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(pop) +#else +#pragma pack() +#endif // WIN32 + +typedef struct tagBITMAPINFOHEADER{ + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} BITMAPINFOHEADER, *PBITMAPINFOHEADER; + +typedef struct tagBITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[1]; +} BITMAPINFO, *PBITMAPINFO; + +#endif // _WINDOWS_ + +// Types used in the library (specific to FreeImage) ------------------------ + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(push, 1) +#else +#pragma pack(1) +#endif // WIN32 + +/** 48-bit RGB +*/ +typedef struct tagFIRGB16 { + WORD red; + WORD green; + WORD blue; +} FIRGB16; + +/** 64-bit RGBA +*/ +typedef struct tagFIRGBA16 { + WORD red; + WORD green; + WORD blue; + WORD alpha; +} FIRGBA16; + +/** 96-bit RGB Float +*/ +typedef struct tagFIRGBF { + float red; + float green; + float blue; +} FIRGBF; + +/** 128-bit RGBA Float +*/ +typedef struct tagFIRGBAF { + float red; + float green; + float blue; + float alpha; +} FIRGBAF; + +/** Data structure for COMPLEX type (complex number) +*/ +typedef struct tagFICOMPLEX { + /// real part + double r; + /// imaginary part + double i; +} FICOMPLEX; + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(pop) +#else +#pragma pack() +#endif // WIN32 + +// Indexes for byte arrays, masks and shifts for treating pixels as words --- +// These coincide with the order of RGBQUAD and RGBTRIPLE ------------------- + +#ifndef FREEIMAGE_BIGENDIAN +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR +// Little Endian (x86 / MS Windows, Linux) : BGR(A) order +#define FI_RGBA_RED 2 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 0 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0x00FF0000 +#define FI_RGBA_GREEN_MASK 0x0000FF00 +#define FI_RGBA_BLUE_MASK 0x000000FF +#define FI_RGBA_ALPHA_MASK 0xFF000000 +#define FI_RGBA_RED_SHIFT 16 +#define FI_RGBA_GREEN_SHIFT 8 +#define FI_RGBA_BLUE_SHIFT 0 +#define FI_RGBA_ALPHA_SHIFT 24 +#else +// Little Endian (x86 / MaxOSX) : RGB(A) order +#define FI_RGBA_RED 0 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 2 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0x000000FF +#define FI_RGBA_GREEN_MASK 0x0000FF00 +#define FI_RGBA_BLUE_MASK 0x00FF0000 +#define FI_RGBA_ALPHA_MASK 0xFF000000 +#define FI_RGBA_RED_SHIFT 0 +#define FI_RGBA_GREEN_SHIFT 8 +#define FI_RGBA_BLUE_SHIFT 16 +#define FI_RGBA_ALPHA_SHIFT 24 +#endif // FREEIMAGE_COLORORDER +#else +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR +// Big Endian (PPC / none) : BGR(A) order +#define FI_RGBA_RED 2 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 0 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0x0000FF00 +#define FI_RGBA_GREEN_MASK 0x00FF0000 +#define FI_RGBA_BLUE_MASK 0xFF000000 +#define FI_RGBA_ALPHA_MASK 0x000000FF +#define FI_RGBA_RED_SHIFT 8 +#define FI_RGBA_GREEN_SHIFT 16 +#define FI_RGBA_BLUE_SHIFT 24 +#define FI_RGBA_ALPHA_SHIFT 0 +#else +// Big Endian (PPC / Linux, MaxOSX) : RGB(A) order +#define FI_RGBA_RED 0 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 2 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0xFF000000 +#define FI_RGBA_GREEN_MASK 0x00FF0000 +#define FI_RGBA_BLUE_MASK 0x0000FF00 +#define FI_RGBA_ALPHA_MASK 0x000000FF +#define FI_RGBA_RED_SHIFT 24 +#define FI_RGBA_GREEN_SHIFT 16 +#define FI_RGBA_BLUE_SHIFT 8 +#define FI_RGBA_ALPHA_SHIFT 0 +#endif // FREEIMAGE_COLORORDER +#endif // FREEIMAGE_BIGENDIAN + +#define FI_RGBA_RGB_MASK (FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK) + +// The 16bit macros only include masks and shifts, since each color element is not byte aligned + +#define FI16_555_RED_MASK 0x7C00 +#define FI16_555_GREEN_MASK 0x03E0 +#define FI16_555_BLUE_MASK 0x001F +#define FI16_555_RED_SHIFT 10 +#define FI16_555_GREEN_SHIFT 5 +#define FI16_555_BLUE_SHIFT 0 +#define FI16_565_RED_MASK 0xF800 +#define FI16_565_GREEN_MASK 0x07E0 +#define FI16_565_BLUE_MASK 0x001F +#define FI16_565_RED_SHIFT 11 +#define FI16_565_GREEN_SHIFT 5 +#define FI16_565_BLUE_SHIFT 0 + +// ICC profile support ------------------------------------------------------ + +#define FIICC_DEFAULT 0x00 +#define FIICC_COLOR_IS_CMYK 0x01 + +FI_STRUCT (FIICCPROFILE) { + WORD flags; //! info flag + DWORD size; //! profile's size measured in bytes + void *data; //! points to a block of contiguous memory containing the profile +}; + +// Important enums ---------------------------------------------------------- + +/** I/O image format identifiers. +*/ +FI_ENUM(FREE_IMAGE_FORMAT) { + FIF_UNKNOWN = -1, + FIF_BMP = 0, + FIF_ICO = 1, + FIF_JPEG = 2, + FIF_JNG = 3, + FIF_KOALA = 4, + FIF_LBM = 5, + FIF_IFF = FIF_LBM, + FIF_MNG = 6, + FIF_PBM = 7, + FIF_PBMRAW = 8, + FIF_PCD = 9, + FIF_PCX = 10, + FIF_PGM = 11, + FIF_PGMRAW = 12, + FIF_PNG = 13, + FIF_PPM = 14, + FIF_PPMRAW = 15, + FIF_RAS = 16, + FIF_TARGA = 17, + FIF_TIFF = 18, + FIF_WBMP = 19, + FIF_PSD = 20, + FIF_CUT = 21, + FIF_XBM = 22, + FIF_XPM = 23, + FIF_DDS = 24, + FIF_GIF = 25, + FIF_HDR = 26, + FIF_FAXG3 = 27, + FIF_SGI = 28, + FIF_EXR = 29, + FIF_J2K = 30, + FIF_JP2 = 31, + FIF_PFM = 32, + FIF_PICT = 33, + FIF_RAW = 34, + FIF_WEBP = 35, + FIF_JXR = 36 +}; + +/** Image type used in FreeImage. +*/ +FI_ENUM(FREE_IMAGE_TYPE) { + FIT_UNKNOWN = 0, //! unknown type + FIT_BITMAP = 1, //! standard image : 1-, 4-, 8-, 16-, 24-, 32-bit + FIT_UINT16 = 2, //! array of unsigned short : unsigned 16-bit + FIT_INT16 = 3, //! array of short : signed 16-bit + FIT_UINT32 = 4, //! array of unsigned long : unsigned 32-bit + FIT_INT32 = 5, //! array of long : signed 32-bit + FIT_FLOAT = 6, //! array of float : 32-bit IEEE floating point + FIT_DOUBLE = 7, //! array of double : 64-bit IEEE floating point + FIT_COMPLEX = 8, //! array of FICOMPLEX : 2 x 64-bit IEEE floating point + FIT_RGB16 = 9, //! 48-bit RGB image : 3 x 16-bit + FIT_RGBA16 = 10, //! 64-bit RGBA image : 4 x 16-bit + FIT_RGBF = 11, //! 96-bit RGB float image : 3 x 32-bit IEEE floating point + FIT_RGBAF = 12 //! 128-bit RGBA float image : 4 x 32-bit IEEE floating point +}; + +/** Image color type used in FreeImage. +*/ +FI_ENUM(FREE_IMAGE_COLOR_TYPE) { + FIC_MINISWHITE = 0, //! min value is white + FIC_MINISBLACK = 1, //! min value is black + FIC_RGB = 2, //! RGB color model + FIC_PALETTE = 3, //! color map indexed + FIC_RGBALPHA = 4, //! RGB color model with alpha channel + FIC_CMYK = 5 //! CMYK color model +}; + +/** Color quantization algorithms. +Constants used in FreeImage_ColorQuantize. +*/ +FI_ENUM(FREE_IMAGE_QUANTIZE) { + FIQ_WUQUANT = 0, //! Xiaolin Wu color quantization algorithm + FIQ_NNQUANT = 1, //! NeuQuant neural-net quantization algorithm by Anthony Dekker + FIQ_LFPQUANT = 2 //! Lossless Fast Pseudo-Quantization Algorithm by Carsten Klein +}; + +/** Dithering algorithms. +Constants used in FreeImage_Dither. +*/ +FI_ENUM(FREE_IMAGE_DITHER) { + FID_FS = 0, //! Floyd & Steinberg error diffusion + FID_BAYER4x4 = 1, //! Bayer ordered dispersed dot dithering (order 2 dithering matrix) + FID_BAYER8x8 = 2, //! Bayer ordered dispersed dot dithering (order 3 dithering matrix) + FID_CLUSTER6x6 = 3, //! Ordered clustered dot dithering (order 3 - 6x6 matrix) + FID_CLUSTER8x8 = 4, //! Ordered clustered dot dithering (order 4 - 8x8 matrix) + FID_CLUSTER16x16= 5, //! Ordered clustered dot dithering (order 8 - 16x16 matrix) + FID_BAYER16x16 = 6 //! Bayer ordered dispersed dot dithering (order 4 dithering matrix) +}; + +/** Lossless JPEG transformations +Constants used in FreeImage_JPEGTransform +*/ +FI_ENUM(FREE_IMAGE_JPEG_OPERATION) { + FIJPEG_OP_NONE = 0, //! no transformation + FIJPEG_OP_FLIP_H = 1, //! horizontal flip + FIJPEG_OP_FLIP_V = 2, //! vertical flip + FIJPEG_OP_TRANSPOSE = 3, //! transpose across UL-to-LR axis + FIJPEG_OP_TRANSVERSE = 4, //! transpose across UR-to-LL axis + FIJPEG_OP_ROTATE_90 = 5, //! 90-degree clockwise rotation + FIJPEG_OP_ROTATE_180 = 6, //! 180-degree rotation + FIJPEG_OP_ROTATE_270 = 7 //! 270-degree clockwise (or 90 ccw) +}; + +/** Tone mapping operators. +Constants used in FreeImage_ToneMapping. +*/ +FI_ENUM(FREE_IMAGE_TMO) { + FITMO_DRAGO03 = 0, //! Adaptive logarithmic mapping (F. Drago, 2003) + FITMO_REINHARD05 = 1, //! Dynamic range reduction inspired by photoreceptor physiology (E. Reinhard, 2005) + FITMO_FATTAL02 = 2 //! Gradient domain high dynamic range compression (R. Fattal, 2002) +}; + +/** Upsampling / downsampling filters. +Constants used in FreeImage_Rescale. +*/ +FI_ENUM(FREE_IMAGE_FILTER) { + FILTER_BOX = 0, //! Box, pulse, Fourier window, 1st order (constant) b-spline + FILTER_BICUBIC = 1, //! Mitchell & Netravali's two-param cubic filter + FILTER_BILINEAR = 2, //! Bilinear filter + FILTER_BSPLINE = 3, //! 4th order (cubic) b-spline + FILTER_CATMULLROM = 4, //! Catmull-Rom spline, Overhauser spline + FILTER_LANCZOS3 = 5 //! Lanczos3 filter +}; + +/** Color channels. +Constants used in color manipulation routines. +*/ +FI_ENUM(FREE_IMAGE_COLOR_CHANNEL) { + FICC_RGB = 0, //! Use red, green and blue channels + FICC_RED = 1, //! Use red channel + FICC_GREEN = 2, //! Use green channel + FICC_BLUE = 3, //! Use blue channel + FICC_ALPHA = 4, //! Use alpha channel + FICC_BLACK = 5, //! Use black channel + FICC_REAL = 6, //! Complex images: use real part + FICC_IMAG = 7, //! Complex images: use imaginary part + FICC_MAG = 8, //! Complex images: use magnitude + FICC_PHASE = 9 //! Complex images: use phase +}; + +// Metadata support --------------------------------------------------------- + +/** + Tag data type information (based on TIFF specifications) + + Note: RATIONALs are the ratio of two 32-bit integer values. +*/ +FI_ENUM(FREE_IMAGE_MDTYPE) { + FIDT_NOTYPE = 0, //! placeholder + FIDT_BYTE = 1, //! 8-bit unsigned integer + FIDT_ASCII = 2, //! 8-bit bytes w/ last byte null + FIDT_SHORT = 3, //! 16-bit unsigned integer + FIDT_LONG = 4, //! 32-bit unsigned integer + FIDT_RATIONAL = 5, //! 64-bit unsigned fraction + FIDT_SBYTE = 6, //! 8-bit signed integer + FIDT_UNDEFINED = 7, //! 8-bit untyped data + FIDT_SSHORT = 8, //! 16-bit signed integer + FIDT_SLONG = 9, //! 32-bit signed integer + FIDT_SRATIONAL = 10, //! 64-bit signed fraction + FIDT_FLOAT = 11, //! 32-bit IEEE floating point + FIDT_DOUBLE = 12, //! 64-bit IEEE floating point + FIDT_IFD = 13, //! 32-bit unsigned integer (offset) + FIDT_PALETTE = 14, //! 32-bit RGBQUAD + FIDT_LONG8 = 16, //! 64-bit unsigned integer + FIDT_SLONG8 = 17, //! 64-bit signed integer + FIDT_IFD8 = 18 //! 64-bit unsigned integer (offset) +}; + +/** + Metadata models supported by FreeImage +*/ +FI_ENUM(FREE_IMAGE_MDMODEL) { + FIMD_NODATA = -1, + FIMD_COMMENTS = 0, //! single comment or keywords + FIMD_EXIF_MAIN = 1, //! Exif-TIFF metadata + FIMD_EXIF_EXIF = 2, //! Exif-specific metadata + FIMD_EXIF_GPS = 3, //! Exif GPS metadata + FIMD_EXIF_MAKERNOTE = 4, //! Exif maker note metadata + FIMD_EXIF_INTEROP = 5, //! Exif interoperability metadata + FIMD_IPTC = 6, //! IPTC/NAA metadata + FIMD_XMP = 7, //! Abobe XMP metadata + FIMD_GEOTIFF = 8, //! GeoTIFF metadata + FIMD_ANIMATION = 9, //! Animation metadata + FIMD_CUSTOM = 10, //! Used to attach other metadata types to a dib + FIMD_EXIF_RAW = 11 //! Exif metadata as a raw buffer +}; + +/** + Handle to a metadata model +*/ +FI_STRUCT (FIMETADATA) { void *data; }; + +/** + Handle to a FreeImage tag +*/ +FI_STRUCT (FITAG) { void *data; }; + +// File IO routines --------------------------------------------------------- + +#ifndef FREEIMAGE_IO +#define FREEIMAGE_IO + +typedef void* fi_handle; +typedef unsigned (DLL_CALLCONV *FI_ReadProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); +typedef unsigned (DLL_CALLCONV *FI_WriteProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); +typedef int (DLL_CALLCONV *FI_SeekProc) (fi_handle handle, long offset, int origin); +typedef long (DLL_CALLCONV *FI_TellProc) (fi_handle handle); + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(push, 1) +#else +#pragma pack(1) +#endif // WIN32 + +FI_STRUCT(FreeImageIO) { + FI_ReadProc read_proc; //! pointer to the function used to read data + FI_WriteProc write_proc; //! pointer to the function used to write data + FI_SeekProc seek_proc; //! pointer to the function used to seek + FI_TellProc tell_proc; //! pointer to the function used to aquire the current position +}; + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(pop) +#else +#pragma pack() +#endif // WIN32 + +/** +Handle to a memory I/O stream +*/ +FI_STRUCT (FIMEMORY) { void *data; }; + +#endif // FREEIMAGE_IO + +// Plugin routines ---------------------------------------------------------- + +#ifndef PLUGINS +#define PLUGINS + +typedef const char *(DLL_CALLCONV *FI_FormatProc)(void); +typedef const char *(DLL_CALLCONV *FI_DescriptionProc)(void); +typedef const char *(DLL_CALLCONV *FI_ExtensionListProc)(void); +typedef const char *(DLL_CALLCONV *FI_RegExprProc)(void); +typedef void *(DLL_CALLCONV *FI_OpenProc)(FreeImageIO *io, fi_handle handle, BOOL read); +typedef void (DLL_CALLCONV *FI_CloseProc)(FreeImageIO *io, fi_handle handle, void *data); +typedef int (DLL_CALLCONV *FI_PageCountProc)(FreeImageIO *io, fi_handle handle, void *data); +typedef int (DLL_CALLCONV *FI_PageCapabilityProc)(FreeImageIO *io, fi_handle handle, void *data); +typedef FIBITMAP *(DLL_CALLCONV *FI_LoadProc)(FreeImageIO *io, fi_handle handle, int page, int flags, void *data); +typedef BOOL (DLL_CALLCONV *FI_SaveProc)(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data); +typedef BOOL (DLL_CALLCONV *FI_ValidateProc)(FreeImageIO *io, fi_handle handle); +typedef const char *(DLL_CALLCONV *FI_MimeProc)(void); +typedef BOOL (DLL_CALLCONV *FI_SupportsExportBPPProc)(int bpp); +typedef BOOL (DLL_CALLCONV *FI_SupportsExportTypeProc)(FREE_IMAGE_TYPE type); +typedef BOOL (DLL_CALLCONV *FI_SupportsICCProfilesProc)(void); +typedef BOOL (DLL_CALLCONV *FI_SupportsNoPixelsProc)(void); + +FI_STRUCT (Plugin) { + FI_FormatProc format_proc; + FI_DescriptionProc description_proc; + FI_ExtensionListProc extension_proc; + FI_RegExprProc regexpr_proc; + FI_OpenProc open_proc; + FI_CloseProc close_proc; + FI_PageCountProc pagecount_proc; + FI_PageCapabilityProc pagecapability_proc; + FI_LoadProc load_proc; + FI_SaveProc save_proc; + FI_ValidateProc validate_proc; + FI_MimeProc mime_proc; + FI_SupportsExportBPPProc supports_export_bpp_proc; + FI_SupportsExportTypeProc supports_export_type_proc; + FI_SupportsICCProfilesProc supports_icc_profiles_proc; + FI_SupportsNoPixelsProc supports_no_pixels_proc; +}; + +typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id); + +#endif // PLUGINS + + +// Load / Save flag constants ----------------------------------------------- + +#define FIF_LOAD_NOPIXELS 0x8000 //! loading: load the image header only (not supported by all plugins, default to full loading) + +#define BMP_DEFAULT 0 +#define BMP_SAVE_RLE 1 +#define CUT_DEFAULT 0 +#define DDS_DEFAULT 0 +#define EXR_DEFAULT 0 //! save data as half with piz-based wavelet compression +#define EXR_FLOAT 0x0001 //! save data as float instead of as half (not recommended) +#define EXR_NONE 0x0002 //! save with no compression +#define EXR_ZIP 0x0004 //! save with zlib compression, in blocks of 16 scan lines +#define EXR_PIZ 0x0008 //! save with piz-based wavelet compression +#define EXR_PXR24 0x0010 //! save with lossy 24-bit float compression +#define EXR_B44 0x0020 //! save with lossy 44% float compression - goes to 22% when combined with EXR_LC +#define EXR_LC 0x0040 //! save images with one luminance and two chroma channels, rather than as RGB (lossy compression) +#define FAXG3_DEFAULT 0 +#define GIF_DEFAULT 0 +#define GIF_LOAD256 1 //! load the image as a 256 color image with ununsed palette entries, if it's 16 or 2 color +#define GIF_PLAYBACK 2 //! 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading +#define HDR_DEFAULT 0 +#define ICO_DEFAULT 0 +#define ICO_MAKEALPHA 1 //! convert to 32bpp and create an alpha channel from the AND-mask when loading +#define IFF_DEFAULT 0 +#define J2K_DEFAULT 0 //! save with a 16:1 rate +#define JP2_DEFAULT 0 //! save with a 16:1 rate +#define JPEG_DEFAULT 0 //! loading (see JPEG_FAST); saving (see JPEG_QUALITYGOOD|JPEG_SUBSAMPLING_420) +#define JPEG_FAST 0x0001 //! load the file as fast as possible, sacrificing some quality +#define JPEG_ACCURATE 0x0002 //! load the file with the best quality, sacrificing some speed +#define JPEG_CMYK 0x0004 //! load separated CMYK "as is" (use | to combine with other load flags) +#define JPEG_EXIFROTATE 0x0008 //! load and rotate according to Exif 'Orientation' tag if available +#define JPEG_GREYSCALE 0x0010 //! load and convert to a 8-bit greyscale image +#define JPEG_QUALITYSUPERB 0x80 //! save with superb quality (100:1) +#define JPEG_QUALITYGOOD 0x0100 //! save with good quality (75:1) +#define JPEG_QUALITYNORMAL 0x0200 //! save with normal quality (50:1) +#define JPEG_QUALITYAVERAGE 0x0400 //! save with average quality (25:1) +#define JPEG_QUALITYBAD 0x0800 //! save with bad quality (10:1) +#define JPEG_PROGRESSIVE 0x2000 //! save as a progressive-JPEG (use | to combine with other save flags) +#define JPEG_SUBSAMPLING_411 0x1000 //! save with high 4x1 chroma subsampling (4:1:1) +#define JPEG_SUBSAMPLING_420 0x4000 //! save with medium 2x2 medium chroma subsampling (4:2:0) - default value +#define JPEG_SUBSAMPLING_422 0x8000 //! save with low 2x1 chroma subsampling (4:2:2) +#define JPEG_SUBSAMPLING_444 0x10000 //! save with no chroma subsampling (4:4:4) +#define JPEG_OPTIMIZE 0x20000 //! on saving, compute optimal Huffman coding tables (can reduce a few percent of file size) +#define JPEG_BASELINE 0x40000 //! save basic JPEG, without metadata or any markers +#define KOALA_DEFAULT 0 +#define LBM_DEFAULT 0 +#define MNG_DEFAULT 0 +#define PCD_DEFAULT 0 +#define PCD_BASE 1 //! load the bitmap sized 768 x 512 +#define PCD_BASEDIV4 2 //! load the bitmap sized 384 x 256 +#define PCD_BASEDIV16 3 //! load the bitmap sized 192 x 128 +#define PCX_DEFAULT 0 +#define PFM_DEFAULT 0 +#define PICT_DEFAULT 0 +#define PNG_DEFAULT 0 +#define PNG_IGNOREGAMMA 1 //! loading: avoid gamma correction +#define PNG_Z_BEST_SPEED 0x0001 //! save using ZLib level 1 compression flag (default value is 6) +#define PNG_Z_DEFAULT_COMPRESSION 0x0006 //! save using ZLib level 6 compression flag (default recommended value) +#define PNG_Z_BEST_COMPRESSION 0x0009 //! save using ZLib level 9 compression flag (default value is 6) +#define PNG_Z_NO_COMPRESSION 0x0100 //! save without ZLib compression +#define PNG_INTERLACED 0x0200 //! save using Adam7 interlacing (use | to combine with other save flags) +#define PNM_DEFAULT 0 +#define PNM_SAVE_RAW 0 //! if set the writer saves in RAW format (i.e. P4, P5 or P6) +#define PNM_SAVE_ASCII 1 //! if set the writer saves in ASCII format (i.e. P1, P2 or P3) +#define PSD_DEFAULT 0 +#define PSD_CMYK 1 //! reads tags for separated CMYK (default is conversion to RGB) +#define PSD_LAB 2 //! reads tags for CIELab (default is conversion to RGB) +#define RAS_DEFAULT 0 +#define RAW_DEFAULT 0 //! load the file as linear RGB 48-bit +#define RAW_PREVIEW 1 //! try to load the embedded JPEG preview with included Exif Data or default to RGB 24-bit +#define RAW_DISPLAY 2 //! load the file as RGB 24-bit +#define RAW_HALFSIZE 4 //! output a half-size color image +#define RAW_UNPROCESSED 8 //! output a FIT_UINT16 raw Bayer image +#define SGI_DEFAULT 0 +#define TARGA_DEFAULT 0 +#define TARGA_LOAD_RGB888 1 //! if set the loader converts RGB555 and ARGB8888 -> RGB888. +#define TARGA_SAVE_RLE 2 //! if set, the writer saves with RLE compression +#define TIFF_DEFAULT 0 +#define TIFF_CMYK 0x0001 //! reads/stores tags for separated CMYK (use | to combine with compression flags) +#define TIFF_PACKBITS 0x0100 //! save using PACKBITS compression +#define TIFF_DEFLATE 0x0200 //! save using DEFLATE compression (a.k.a. ZLIB compression) +#define TIFF_ADOBE_DEFLATE 0x0400 //! save using ADOBE DEFLATE compression +#define TIFF_NONE 0x0800 //! save without any compression +#define TIFF_CCITTFAX3 0x1000 //! save using CCITT Group 3 fax encoding +#define TIFF_CCITTFAX4 0x2000 //! save using CCITT Group 4 fax encoding +#define TIFF_LZW 0x4000 //! save using LZW compression +#define TIFF_JPEG 0x8000 //! save using JPEG compression +#define TIFF_LOGLUV 0x10000 //! save using LogLuv compression +#define WBMP_DEFAULT 0 +#define XBM_DEFAULT 0 +#define XPM_DEFAULT 0 +#define WEBP_DEFAULT 0 //! save with good quality (75:1) +#define WEBP_LOSSLESS 0x100 //! save in lossless mode +#define JXR_DEFAULT 0 //! save with quality 80 and no chroma subsampling (4:4:4) +#define JXR_LOSSLESS 0x0064 //! save lossless +#define JXR_PROGRESSIVE 0x2000 //! save as a progressive-JXR (use | to combine with other save flags) + +// Background filling options --------------------------------------------------------- +// Constants used in FreeImage_FillBackground and FreeImage_EnlargeCanvas + +#define FI_COLOR_IS_RGB_COLOR 0x00 //! RGBQUAD color is a RGB color (contains no valid alpha channel) +#define FI_COLOR_IS_RGBA_COLOR 0x01 //! RGBQUAD color is a RGBA color (contains a valid alpha channel) +#define FI_COLOR_FIND_EQUAL_COLOR 0x02 //! For palettized images: lookup equal RGB color from palette +#define FI_COLOR_ALPHA_IS_INDEX 0x04 //! The color's rgbReserved member (alpha) contains the palette index to be used +#define FI_COLOR_PALETTE_SEARCH_MASK (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX) // No color lookup is performed + +// RescaleEx options --------------------------------------------------------- +// Constants used in FreeImage_RescaleEx + +#define FI_RESCALE_DEFAULT 0x00 //! default options; none of the following other options apply +#define FI_RESCALE_TRUE_COLOR 0x01 //! for non-transparent greyscale images, convert to 24-bit if src bitdepth <= 8 (default is a 8-bit greyscale image). +#define FI_RESCALE_OMIT_METADATA 0x02 //! do not copy metadata to the rescaled image + + +#ifdef __cplusplus +extern "C" { +#endif + +// Init / Error routines ---------------------------------------------------- + +DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE)); +DLL_API void DLL_CALLCONV FreeImage_DeInitialise(void); + +// Version routines --------------------------------------------------------- + +DLL_API const char *DLL_CALLCONV FreeImage_GetVersion(void); +DLL_API const char *DLL_CALLCONV FreeImage_GetCopyrightMessage(void); + +// Message output functions ------------------------------------------------- + +typedef void (*FreeImage_OutputMessageFunction)(FREE_IMAGE_FORMAT fif, const char *msg); +typedef void (DLL_CALLCONV *FreeImage_OutputMessageFunctionStdCall)(FREE_IMAGE_FORMAT fif, const char *msg); + +DLL_API void DLL_CALLCONV FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf); +DLL_API void DLL_CALLCONV FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf); +DLL_API void DLL_CALLCONV FreeImage_OutputMessageProc(int fif, const char *fmt, ...); + +// Allocate / Clone / Unload routines --------------------------------------- + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Allocate(int width, int height, int bpp, unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp FI_DEFAULT(8), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); +DLL_API FIBITMAP * DLL_CALLCONV FreeImage_Clone(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP *dib); + +// Header loading routines +DLL_API BOOL DLL_CALLCONV FreeImage_HasPixels(FIBITMAP *dib); + +// Load / Save routines ----------------------------------------------------- + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); + +// Memory I/O stream routines ----------------------------------------------- + +DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0)); +DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0)); +DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream); +DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin); +DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes); +DLL_API unsigned DLL_CALLCONV FreeImage_ReadMemory(void *buffer, unsigned size, unsigned count, FIMEMORY *stream); +DLL_API unsigned DLL_CALLCONV FreeImage_WriteMemory(const void *buffer, unsigned size, unsigned count, FIMEMORY *stream); + +DLL_API FIMULTIBITMAP *DLL_CALLCONV FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags); + +// Plugin Interface --------------------------------------------------------- + +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterExternalPlugin(const char *path, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); +DLL_API int DLL_CALLCONV FreeImage_GetFIFCount(void); +DLL_API int DLL_CALLCONV FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable); +DLL_API int DLL_CALLCONV FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFormat(const char *format); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromMime(const char *mime); +DLL_API const char *DLL_CALLCONV FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilename(const char *filename); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilenameU(const wchar_t *filename); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif); + +// Multipaging interface ---------------------------------------------------- + +DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory FI_DEFAULT(FALSE), int flags FI_DEFAULT(0)); +DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags FI_DEFAULT(0)); +DLL_API int DLL_CALLCONV FreeImage_GetPageCount(FIMULTIBITMAP *bitmap); +DLL_API void DLL_CALLCONV FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data); +DLL_API void DLL_CALLCONV FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data); +DLL_API void DLL_CALLCONV FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page); +DLL_API FIBITMAP * DLL_CALLCONV FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page); +DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed); +DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source); +DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count); + +// Filetype request routines ------------------------------------------------ + +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeU(const wchar_t *filename, int size FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0)); + +// Image type request routine ----------------------------------------------- + +DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib); + +// FreeImage helper routines ------------------------------------------------ + +DLL_API BOOL DLL_CALLCONV FreeImage_IsLittleEndian(void); +DLL_API BOOL DLL_CALLCONV FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); +DLL_API BOOL DLL_CALLCONV FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); + +// Pixel access routines ---------------------------------------------------- + +DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib); +DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline); + +DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); +DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); +DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); +DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); + +// DIB info routines -------------------------------------------------------- + +DLL_API unsigned DLL_CALLCONV FreeImage_GetColorsUsed(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetBPP(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetWidth(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetHeight(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetLine(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetPitch(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetDIBSize(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetMemorySize(FIBITMAP *dib); +DLL_API RGBQUAD *DLL_CALLCONV FreeImage_GetPalette(FIBITMAP *dib); + +DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterX(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterY(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned res); +DLL_API void DLL_CALLCONV FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned res); + +DLL_API BITMAPINFOHEADER *DLL_CALLCONV FreeImage_GetInfoHeader(FIBITMAP *dib); +DLL_API BITMAPINFO *DLL_CALLCONV FreeImage_GetInfo(FIBITMAP *dib); +DLL_API FREE_IMAGE_COLOR_TYPE DLL_CALLCONV FreeImage_GetColorType(FIBITMAP *dib); + +DLL_API unsigned DLL_CALLCONV FreeImage_GetRedMask(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetGreenMask(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetBlueMask(FIBITMAP *dib); + +DLL_API unsigned DLL_CALLCONV FreeImage_GetTransparencyCount(FIBITMAP *dib); +DLL_API BYTE * DLL_CALLCONV FreeImage_GetTransparencyTable(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled); +DLL_API void DLL_CALLCONV FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count); +DLL_API BOOL DLL_CALLCONV FreeImage_IsTransparent(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_SetTransparentIndex(FIBITMAP *dib, int index); +DLL_API int DLL_CALLCONV FreeImage_GetTransparentIndex(FIBITMAP *dib); + +DLL_API BOOL DLL_CALLCONV FreeImage_HasBackgroundColor(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); +DLL_API BOOL DLL_CALLCONV FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetThumbnail(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail); + +// ICC profile routines ----------------------------------------------------- + +DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_GetICCProfile(FIBITMAP *dib); +DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size); +DLL_API void DLL_CALLCONV FreeImage_DestroyICCProfile(FIBITMAP *dib); + +// Line conversion routines ------------------------------------------------- + +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels); + +// Smart conversion routines ------------------------------------------------ + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToGreyscale(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize FI_DEFAULT(FIQ_WUQUANT), int PaletteSize FI_DEFAULT(256), int ReserveSize FI_DEFAULT(0), RGBQUAD *ReservePalette FI_DEFAULT(NULL)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); +DLL_API void DLL_CALLCONV FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToFloat(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBF(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBAF(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToUINT16(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGB16(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBA16(FIBITMAP *dib); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE)); + +// Tone mapping operators --------------------------------------------------- + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param FI_DEFAULT(0), double second_param FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoDrago03(FIBITMAP *src, double gamma FI_DEFAULT(2.2), double exposure FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoReinhard05(FIBITMAP *src, double intensity FI_DEFAULT(0), double contrast FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity FI_DEFAULT(0), double contrast FI_DEFAULT(0), double adaptation FI_DEFAULT(1), double color_correction FI_DEFAULT(0)); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation FI_DEFAULT(0.5), double attenuation FI_DEFAULT(0.85)); + +// ZLib interface ----------------------------------------------------------- + +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size); + +// -------------------------------------------------------------------------- +// Metadata routines +// -------------------------------------------------------------------------- + +// tag creation / destruction +DLL_API FITAG *DLL_CALLCONV FreeImage_CreateTag(void); +DLL_API void DLL_CALLCONV FreeImage_DeleteTag(FITAG *tag); +DLL_API FITAG *DLL_CALLCONV FreeImage_CloneTag(FITAG *tag); + +// tag getters and setters +DLL_API const char *DLL_CALLCONV FreeImage_GetTagKey(FITAG *tag); +DLL_API const char *DLL_CALLCONV FreeImage_GetTagDescription(FITAG *tag); +DLL_API WORD DLL_CALLCONV FreeImage_GetTagID(FITAG *tag); +DLL_API FREE_IMAGE_MDTYPE DLL_CALLCONV FreeImage_GetTagType(FITAG *tag); +DLL_API DWORD DLL_CALLCONV FreeImage_GetTagCount(FITAG *tag); +DLL_API DWORD DLL_CALLCONV FreeImage_GetTagLength(FITAG *tag); +DLL_API const void *DLL_CALLCONV FreeImage_GetTagValue(FITAG *tag); + +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagKey(FITAG *tag, const char *key); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagDescription(FITAG *tag, const char *description); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagID(FITAG *tag, WORD id); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagCount(FITAG *tag, DWORD count); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagLength(FITAG *tag, DWORD length); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagValue(FITAG *tag, const void *value); + +// iterator +DLL_API FIMETADATA *DLL_CALLCONV FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag); +DLL_API BOOL DLL_CALLCONV FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag); +DLL_API void DLL_CALLCONV FreeImage_FindCloseMetadata(FIMETADATA *mdhandle); + +// metadata setter and getter +DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag); +DLL_API BOOL DLL_CALLCONV FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag); +DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value); + +// helpers +DLL_API unsigned DLL_CALLCONV FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src); + +// tag to C string conversion +DLL_API const char* DLL_CALLCONV FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make FI_DEFAULT(NULL)); + +// -------------------------------------------------------------------------- +// JPEG lossless transformation routines +// -------------------------------------------------------------------------- + +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformFromHandle(FreeImageIO* src_io, fi_handle src_handle, FreeImageIO* dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY* src_stream, FIMEMORY* dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); + + +// -------------------------------------------------------------------------- +// Image manipulation toolkit +// -------------------------------------------------------------------------- + +// rotation and flipping +/// @deprecated see FreeImage_Rotate +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor FI_DEFAULT(NULL)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask); +DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_FlipVertical(FIBITMAP *dib); + +// upsampling / downsampling +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter FI_DEFAULT(FILTER_CATMULLROM)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert FI_DEFAULT(TRUE)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter FI_DEFAULT(FILTER_CATMULLROM), unsigned flags FI_DEFAULT(0)); + +// color manipulation routines (point operations) +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustGamma(FIBITMAP *dib, double gamma); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustContrast(FIBITMAP *dib, double percentage); +DLL_API BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel FI_DEFAULT(FICC_BLACK)); +DLL_API int DLL_CALLCONV FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert FI_DEFAULT(FALSE)); +DLL_API unsigned DLL_CALLCONV FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned count, BOOL ignore_alpha, BOOL swap); +DLL_API unsigned DLL_CALLCONV FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha); +DLL_API unsigned DLL_CALLCONV FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned count, BOOL swap); +DLL_API unsigned DLL_CALLCONV FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b); + +// channel processing routines +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API BOOL DLL_CALLCONV FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API BOOL DLL_CALLCONV FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); + +// copy / paste / composite routines +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom); +DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_CreateView(FIBITMAP *dib, unsigned left, unsigned top, unsigned right, unsigned bottom); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL)); +DLL_API BOOL DLL_CALLCONV FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib); + +// background filling routines +DLL_API BOOL DLL_CALLCONV FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options FI_DEFAULT(0), const RGBQUAD *palette FI_DEFAULT(NULL), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options FI_DEFAULT(0), const RGBQUAD *palette FI_DEFAULT(NULL), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); + +// miscellaneous algorithms +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle FI_DEFAULT(3)); + +// restore the borland-specific enum size option +#if defined(__BORLANDC__) +#pragma option pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif // FREEIMAGE_H diff --git a/#ThirdParty/FreeImage/Dist/x32/FreeImage.lib b/#ThirdParty/FreeImage/Dist/x32/FreeImage.lib new file mode 100644 index 0000000..28071aa Binary files /dev/null and b/#ThirdParty/FreeImage/Dist/x32/FreeImage.lib differ diff --git a/#ThirdParty/FreeImage/Dist/x64/FreeImage.dll b/#ThirdParty/FreeImage/Dist/x64/FreeImage.dll new file mode 100644 index 0000000..0562f4a Binary files /dev/null and b/#ThirdParty/FreeImage/Dist/x64/FreeImage.dll differ diff --git a/#ThirdParty/FreeImage/Dist/x64/FreeImage.h b/#ThirdParty/FreeImage/Dist/x64/FreeImage.h new file mode 100644 index 0000000..e2d1c5a --- /dev/null +++ b/#ThirdParty/FreeImage/Dist/x64/FreeImage.h @@ -0,0 +1,1153 @@ +// ========================================================== +// FreeImage 3 +// +// Design and implementation by +// - Floris van den Berg (flvdberg@wxs.nl) +// - Hervé Drolon (drolon@infonie.fr) +// +// Contributors: +// - see changes log named 'Whatsnew.txt', see header of each .h and .cpp file +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +#ifndef FREEIMAGE_H +#define FREEIMAGE_H + +// Version information ------------------------------------------------------ + +#define FREEIMAGE_MAJOR_VERSION 3 +#define FREEIMAGE_MINOR_VERSION 17 +#define FREEIMAGE_RELEASE_SERIAL 0 + +// Compiler options --------------------------------------------------------- + +#include // needed for UNICODE functions + +#if defined(FREEIMAGE_LIB) + #define DLL_API + #define DLL_CALLCONV +#else + #if defined(_WIN32) || defined(__WIN32__) + #define DLL_CALLCONV __stdcall + // The following ifdef block is the standard way of creating macros which make exporting + // from a DLL simpler. All files within this DLL are compiled with the FREEIMAGE_EXPORTS + // symbol defined on the command line. this symbol should not be defined on any project + // that uses this DLL. This way any other project whose source files include this file see + // DLL_API functions as being imported from a DLL, wheras this DLL sees symbols + // defined with this macro as being exported. + #ifdef FREEIMAGE_EXPORTS + #define DLL_API __declspec(dllexport) + #else + #define DLL_API __declspec(dllimport) + #endif // FREEIMAGE_EXPORTS + #else + // try the gcc visibility support (see http://gcc.gnu.org/wiki/Visibility) + #if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) + #ifndef GCC_HASCLASSVISIBILITY + #define GCC_HASCLASSVISIBILITY + #endif + #endif // __GNUC__ + #define DLL_CALLCONV + #if defined(GCC_HASCLASSVISIBILITY) + #define DLL_API __attribute__ ((visibility("default"))) + #else + #define DLL_API + #endif + #endif // WIN32 / !WIN32 +#endif // FREEIMAGE_LIB + +// Endianness: +// Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined. +// If your big endian system isn't being detected, add an OS specific check +// or define any of FREEIMAGE_BIGENDIAN and FREEIMAGE_LITTLEENDIAN directly +// to specify the desired endianness. +#if (!defined(FREEIMAGE_BIGENDIAN) && !defined(FREEIMAGE_LITTLEENDIAN)) + #if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || defined(__BIG_ENDIAN__) + #define FREEIMAGE_BIGENDIAN + #endif // BYTE_ORDER +#endif // !FREEIMAGE_[BIG|LITTLE]ENDIAN + +// Color-Order: +// The specified order of color components red, green and blue affects 24- +// and 32-bit images of type FIT_BITMAP as well as the colors that are part +// of a color palette. All other images always use RGB order. By default, +// color order is coupled to endianness: +// little-endian -> BGR +// big-endian -> RGB +// However, you can always define FREEIMAGE_COLORORDER to any of the known +// orders FREEIMAGE_COLORORDER_BGR (0) and FREEIMAGE_COLORORDER_RGB (1) to +// specify your preferred color order. +#define FREEIMAGE_COLORORDER_BGR 0 +#define FREEIMAGE_COLORORDER_RGB 1 +#if (!defined(FREEIMAGE_COLORORDER)) || ((FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_BGR) && (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB)) + #if defined(FREEIMAGE_BIGENDIAN) + #define FREEIMAGE_COLORORDER FREEIMAGE_COLORORDER_RGB + #else + #define FREEIMAGE_COLORORDER FREEIMAGE_COLORORDER_BGR + #endif // FREEIMAGE_BIGENDIAN +#endif // FREEIMAGE_COLORORDER + +// Ensure 4-byte enums if we're using Borland C++ compilers +#if defined(__BORLANDC__) +#pragma option push -b +#endif + +// For C compatibility -------------------------------------------------------- + +#ifdef __cplusplus +#define FI_DEFAULT(x) = x +#define FI_ENUM(x) enum x +#define FI_STRUCT(x) struct x +#else +#define FI_DEFAULT(x) +#define FI_ENUM(x) typedef int x; enum x +#define FI_STRUCT(x) typedef struct x x; struct x +#endif + +// Bitmap types ------------------------------------------------------------- + +FI_STRUCT (FIBITMAP) { void *data; }; +FI_STRUCT (FIMULTIBITMAP) { void *data; }; + +// Types used in the library (directly copied from Windows) ----------------- + +#if defined(__MINGW32__) && defined(_WINDOWS_H) +#define _WINDOWS_ // prevent a bug in MinGW32 +#endif // __MINGW32__ + +#ifndef _WINDOWS_ +#define _WINDOWS_ + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef NULL +#define NULL 0 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#ifndef _MSC_VER +// define portable types for 32-bit / 64-bit OS +#include +typedef int32_t BOOL; +typedef uint8_t BYTE; +typedef uint16_t WORD; +typedef uint32_t DWORD; +typedef int32_t LONG; +typedef int64_t INT64; +typedef uint64_t UINT64; +#else +// MS is not C99 ISO compliant +typedef long BOOL; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef long LONG; +typedef signed __int64 INT64; +typedef unsigned __int64 UINT64; +#endif // _MSC_VER + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(push, 1) +#else +#pragma pack(1) +#endif // WIN32 + +typedef struct tagRGBQUAD { +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; +#else + BYTE rgbRed; + BYTE rgbGreen; + BYTE rgbBlue; +#endif // FREEIMAGE_COLORORDER + BYTE rgbReserved; +} RGBQUAD; + +typedef struct tagRGBTRIPLE { +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR + BYTE rgbtBlue; + BYTE rgbtGreen; + BYTE rgbtRed; +#else + BYTE rgbtRed; + BYTE rgbtGreen; + BYTE rgbtBlue; +#endif // FREEIMAGE_COLORORDER +} RGBTRIPLE; + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(pop) +#else +#pragma pack() +#endif // WIN32 + +typedef struct tagBITMAPINFOHEADER{ + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} BITMAPINFOHEADER, *PBITMAPINFOHEADER; + +typedef struct tagBITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[1]; +} BITMAPINFO, *PBITMAPINFO; + +#endif // _WINDOWS_ + +// Types used in the library (specific to FreeImage) ------------------------ + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(push, 1) +#else +#pragma pack(1) +#endif // WIN32 + +/** 48-bit RGB +*/ +typedef struct tagFIRGB16 { + WORD red; + WORD green; + WORD blue; +} FIRGB16; + +/** 64-bit RGBA +*/ +typedef struct tagFIRGBA16 { + WORD red; + WORD green; + WORD blue; + WORD alpha; +} FIRGBA16; + +/** 96-bit RGB Float +*/ +typedef struct tagFIRGBF { + float red; + float green; + float blue; +} FIRGBF; + +/** 128-bit RGBA Float +*/ +typedef struct tagFIRGBAF { + float red; + float green; + float blue; + float alpha; +} FIRGBAF; + +/** Data structure for COMPLEX type (complex number) +*/ +typedef struct tagFICOMPLEX { + /// real part + double r; + /// imaginary part + double i; +} FICOMPLEX; + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(pop) +#else +#pragma pack() +#endif // WIN32 + +// Indexes for byte arrays, masks and shifts for treating pixels as words --- +// These coincide with the order of RGBQUAD and RGBTRIPLE ------------------- + +#ifndef FREEIMAGE_BIGENDIAN +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR +// Little Endian (x86 / MS Windows, Linux) : BGR(A) order +#define FI_RGBA_RED 2 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 0 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0x00FF0000 +#define FI_RGBA_GREEN_MASK 0x0000FF00 +#define FI_RGBA_BLUE_MASK 0x000000FF +#define FI_RGBA_ALPHA_MASK 0xFF000000 +#define FI_RGBA_RED_SHIFT 16 +#define FI_RGBA_GREEN_SHIFT 8 +#define FI_RGBA_BLUE_SHIFT 0 +#define FI_RGBA_ALPHA_SHIFT 24 +#else +// Little Endian (x86 / MaxOSX) : RGB(A) order +#define FI_RGBA_RED 0 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 2 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0x000000FF +#define FI_RGBA_GREEN_MASK 0x0000FF00 +#define FI_RGBA_BLUE_MASK 0x00FF0000 +#define FI_RGBA_ALPHA_MASK 0xFF000000 +#define FI_RGBA_RED_SHIFT 0 +#define FI_RGBA_GREEN_SHIFT 8 +#define FI_RGBA_BLUE_SHIFT 16 +#define FI_RGBA_ALPHA_SHIFT 24 +#endif // FREEIMAGE_COLORORDER +#else +#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR +// Big Endian (PPC / none) : BGR(A) order +#define FI_RGBA_RED 2 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 0 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0x0000FF00 +#define FI_RGBA_GREEN_MASK 0x00FF0000 +#define FI_RGBA_BLUE_MASK 0xFF000000 +#define FI_RGBA_ALPHA_MASK 0x000000FF +#define FI_RGBA_RED_SHIFT 8 +#define FI_RGBA_GREEN_SHIFT 16 +#define FI_RGBA_BLUE_SHIFT 24 +#define FI_RGBA_ALPHA_SHIFT 0 +#else +// Big Endian (PPC / Linux, MaxOSX) : RGB(A) order +#define FI_RGBA_RED 0 +#define FI_RGBA_GREEN 1 +#define FI_RGBA_BLUE 2 +#define FI_RGBA_ALPHA 3 +#define FI_RGBA_RED_MASK 0xFF000000 +#define FI_RGBA_GREEN_MASK 0x00FF0000 +#define FI_RGBA_BLUE_MASK 0x0000FF00 +#define FI_RGBA_ALPHA_MASK 0x000000FF +#define FI_RGBA_RED_SHIFT 24 +#define FI_RGBA_GREEN_SHIFT 16 +#define FI_RGBA_BLUE_SHIFT 8 +#define FI_RGBA_ALPHA_SHIFT 0 +#endif // FREEIMAGE_COLORORDER +#endif // FREEIMAGE_BIGENDIAN + +#define FI_RGBA_RGB_MASK (FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK) + +// The 16bit macros only include masks and shifts, since each color element is not byte aligned + +#define FI16_555_RED_MASK 0x7C00 +#define FI16_555_GREEN_MASK 0x03E0 +#define FI16_555_BLUE_MASK 0x001F +#define FI16_555_RED_SHIFT 10 +#define FI16_555_GREEN_SHIFT 5 +#define FI16_555_BLUE_SHIFT 0 +#define FI16_565_RED_MASK 0xF800 +#define FI16_565_GREEN_MASK 0x07E0 +#define FI16_565_BLUE_MASK 0x001F +#define FI16_565_RED_SHIFT 11 +#define FI16_565_GREEN_SHIFT 5 +#define FI16_565_BLUE_SHIFT 0 + +// ICC profile support ------------------------------------------------------ + +#define FIICC_DEFAULT 0x00 +#define FIICC_COLOR_IS_CMYK 0x01 + +FI_STRUCT (FIICCPROFILE) { + WORD flags; //! info flag + DWORD size; //! profile's size measured in bytes + void *data; //! points to a block of contiguous memory containing the profile +}; + +// Important enums ---------------------------------------------------------- + +/** I/O image format identifiers. +*/ +FI_ENUM(FREE_IMAGE_FORMAT) { + FIF_UNKNOWN = -1, + FIF_BMP = 0, + FIF_ICO = 1, + FIF_JPEG = 2, + FIF_JNG = 3, + FIF_KOALA = 4, + FIF_LBM = 5, + FIF_IFF = FIF_LBM, + FIF_MNG = 6, + FIF_PBM = 7, + FIF_PBMRAW = 8, + FIF_PCD = 9, + FIF_PCX = 10, + FIF_PGM = 11, + FIF_PGMRAW = 12, + FIF_PNG = 13, + FIF_PPM = 14, + FIF_PPMRAW = 15, + FIF_RAS = 16, + FIF_TARGA = 17, + FIF_TIFF = 18, + FIF_WBMP = 19, + FIF_PSD = 20, + FIF_CUT = 21, + FIF_XBM = 22, + FIF_XPM = 23, + FIF_DDS = 24, + FIF_GIF = 25, + FIF_HDR = 26, + FIF_FAXG3 = 27, + FIF_SGI = 28, + FIF_EXR = 29, + FIF_J2K = 30, + FIF_JP2 = 31, + FIF_PFM = 32, + FIF_PICT = 33, + FIF_RAW = 34, + FIF_WEBP = 35, + FIF_JXR = 36 +}; + +/** Image type used in FreeImage. +*/ +FI_ENUM(FREE_IMAGE_TYPE) { + FIT_UNKNOWN = 0, //! unknown type + FIT_BITMAP = 1, //! standard image : 1-, 4-, 8-, 16-, 24-, 32-bit + FIT_UINT16 = 2, //! array of unsigned short : unsigned 16-bit + FIT_INT16 = 3, //! array of short : signed 16-bit + FIT_UINT32 = 4, //! array of unsigned long : unsigned 32-bit + FIT_INT32 = 5, //! array of long : signed 32-bit + FIT_FLOAT = 6, //! array of float : 32-bit IEEE floating point + FIT_DOUBLE = 7, //! array of double : 64-bit IEEE floating point + FIT_COMPLEX = 8, //! array of FICOMPLEX : 2 x 64-bit IEEE floating point + FIT_RGB16 = 9, //! 48-bit RGB image : 3 x 16-bit + FIT_RGBA16 = 10, //! 64-bit RGBA image : 4 x 16-bit + FIT_RGBF = 11, //! 96-bit RGB float image : 3 x 32-bit IEEE floating point + FIT_RGBAF = 12 //! 128-bit RGBA float image : 4 x 32-bit IEEE floating point +}; + +/** Image color type used in FreeImage. +*/ +FI_ENUM(FREE_IMAGE_COLOR_TYPE) { + FIC_MINISWHITE = 0, //! min value is white + FIC_MINISBLACK = 1, //! min value is black + FIC_RGB = 2, //! RGB color model + FIC_PALETTE = 3, //! color map indexed + FIC_RGBALPHA = 4, //! RGB color model with alpha channel + FIC_CMYK = 5 //! CMYK color model +}; + +/** Color quantization algorithms. +Constants used in FreeImage_ColorQuantize. +*/ +FI_ENUM(FREE_IMAGE_QUANTIZE) { + FIQ_WUQUANT = 0, //! Xiaolin Wu color quantization algorithm + FIQ_NNQUANT = 1, //! NeuQuant neural-net quantization algorithm by Anthony Dekker + FIQ_LFPQUANT = 2 //! Lossless Fast Pseudo-Quantization Algorithm by Carsten Klein +}; + +/** Dithering algorithms. +Constants used in FreeImage_Dither. +*/ +FI_ENUM(FREE_IMAGE_DITHER) { + FID_FS = 0, //! Floyd & Steinberg error diffusion + FID_BAYER4x4 = 1, //! Bayer ordered dispersed dot dithering (order 2 dithering matrix) + FID_BAYER8x8 = 2, //! Bayer ordered dispersed dot dithering (order 3 dithering matrix) + FID_CLUSTER6x6 = 3, //! Ordered clustered dot dithering (order 3 - 6x6 matrix) + FID_CLUSTER8x8 = 4, //! Ordered clustered dot dithering (order 4 - 8x8 matrix) + FID_CLUSTER16x16= 5, //! Ordered clustered dot dithering (order 8 - 16x16 matrix) + FID_BAYER16x16 = 6 //! Bayer ordered dispersed dot dithering (order 4 dithering matrix) +}; + +/** Lossless JPEG transformations +Constants used in FreeImage_JPEGTransform +*/ +FI_ENUM(FREE_IMAGE_JPEG_OPERATION) { + FIJPEG_OP_NONE = 0, //! no transformation + FIJPEG_OP_FLIP_H = 1, //! horizontal flip + FIJPEG_OP_FLIP_V = 2, //! vertical flip + FIJPEG_OP_TRANSPOSE = 3, //! transpose across UL-to-LR axis + FIJPEG_OP_TRANSVERSE = 4, //! transpose across UR-to-LL axis + FIJPEG_OP_ROTATE_90 = 5, //! 90-degree clockwise rotation + FIJPEG_OP_ROTATE_180 = 6, //! 180-degree rotation + FIJPEG_OP_ROTATE_270 = 7 //! 270-degree clockwise (or 90 ccw) +}; + +/** Tone mapping operators. +Constants used in FreeImage_ToneMapping. +*/ +FI_ENUM(FREE_IMAGE_TMO) { + FITMO_DRAGO03 = 0, //! Adaptive logarithmic mapping (F. Drago, 2003) + FITMO_REINHARD05 = 1, //! Dynamic range reduction inspired by photoreceptor physiology (E. Reinhard, 2005) + FITMO_FATTAL02 = 2 //! Gradient domain high dynamic range compression (R. Fattal, 2002) +}; + +/** Upsampling / downsampling filters. +Constants used in FreeImage_Rescale. +*/ +FI_ENUM(FREE_IMAGE_FILTER) { + FILTER_BOX = 0, //! Box, pulse, Fourier window, 1st order (constant) b-spline + FILTER_BICUBIC = 1, //! Mitchell & Netravali's two-param cubic filter + FILTER_BILINEAR = 2, //! Bilinear filter + FILTER_BSPLINE = 3, //! 4th order (cubic) b-spline + FILTER_CATMULLROM = 4, //! Catmull-Rom spline, Overhauser spline + FILTER_LANCZOS3 = 5 //! Lanczos3 filter +}; + +/** Color channels. +Constants used in color manipulation routines. +*/ +FI_ENUM(FREE_IMAGE_COLOR_CHANNEL) { + FICC_RGB = 0, //! Use red, green and blue channels + FICC_RED = 1, //! Use red channel + FICC_GREEN = 2, //! Use green channel + FICC_BLUE = 3, //! Use blue channel + FICC_ALPHA = 4, //! Use alpha channel + FICC_BLACK = 5, //! Use black channel + FICC_REAL = 6, //! Complex images: use real part + FICC_IMAG = 7, //! Complex images: use imaginary part + FICC_MAG = 8, //! Complex images: use magnitude + FICC_PHASE = 9 //! Complex images: use phase +}; + +// Metadata support --------------------------------------------------------- + +/** + Tag data type information (based on TIFF specifications) + + Note: RATIONALs are the ratio of two 32-bit integer values. +*/ +FI_ENUM(FREE_IMAGE_MDTYPE) { + FIDT_NOTYPE = 0, //! placeholder + FIDT_BYTE = 1, //! 8-bit unsigned integer + FIDT_ASCII = 2, //! 8-bit bytes w/ last byte null + FIDT_SHORT = 3, //! 16-bit unsigned integer + FIDT_LONG = 4, //! 32-bit unsigned integer + FIDT_RATIONAL = 5, //! 64-bit unsigned fraction + FIDT_SBYTE = 6, //! 8-bit signed integer + FIDT_UNDEFINED = 7, //! 8-bit untyped data + FIDT_SSHORT = 8, //! 16-bit signed integer + FIDT_SLONG = 9, //! 32-bit signed integer + FIDT_SRATIONAL = 10, //! 64-bit signed fraction + FIDT_FLOAT = 11, //! 32-bit IEEE floating point + FIDT_DOUBLE = 12, //! 64-bit IEEE floating point + FIDT_IFD = 13, //! 32-bit unsigned integer (offset) + FIDT_PALETTE = 14, //! 32-bit RGBQUAD + FIDT_LONG8 = 16, //! 64-bit unsigned integer + FIDT_SLONG8 = 17, //! 64-bit signed integer + FIDT_IFD8 = 18 //! 64-bit unsigned integer (offset) +}; + +/** + Metadata models supported by FreeImage +*/ +FI_ENUM(FREE_IMAGE_MDMODEL) { + FIMD_NODATA = -1, + FIMD_COMMENTS = 0, //! single comment or keywords + FIMD_EXIF_MAIN = 1, //! Exif-TIFF metadata + FIMD_EXIF_EXIF = 2, //! Exif-specific metadata + FIMD_EXIF_GPS = 3, //! Exif GPS metadata + FIMD_EXIF_MAKERNOTE = 4, //! Exif maker note metadata + FIMD_EXIF_INTEROP = 5, //! Exif interoperability metadata + FIMD_IPTC = 6, //! IPTC/NAA metadata + FIMD_XMP = 7, //! Abobe XMP metadata + FIMD_GEOTIFF = 8, //! GeoTIFF metadata + FIMD_ANIMATION = 9, //! Animation metadata + FIMD_CUSTOM = 10, //! Used to attach other metadata types to a dib + FIMD_EXIF_RAW = 11 //! Exif metadata as a raw buffer +}; + +/** + Handle to a metadata model +*/ +FI_STRUCT (FIMETADATA) { void *data; }; + +/** + Handle to a FreeImage tag +*/ +FI_STRUCT (FITAG) { void *data; }; + +// File IO routines --------------------------------------------------------- + +#ifndef FREEIMAGE_IO +#define FREEIMAGE_IO + +typedef void* fi_handle; +typedef unsigned (DLL_CALLCONV *FI_ReadProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); +typedef unsigned (DLL_CALLCONV *FI_WriteProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); +typedef int (DLL_CALLCONV *FI_SeekProc) (fi_handle handle, long offset, int origin); +typedef long (DLL_CALLCONV *FI_TellProc) (fi_handle handle); + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(push, 1) +#else +#pragma pack(1) +#endif // WIN32 + +FI_STRUCT(FreeImageIO) { + FI_ReadProc read_proc; //! pointer to the function used to read data + FI_WriteProc write_proc; //! pointer to the function used to write data + FI_SeekProc seek_proc; //! pointer to the function used to seek + FI_TellProc tell_proc; //! pointer to the function used to aquire the current position +}; + +#if (defined(_WIN32) || defined(__WIN32__)) +#pragma pack(pop) +#else +#pragma pack() +#endif // WIN32 + +/** +Handle to a memory I/O stream +*/ +FI_STRUCT (FIMEMORY) { void *data; }; + +#endif // FREEIMAGE_IO + +// Plugin routines ---------------------------------------------------------- + +#ifndef PLUGINS +#define PLUGINS + +typedef const char *(DLL_CALLCONV *FI_FormatProc)(void); +typedef const char *(DLL_CALLCONV *FI_DescriptionProc)(void); +typedef const char *(DLL_CALLCONV *FI_ExtensionListProc)(void); +typedef const char *(DLL_CALLCONV *FI_RegExprProc)(void); +typedef void *(DLL_CALLCONV *FI_OpenProc)(FreeImageIO *io, fi_handle handle, BOOL read); +typedef void (DLL_CALLCONV *FI_CloseProc)(FreeImageIO *io, fi_handle handle, void *data); +typedef int (DLL_CALLCONV *FI_PageCountProc)(FreeImageIO *io, fi_handle handle, void *data); +typedef int (DLL_CALLCONV *FI_PageCapabilityProc)(FreeImageIO *io, fi_handle handle, void *data); +typedef FIBITMAP *(DLL_CALLCONV *FI_LoadProc)(FreeImageIO *io, fi_handle handle, int page, int flags, void *data); +typedef BOOL (DLL_CALLCONV *FI_SaveProc)(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data); +typedef BOOL (DLL_CALLCONV *FI_ValidateProc)(FreeImageIO *io, fi_handle handle); +typedef const char *(DLL_CALLCONV *FI_MimeProc)(void); +typedef BOOL (DLL_CALLCONV *FI_SupportsExportBPPProc)(int bpp); +typedef BOOL (DLL_CALLCONV *FI_SupportsExportTypeProc)(FREE_IMAGE_TYPE type); +typedef BOOL (DLL_CALLCONV *FI_SupportsICCProfilesProc)(void); +typedef BOOL (DLL_CALLCONV *FI_SupportsNoPixelsProc)(void); + +FI_STRUCT (Plugin) { + FI_FormatProc format_proc; + FI_DescriptionProc description_proc; + FI_ExtensionListProc extension_proc; + FI_RegExprProc regexpr_proc; + FI_OpenProc open_proc; + FI_CloseProc close_proc; + FI_PageCountProc pagecount_proc; + FI_PageCapabilityProc pagecapability_proc; + FI_LoadProc load_proc; + FI_SaveProc save_proc; + FI_ValidateProc validate_proc; + FI_MimeProc mime_proc; + FI_SupportsExportBPPProc supports_export_bpp_proc; + FI_SupportsExportTypeProc supports_export_type_proc; + FI_SupportsICCProfilesProc supports_icc_profiles_proc; + FI_SupportsNoPixelsProc supports_no_pixels_proc; +}; + +typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id); + +#endif // PLUGINS + + +// Load / Save flag constants ----------------------------------------------- + +#define FIF_LOAD_NOPIXELS 0x8000 //! loading: load the image header only (not supported by all plugins, default to full loading) + +#define BMP_DEFAULT 0 +#define BMP_SAVE_RLE 1 +#define CUT_DEFAULT 0 +#define DDS_DEFAULT 0 +#define EXR_DEFAULT 0 //! save data as half with piz-based wavelet compression +#define EXR_FLOAT 0x0001 //! save data as float instead of as half (not recommended) +#define EXR_NONE 0x0002 //! save with no compression +#define EXR_ZIP 0x0004 //! save with zlib compression, in blocks of 16 scan lines +#define EXR_PIZ 0x0008 //! save with piz-based wavelet compression +#define EXR_PXR24 0x0010 //! save with lossy 24-bit float compression +#define EXR_B44 0x0020 //! save with lossy 44% float compression - goes to 22% when combined with EXR_LC +#define EXR_LC 0x0040 //! save images with one luminance and two chroma channels, rather than as RGB (lossy compression) +#define FAXG3_DEFAULT 0 +#define GIF_DEFAULT 0 +#define GIF_LOAD256 1 //! load the image as a 256 color image with ununsed palette entries, if it's 16 or 2 color +#define GIF_PLAYBACK 2 //! 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading +#define HDR_DEFAULT 0 +#define ICO_DEFAULT 0 +#define ICO_MAKEALPHA 1 //! convert to 32bpp and create an alpha channel from the AND-mask when loading +#define IFF_DEFAULT 0 +#define J2K_DEFAULT 0 //! save with a 16:1 rate +#define JP2_DEFAULT 0 //! save with a 16:1 rate +#define JPEG_DEFAULT 0 //! loading (see JPEG_FAST); saving (see JPEG_QUALITYGOOD|JPEG_SUBSAMPLING_420) +#define JPEG_FAST 0x0001 //! load the file as fast as possible, sacrificing some quality +#define JPEG_ACCURATE 0x0002 //! load the file with the best quality, sacrificing some speed +#define JPEG_CMYK 0x0004 //! load separated CMYK "as is" (use | to combine with other load flags) +#define JPEG_EXIFROTATE 0x0008 //! load and rotate according to Exif 'Orientation' tag if available +#define JPEG_GREYSCALE 0x0010 //! load and convert to a 8-bit greyscale image +#define JPEG_QUALITYSUPERB 0x80 //! save with superb quality (100:1) +#define JPEG_QUALITYGOOD 0x0100 //! save with good quality (75:1) +#define JPEG_QUALITYNORMAL 0x0200 //! save with normal quality (50:1) +#define JPEG_QUALITYAVERAGE 0x0400 //! save with average quality (25:1) +#define JPEG_QUALITYBAD 0x0800 //! save with bad quality (10:1) +#define JPEG_PROGRESSIVE 0x2000 //! save as a progressive-JPEG (use | to combine with other save flags) +#define JPEG_SUBSAMPLING_411 0x1000 //! save with high 4x1 chroma subsampling (4:1:1) +#define JPEG_SUBSAMPLING_420 0x4000 //! save with medium 2x2 medium chroma subsampling (4:2:0) - default value +#define JPEG_SUBSAMPLING_422 0x8000 //! save with low 2x1 chroma subsampling (4:2:2) +#define JPEG_SUBSAMPLING_444 0x10000 //! save with no chroma subsampling (4:4:4) +#define JPEG_OPTIMIZE 0x20000 //! on saving, compute optimal Huffman coding tables (can reduce a few percent of file size) +#define JPEG_BASELINE 0x40000 //! save basic JPEG, without metadata or any markers +#define KOALA_DEFAULT 0 +#define LBM_DEFAULT 0 +#define MNG_DEFAULT 0 +#define PCD_DEFAULT 0 +#define PCD_BASE 1 //! load the bitmap sized 768 x 512 +#define PCD_BASEDIV4 2 //! load the bitmap sized 384 x 256 +#define PCD_BASEDIV16 3 //! load the bitmap sized 192 x 128 +#define PCX_DEFAULT 0 +#define PFM_DEFAULT 0 +#define PICT_DEFAULT 0 +#define PNG_DEFAULT 0 +#define PNG_IGNOREGAMMA 1 //! loading: avoid gamma correction +#define PNG_Z_BEST_SPEED 0x0001 //! save using ZLib level 1 compression flag (default value is 6) +#define PNG_Z_DEFAULT_COMPRESSION 0x0006 //! save using ZLib level 6 compression flag (default recommended value) +#define PNG_Z_BEST_COMPRESSION 0x0009 //! save using ZLib level 9 compression flag (default value is 6) +#define PNG_Z_NO_COMPRESSION 0x0100 //! save without ZLib compression +#define PNG_INTERLACED 0x0200 //! save using Adam7 interlacing (use | to combine with other save flags) +#define PNM_DEFAULT 0 +#define PNM_SAVE_RAW 0 //! if set the writer saves in RAW format (i.e. P4, P5 or P6) +#define PNM_SAVE_ASCII 1 //! if set the writer saves in ASCII format (i.e. P1, P2 or P3) +#define PSD_DEFAULT 0 +#define PSD_CMYK 1 //! reads tags for separated CMYK (default is conversion to RGB) +#define PSD_LAB 2 //! reads tags for CIELab (default is conversion to RGB) +#define RAS_DEFAULT 0 +#define RAW_DEFAULT 0 //! load the file as linear RGB 48-bit +#define RAW_PREVIEW 1 //! try to load the embedded JPEG preview with included Exif Data or default to RGB 24-bit +#define RAW_DISPLAY 2 //! load the file as RGB 24-bit +#define RAW_HALFSIZE 4 //! output a half-size color image +#define RAW_UNPROCESSED 8 //! output a FIT_UINT16 raw Bayer image +#define SGI_DEFAULT 0 +#define TARGA_DEFAULT 0 +#define TARGA_LOAD_RGB888 1 //! if set the loader converts RGB555 and ARGB8888 -> RGB888. +#define TARGA_SAVE_RLE 2 //! if set, the writer saves with RLE compression +#define TIFF_DEFAULT 0 +#define TIFF_CMYK 0x0001 //! reads/stores tags for separated CMYK (use | to combine with compression flags) +#define TIFF_PACKBITS 0x0100 //! save using PACKBITS compression +#define TIFF_DEFLATE 0x0200 //! save using DEFLATE compression (a.k.a. ZLIB compression) +#define TIFF_ADOBE_DEFLATE 0x0400 //! save using ADOBE DEFLATE compression +#define TIFF_NONE 0x0800 //! save without any compression +#define TIFF_CCITTFAX3 0x1000 //! save using CCITT Group 3 fax encoding +#define TIFF_CCITTFAX4 0x2000 //! save using CCITT Group 4 fax encoding +#define TIFF_LZW 0x4000 //! save using LZW compression +#define TIFF_JPEG 0x8000 //! save using JPEG compression +#define TIFF_LOGLUV 0x10000 //! save using LogLuv compression +#define WBMP_DEFAULT 0 +#define XBM_DEFAULT 0 +#define XPM_DEFAULT 0 +#define WEBP_DEFAULT 0 //! save with good quality (75:1) +#define WEBP_LOSSLESS 0x100 //! save in lossless mode +#define JXR_DEFAULT 0 //! save with quality 80 and no chroma subsampling (4:4:4) +#define JXR_LOSSLESS 0x0064 //! save lossless +#define JXR_PROGRESSIVE 0x2000 //! save as a progressive-JXR (use | to combine with other save flags) + +// Background filling options --------------------------------------------------------- +// Constants used in FreeImage_FillBackground and FreeImage_EnlargeCanvas + +#define FI_COLOR_IS_RGB_COLOR 0x00 //! RGBQUAD color is a RGB color (contains no valid alpha channel) +#define FI_COLOR_IS_RGBA_COLOR 0x01 //! RGBQUAD color is a RGBA color (contains a valid alpha channel) +#define FI_COLOR_FIND_EQUAL_COLOR 0x02 //! For palettized images: lookup equal RGB color from palette +#define FI_COLOR_ALPHA_IS_INDEX 0x04 //! The color's rgbReserved member (alpha) contains the palette index to be used +#define FI_COLOR_PALETTE_SEARCH_MASK (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX) // No color lookup is performed + +// RescaleEx options --------------------------------------------------------- +// Constants used in FreeImage_RescaleEx + +#define FI_RESCALE_DEFAULT 0x00 //! default options; none of the following other options apply +#define FI_RESCALE_TRUE_COLOR 0x01 //! for non-transparent greyscale images, convert to 24-bit if src bitdepth <= 8 (default is a 8-bit greyscale image). +#define FI_RESCALE_OMIT_METADATA 0x02 //! do not copy metadata to the rescaled image + + +#ifdef __cplusplus +extern "C" { +#endif + +// Init / Error routines ---------------------------------------------------- + +DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE)); +DLL_API void DLL_CALLCONV FreeImage_DeInitialise(void); + +// Version routines --------------------------------------------------------- + +DLL_API const char *DLL_CALLCONV FreeImage_GetVersion(void); +DLL_API const char *DLL_CALLCONV FreeImage_GetCopyrightMessage(void); + +// Message output functions ------------------------------------------------- + +typedef void (*FreeImage_OutputMessageFunction)(FREE_IMAGE_FORMAT fif, const char *msg); +typedef void (DLL_CALLCONV *FreeImage_OutputMessageFunctionStdCall)(FREE_IMAGE_FORMAT fif, const char *msg); + +DLL_API void DLL_CALLCONV FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf); +DLL_API void DLL_CALLCONV FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf); +DLL_API void DLL_CALLCONV FreeImage_OutputMessageProc(int fif, const char *fmt, ...); + +// Allocate / Clone / Unload routines --------------------------------------- + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Allocate(int width, int height, int bpp, unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp FI_DEFAULT(8), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); +DLL_API FIBITMAP * DLL_CALLCONV FreeImage_Clone(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP *dib); + +// Header loading routines +DLL_API BOOL DLL_CALLCONV FreeImage_HasPixels(FIBITMAP *dib); + +// Load / Save routines ----------------------------------------------------- + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); + +// Memory I/O stream routines ----------------------------------------------- + +DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0)); +DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0)); +DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream); +DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin); +DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes); +DLL_API unsigned DLL_CALLCONV FreeImage_ReadMemory(void *buffer, unsigned size, unsigned count, FIMEMORY *stream); +DLL_API unsigned DLL_CALLCONV FreeImage_WriteMemory(const void *buffer, unsigned size, unsigned count, FIMEMORY *stream); + +DLL_API FIMULTIBITMAP *DLL_CALLCONV FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags); + +// Plugin Interface --------------------------------------------------------- + +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterExternalPlugin(const char *path, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); +DLL_API int DLL_CALLCONV FreeImage_GetFIFCount(void); +DLL_API int DLL_CALLCONV FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable); +DLL_API int DLL_CALLCONV FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFormat(const char *format); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromMime(const char *mime); +DLL_API const char *DLL_CALLCONV FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif); +DLL_API const char *DLL_CALLCONV FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilename(const char *filename); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilenameU(const wchar_t *filename); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif); +DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif); + +// Multipaging interface ---------------------------------------------------- + +DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory FI_DEFAULT(FALSE), int flags FI_DEFAULT(0)); +DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); +DLL_API BOOL DLL_CALLCONV FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags FI_DEFAULT(0)); +DLL_API int DLL_CALLCONV FreeImage_GetPageCount(FIMULTIBITMAP *bitmap); +DLL_API void DLL_CALLCONV FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data); +DLL_API void DLL_CALLCONV FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data); +DLL_API void DLL_CALLCONV FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page); +DLL_API FIBITMAP * DLL_CALLCONV FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page); +DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed); +DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source); +DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count); + +// Filetype request routines ------------------------------------------------ + +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeU(const wchar_t *filename, int size FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0)); +DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0)); + +// Image type request routine ----------------------------------------------- + +DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib); + +// FreeImage helper routines ------------------------------------------------ + +DLL_API BOOL DLL_CALLCONV FreeImage_IsLittleEndian(void); +DLL_API BOOL DLL_CALLCONV FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); +DLL_API BOOL DLL_CALLCONV FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); + +// Pixel access routines ---------------------------------------------------- + +DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib); +DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline); + +DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); +DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); +DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); +DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); + +// DIB info routines -------------------------------------------------------- + +DLL_API unsigned DLL_CALLCONV FreeImage_GetColorsUsed(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetBPP(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetWidth(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetHeight(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetLine(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetPitch(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetDIBSize(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetMemorySize(FIBITMAP *dib); +DLL_API RGBQUAD *DLL_CALLCONV FreeImage_GetPalette(FIBITMAP *dib); + +DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterX(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterY(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned res); +DLL_API void DLL_CALLCONV FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned res); + +DLL_API BITMAPINFOHEADER *DLL_CALLCONV FreeImage_GetInfoHeader(FIBITMAP *dib); +DLL_API BITMAPINFO *DLL_CALLCONV FreeImage_GetInfo(FIBITMAP *dib); +DLL_API FREE_IMAGE_COLOR_TYPE DLL_CALLCONV FreeImage_GetColorType(FIBITMAP *dib); + +DLL_API unsigned DLL_CALLCONV FreeImage_GetRedMask(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetGreenMask(FIBITMAP *dib); +DLL_API unsigned DLL_CALLCONV FreeImage_GetBlueMask(FIBITMAP *dib); + +DLL_API unsigned DLL_CALLCONV FreeImage_GetTransparencyCount(FIBITMAP *dib); +DLL_API BYTE * DLL_CALLCONV FreeImage_GetTransparencyTable(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled); +DLL_API void DLL_CALLCONV FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count); +DLL_API BOOL DLL_CALLCONV FreeImage_IsTransparent(FIBITMAP *dib); +DLL_API void DLL_CALLCONV FreeImage_SetTransparentIndex(FIBITMAP *dib, int index); +DLL_API int DLL_CALLCONV FreeImage_GetTransparentIndex(FIBITMAP *dib); + +DLL_API BOOL DLL_CALLCONV FreeImage_HasBackgroundColor(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); +DLL_API BOOL DLL_CALLCONV FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetThumbnail(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail); + +// ICC profile routines ----------------------------------------------------- + +DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_GetICCProfile(FIBITMAP *dib); +DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size); +DLL_API void DLL_CALLCONV FreeImage_DestroyICCProfile(FIBITMAP *dib); + +// Line conversion routines ------------------------------------------------- + +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels); +DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels); + +// Smart conversion routines ------------------------------------------------ + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToGreyscale(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize FI_DEFAULT(FIQ_WUQUANT), int PaletteSize FI_DEFAULT(256), int ReserveSize FI_DEFAULT(0), RGBQUAD *ReservePalette FI_DEFAULT(NULL)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); +DLL_API void DLL_CALLCONV FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToFloat(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBF(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBAF(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToUINT16(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGB16(FIBITMAP *dib); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBA16(FIBITMAP *dib); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE)); + +// Tone mapping operators --------------------------------------------------- + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param FI_DEFAULT(0), double second_param FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoDrago03(FIBITMAP *src, double gamma FI_DEFAULT(2.2), double exposure FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoReinhard05(FIBITMAP *src, double intensity FI_DEFAULT(0), double contrast FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity FI_DEFAULT(0), double contrast FI_DEFAULT(0), double adaptation FI_DEFAULT(1), double color_correction FI_DEFAULT(0)); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation FI_DEFAULT(0.5), double attenuation FI_DEFAULT(0.85)); + +// ZLib interface ----------------------------------------------------------- + +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); +DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size); + +// -------------------------------------------------------------------------- +// Metadata routines +// -------------------------------------------------------------------------- + +// tag creation / destruction +DLL_API FITAG *DLL_CALLCONV FreeImage_CreateTag(void); +DLL_API void DLL_CALLCONV FreeImage_DeleteTag(FITAG *tag); +DLL_API FITAG *DLL_CALLCONV FreeImage_CloneTag(FITAG *tag); + +// tag getters and setters +DLL_API const char *DLL_CALLCONV FreeImage_GetTagKey(FITAG *tag); +DLL_API const char *DLL_CALLCONV FreeImage_GetTagDescription(FITAG *tag); +DLL_API WORD DLL_CALLCONV FreeImage_GetTagID(FITAG *tag); +DLL_API FREE_IMAGE_MDTYPE DLL_CALLCONV FreeImage_GetTagType(FITAG *tag); +DLL_API DWORD DLL_CALLCONV FreeImage_GetTagCount(FITAG *tag); +DLL_API DWORD DLL_CALLCONV FreeImage_GetTagLength(FITAG *tag); +DLL_API const void *DLL_CALLCONV FreeImage_GetTagValue(FITAG *tag); + +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagKey(FITAG *tag, const char *key); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagDescription(FITAG *tag, const char *description); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagID(FITAG *tag, WORD id); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagCount(FITAG *tag, DWORD count); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagLength(FITAG *tag, DWORD length); +DLL_API BOOL DLL_CALLCONV FreeImage_SetTagValue(FITAG *tag, const void *value); + +// iterator +DLL_API FIMETADATA *DLL_CALLCONV FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag); +DLL_API BOOL DLL_CALLCONV FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag); +DLL_API void DLL_CALLCONV FreeImage_FindCloseMetadata(FIMETADATA *mdhandle); + +// metadata setter and getter +DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag); +DLL_API BOOL DLL_CALLCONV FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag); +DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value); + +// helpers +DLL_API unsigned DLL_CALLCONV FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src); + +// tag to C string conversion +DLL_API const char* DLL_CALLCONV FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make FI_DEFAULT(NULL)); + +// -------------------------------------------------------------------------- +// JPEG lossless transformation routines +// -------------------------------------------------------------------------- + +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformFromHandle(FreeImageIO* src_io, fi_handle src_handle, FreeImageIO* dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); +DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY* src_stream, FIMEMORY* dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); + + +// -------------------------------------------------------------------------- +// Image manipulation toolkit +// -------------------------------------------------------------------------- + +// rotation and flipping +/// @deprecated see FreeImage_Rotate +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor FI_DEFAULT(NULL)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask); +DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_FlipVertical(FIBITMAP *dib); + +// upsampling / downsampling +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter FI_DEFAULT(FILTER_CATMULLROM)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert FI_DEFAULT(TRUE)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter FI_DEFAULT(FILTER_CATMULLROM), unsigned flags FI_DEFAULT(0)); + +// color manipulation routines (point operations) +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustGamma(FIBITMAP *dib, double gamma); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustContrast(FIBITMAP *dib, double percentage); +DLL_API BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *dib); +DLL_API BOOL DLL_CALLCONV FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel FI_DEFAULT(FICC_BLACK)); +DLL_API int DLL_CALLCONV FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert); +DLL_API BOOL DLL_CALLCONV FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert FI_DEFAULT(FALSE)); +DLL_API unsigned DLL_CALLCONV FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned count, BOOL ignore_alpha, BOOL swap); +DLL_API unsigned DLL_CALLCONV FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha); +DLL_API unsigned DLL_CALLCONV FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned count, BOOL swap); +DLL_API unsigned DLL_CALLCONV FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b); + +// channel processing routines +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API BOOL DLL_CALLCONV FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); +DLL_API BOOL DLL_CALLCONV FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); + +// copy / paste / composite routines +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom); +DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_CreateView(FIBITMAP *dib, unsigned left, unsigned top, unsigned right, unsigned bottom); + +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL)); +DLL_API BOOL DLL_CALLCONV FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib); + +// background filling routines +DLL_API BOOL DLL_CALLCONV FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options FI_DEFAULT(0), const RGBQUAD *palette FI_DEFAULT(NULL), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options FI_DEFAULT(0), const RGBQUAD *palette FI_DEFAULT(NULL), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); + +// miscellaneous algorithms +DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle FI_DEFAULT(3)); + +// restore the borland-specific enum size option +#if defined(__BORLANDC__) +#pragma option pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif // FREEIMAGE_H diff --git a/#ThirdParty/FreeImage/Dist/x64/FreeImage.lib b/#ThirdParty/FreeImage/Dist/x64/FreeImage.lib new file mode 100644 index 0000000..59e3d84 Binary files /dev/null and b/#ThirdParty/FreeImage/Dist/x64/FreeImage.lib differ diff --git a/#ThirdParty/FreeImage/Examples/Generic/BatchLoad.cpp b/#ThirdParty/FreeImage/Examples/Generic/BatchLoad.cpp new file mode 100644 index 0000000..d1c80b4 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/BatchLoad.cpp @@ -0,0 +1,214 @@ +// ========================================================== +// Batch loader +// +// Design and implementation by +// - Floris van den Berg +// - Hervé Drolon +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at own risk! +// ========================================================== + +// +// This example shows how to easily batch load a directory +// full of images. Because not all formats can be identified +// by their header (some images don't have a header or one +// at the end of the file) we make use of the +// FreeImage_GetFIFFromFilename function. This function +// receives a file name, for example 'myfile.bmp', and returns +// a FREE_IMAGE_TYPE enum which identifies that bitmap. +// +// Functions used in this sample : +// FreeImage_GetFileType, FreeImage_GetFIFFromFilename, FreeImage_FIFSupportsReading, +// FreeImage_Load, FreeImage_GetBPP, FreeImage_FIFSupportsWriting, FreeImage_GetFormatFromFIF +// FreeImage_FIFSupportsExportBPP, FreeImage_Save, FreeImage_Unload, +// FreeImage_SetOutputMessage, FreeImage_GetVersion, FreeImage_GetCopyrightMessage +// +// ========================================================== + +#include +#include +#include +#include +#include + +#include "FreeImage.h" + +// ---------------------------------------------------------- + +/** Generic image loader + @param lpszPathName Pointer to the full file name + @param flag Optional load flag constant + @return Returns the loaded dib if successful, returns NULL otherwise +*/ +FIBITMAP* GenericLoader(const char* lpszPathName, int flag) { + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + + // check the file signature and deduce its format + // (the second argument is currently not used by FreeImage) + fif = FreeImage_GetFileType(lpszPathName, 0); + if(fif == FIF_UNKNOWN) { + // no signature ? + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename(lpszPathName); + } + // check that the plugin has reading capabilities ... + if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { + // ok, let's load the file + FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag); + // unless a bad file format, we are done ! + return dib; + } + return NULL; +} + +/** Generic image writer + @param dib Pointer to the dib to be saved + @param lpszPathName Pointer to the full file name + @param flag Optional save flag constant + @return Returns true if successful, returns false otherwise +*/ +bool GenericWriter(FIBITMAP* dib, const char* lpszPathName, int flag) { + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + BOOL bSuccess = FALSE; + + if(dib) { + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename(lpszPathName); + if(fif != FIF_UNKNOWN ) { + // check that the plugin has sufficient writing and export capabilities ... + WORD bpp = FreeImage_GetBPP(dib); + if(FreeImage_FIFSupportsWriting(fif) && FreeImage_FIFSupportsExportBPP(fif, bpp)) { + // ok, we can save the file + bSuccess = FreeImage_Save(fif, dib, lpszPathName, flag); + // unless an abnormal bug, we are done ! + } + } + } + return (bSuccess == TRUE) ? true : false; +} + +// ---------------------------------------------------------- + +/** + FreeImage error handler + @param fif Format / Plugin responsible for the error + @param message Error message +*/ +void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message) { + printf("\n*** "); + if(fif != FIF_UNKNOWN) { + printf("%s Format\n", FreeImage_GetFormatFromFIF(fif)); + } + printf(message); + printf(" ***\n"); +} + +// ---------------------------------------------------------- + +#ifndef MAX_PATH +#define MAX_PATH 260 +#endif + +int +main(int argc, char *argv[]) { + + const char *input_dir = "d:\\images\\"; + FIBITMAP *dib = NULL; + int id = 1; + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif // FREEIMAGE_LIB + + // initialize your own FreeImage error handler + + FreeImage_SetOutputMessage(FreeImageErrorHandler); + + // print version & copyright infos + + printf(FreeImage_GetVersion()); + printf("\n"); + printf(FreeImage_GetCopyrightMessage()); + printf("\n"); + + // open the log file + + FILE *log_file = fopen("log_file.txt", "w"); + + // batch convert all supported bitmaps + + _finddata_t finddata; + long handle; + char image_path[MAX_PATH]; + + // scan all files + strcpy(image_path, input_dir); + strcat(image_path, "*.*"); + + if ((handle = _findfirst(image_path, &finddata)) != -1) { + do { + // make a path to a directory + + char *directory = new char[MAX_PATH]; + strcpy(directory, input_dir); + strcat(directory, finddata.name); + + // make a unique filename + + char *unique = new char[128]; + itoa(id, unique, 10); + strcat(unique, ".png"); + + // open and load the file using the default load option + dib = GenericLoader(directory, 0); + + if (dib != NULL) { + // save the file as PNG + bool bSuccess = GenericWriter(dib, unique, PNG_DEFAULT); + + // free the dib + FreeImage_Unload(dib); + + if(bSuccess) { + fwrite(unique, strlen(unique), 1, log_file); + } else { + strcpy(unique, "FAILED"); + fwrite(unique, strlen(unique), 1, log_file); + } + fwrite(" >> ", 4, 1, log_file); + fwrite(directory, strlen(directory), 1, log_file); + fwrite("\n", 1, 1, log_file); + + id++; + } + + delete [] unique; + delete [] directory; + + } while (_findnext(handle, &finddata) == 0); + + _findclose(handle); + } + + fclose(log_file); + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif // FREEIMAGE_LIB + + return 0; +} diff --git a/#ThirdParty/FreeImage/Examples/Generic/CloneMultiPage.cpp b/#ThirdParty/FreeImage/Examples/Generic/CloneMultiPage.cpp new file mode 100644 index 0000000..bbeef58 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/CloneMultiPage.cpp @@ -0,0 +1,112 @@ +// ========================================================== +// Multipage functions demonstration +// +// Design and implementation by +// - Hervé Drolon +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at own risk! +// ========================================================== + +// This sample shows how to clone a multipage TIFF +// +// Functions used in this sample : +// FreeImage_OpenMultiBitmap, FreeImage_GetPageCount, FreeImage_LockPage, +// FreeImage_AppendPage, FreeImage_UnlockPage, FreeImage_CloseMultiBitmap; +// FreeImage_SetOutputMessage +// +// ========================================================== + +#include +#include +#include + +#include "FreeImage.h" + +// ---------------------------------------------------------- + +/** + FreeImage error handler +*/ +void MyMessageFunc(FREE_IMAGE_FORMAT fif, const char *message) { + cout << "\n*** " << message << " ***\n"; + cout.flush(); +} + +// ---------------------------------------------------------- + +bool CloneMultiPage(FREE_IMAGE_FORMAT fif, char *input, char *output, int output_flag) { + + BOOL bMemoryCache = TRUE; + + // Open src file (read-only, use memory cache) + FIMULTIBITMAP *src = FreeImage_OpenMultiBitmap(fif, input, FALSE, TRUE, bMemoryCache); + + if(src) { + // Open dst file (creation, use memory cache) + FIMULTIBITMAP *dst = FreeImage_OpenMultiBitmap(fif, output, TRUE, FALSE, bMemoryCache); + + // Get src page count + int count = FreeImage_GetPageCount(src); + + // Clone src to dst + for(int page = 0; page < count; page++) { + // Load the bitmap at position 'page' + FIBITMAP *dib = FreeImage_LockPage(src, page); + if(dib) { + // add a new bitmap to dst + FreeImage_AppendPage(dst, dib); + // Unload the bitmap (do not apply any change to src) + FreeImage_UnlockPage(src, dib, FALSE); + } + } + + // Close src + FreeImage_CloseMultiBitmap(src, 0); + // Save and close dst + FreeImage_CloseMultiBitmap(dst, output_flag); + + return true; + } + + return false; +} + + +int +main(int argc, char *argv[]) { + + char *input_filename = "images\\input.tif"; + char *output_filename = "images\\clone.tif"; + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif // FREEIMAGE_LIB + + // initialize our own FreeImage error handler + + FreeImage_SetOutputMessage(MyMessageFunc); + + // Copy 'input.tif' to 'clone.tif' + + CloneMultiPage(FIF_TIFF, input_filename, output_filename, 0); + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif // FREEIMAGE_LIB + + return 0; +} diff --git a/#ThirdParty/FreeImage/Examples/Generic/CreateAlpha.cpp b/#ThirdParty/FreeImage/Examples/Generic/CreateAlpha.cpp new file mode 100644 index 0000000..48b3e29 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/CreateAlpha.cpp @@ -0,0 +1,181 @@ +// ========================================================== +// Alpha channel manipulation example +// +// Design and implementation by +// - Hervé Drolon +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at own risk! +// ========================================================== + +// This example shows how to create a transparent image from any input image +// using the greyscale version of the input image as the alpha channel mask. +// The alpha channel is set using the FreeImage_SetChannel function. +// +// +// ========================================================== + +#include +#include "FreeImage.h" + +// ---------------------------------------------------------- + +/** Generic image loader + @param lpszPathName Pointer to the full file name + @param flag Optional load flag constant + @return Returns the loaded dib if successful, returns NULL otherwise +*/ +FIBITMAP* GenericLoader(const char* lpszPathName, int flag) { + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + + // check the file signature and deduce its format + // (the second argument is currently not used by FreeImage) + fif = FreeImage_GetFileType(lpszPathName, 0); + if(fif == FIF_UNKNOWN) { + // no signature ? + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename(lpszPathName); + } + // check that the plugin has reading capabilities ... + if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { + // ok, let's load the file + FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag); + // unless a bad file format, we are done ! + return dib; + } + return NULL; +} + +/** Generic image writer + @param dib Pointer to the dib to be saved + @param lpszPathName Pointer to the full file name + @param flag Optional save flag constant + @return Returns true if successful, returns false otherwise +*/ +bool GenericWriter(FIBITMAP* dib, const char* lpszPathName, int flag) { + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + BOOL bSuccess = FALSE; + + if(dib) { + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename(lpszPathName); + if(fif != FIF_UNKNOWN ) { + // check that the plugin has sufficient writing and export capabilities ... + WORD bpp = FreeImage_GetBPP(dib); + if(FreeImage_FIFSupportsWriting(fif) && FreeImage_FIFSupportsExportBPP(fif, bpp)) { + // ok, we can save the file + bSuccess = FreeImage_Save(fif, dib, lpszPathName, flag); + // unless an abnormal bug, we are done ! + } + } + } + return (bSuccess == TRUE) ? true : false; +} + +// ---------------------------------------------------------- + +/** + FreeImage error handler + @param fif Format / Plugin responsible for the error + @param message Error message +*/ +void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message) { + printf("\n*** "); + if(fif != FIF_UNKNOWN) { + printf("%s Format\n", FreeImage_GetFormatFromFIF(fif)); + } + printf(message); + printf(" ***\n"); +} + +// ---------------------------------------------------------- + + +/** + Creates a 32-bit transparent image using the black channel of the source image + @param src Source image + @return Returns a 32-bit transparent image +*/ +FIBITMAP* CreateAlphaFromLightness(FIBITMAP *src) { + // create a 32-bit image from the source + FIBITMAP *dst = FreeImage_ConvertTo32Bits(src); + + // create a 8-bit mask + FreeImage_Invert(src); + FIBITMAP *mask = FreeImage_ConvertTo8Bits(src); + FreeImage_Invert(src); + + // insert the mask as an alpha channel + FreeImage_SetChannel(dst, mask, FICC_ALPHA); + + // free the mask and return + FreeImage_Unload(mask); + + return dst; +} + +int +main(int argc, char *argv[]) { + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif // FREEIMAGE_LIB + + // initialize your own FreeImage error handler + + FreeImage_SetOutputMessage(FreeImageErrorHandler); + + // print version & copyright infos + + printf("FreeImage version : %s", FreeImage_GetVersion()); + printf("\n"); + printf(FreeImage_GetCopyrightMessage()); + printf("\n"); + + + if(argc != 3) { + printf("Usage : CreateAlpha \n"); + return 0; + } + + // Load the source image + FIBITMAP *src = GenericLoader(argv[1], 0); + if(src) { + // Create a transparent image from the lightness image of src + FIBITMAP *dst = CreateAlphaFromLightness(src); + + if(dst) { + // Save the destination image + bool bSuccess = GenericWriter(dst, argv[2], 0); + if(!bSuccess) { + printf("\nUnable to save %s file", argv[2]); + printf("\nThis format does not support 32-bit images"); + } + + // Free dst + FreeImage_Unload(dst); + } + + // Free src + FreeImage_Unload(src); + } + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif // FREEIMAGE_LIB + + return 0; +} diff --git a/#ThirdParty/FreeImage/Examples/Generic/FIFImportExport.cpp b/#ThirdParty/FreeImage/Examples/Generic/FIFImportExport.cpp new file mode 100644 index 0000000..f78c054 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/FIFImportExport.cpp @@ -0,0 +1,149 @@ +// ========================================================== +// Plugin functions demonstration +// +// Design and implementation by +// - Hervé Drolon +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at own risk! +// ========================================================== + +// This example shows how to use Plugin functions to explore FreeImage capabilities. +// Whenever an external plugin is added to the library, it is automatically loaded +// with FreeImage and can be asked for its capabilities via the plugin functions. +// +// Functions used in this sample : +// FreeImage_FIFSupportsExportBPP, FreeImage_FIFSupportsICCProfiles, FreeImage_FIFSupportsReading, +// FreeImage_FIFSupportsWriting, FreeImage_GetFIFCount, FreeImage_GetFIFDescription, +// FreeImage_GetFIFExtensionList, FreeImage_GetFormatFromFIF, +// FreeImage_GetVersion, FreeImage_GetCopyrightMessage, FreeImage_SetOutputMessage +// +// ========================================================== + +#include +#include +#include +#include + +#include "FreeImage.h" + +// ---------------------------------------------------------- + +/** + FreeImage error handler +*/ +void MyMessageFunc(FREE_IMAGE_FORMAT fif, const char *message) { + cout << "\n*** " << message << " ***\n"; +} + +// ---------------------------------------------------------- + +/** + Print plugins import capabilities +*/ +void PrintImportFormats(iostream& ios) { + int count = FreeImage_GetFIFCount(); + if(count) + ios << "FORMAT;DESCRIPTION;EXTENSIONS;ICC PROFILES\n"; + for(int i = 0; i < count; i++) { + FREE_IMAGE_FORMAT fif = (FREE_IMAGE_FORMAT)i; + + if(FreeImage_FIFSupportsReading(fif)) { + const char * format = FreeImage_GetFormatFromFIF(fif); + const char * description = FreeImage_GetFIFDescription(fif); + const char * ext = FreeImage_GetFIFExtensionList(fif); + const char * icc = "*"; + if(FreeImage_FIFSupportsICCProfiles(fif)) { + ios << format << ";" << description << ";" << ext << ";" << icc << "\n"; + } else { + ios << format << ";" << description << ";" << ext << "; \n"; + } + } + } +} + +/** + Print plugins export capabilities +*/ +void PrintExportFormats(iostream& ios) { + int count = FreeImage_GetFIFCount(); + if(count) + ios << "FORMAT;DESCRIPTION;EXTENSIONS;BITDEPTH;ICC PROFILES\n"; + for(int i = 0; i < count; i++) { + FREE_IMAGE_FORMAT fif = (FREE_IMAGE_FORMAT)i; + + if(FreeImage_FIFSupportsWriting(fif)) { + const char * format = FreeImage_GetFormatFromFIF(fif); + const char * description = FreeImage_GetFIFDescription(fif); + const char * ext = FreeImage_GetFIFExtensionList(fif); + const char * icc = "*"; + + ios << format << ";" << description << ";" << ext << ";"; + if(FreeImage_FIFSupportsExportBPP(fif, 1)) + ios << "1 "; + if(FreeImage_FIFSupportsExportBPP(fif, 4)) + ios << "4 "; + if(FreeImage_FIFSupportsExportBPP(fif, 8)) + ios << "8 "; + if(FreeImage_FIFSupportsExportBPP(fif, 16)) + ios << "16 "; + if(FreeImage_FIFSupportsExportBPP(fif, 24)) + ios << "24 "; + if(FreeImage_FIFSupportsExportBPP(fif, 32)) + ios << "32 "; + if(FreeImage_FIFSupportsICCProfiles(fif)) { + ios << ";" << icc; + } else { + ios << "; "; + } + ios << "\n"; + } + } +} + +int +main(int argc, char *argv[]) { + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif // FREEIMAGE_LIB + + // initialize FreeImage error handler + + FreeImage_SetOutputMessage(MyMessageFunc); + + // print version & copyright infos + + cout << "FreeImage " << FreeImage_GetVersion() << "\n"; + cout << FreeImage_GetCopyrightMessage() << "\n\n"; + + // Print input formats (including external plugins) known by the library + fstream importFile("fif_import.csv", ios::out); + PrintImportFormats(importFile); + importFile.close(); + + // Print output formats (including plugins) known by the library + // for each export format, supported bitdepths are given + fstream exportFile("fif_export.csv", ios::out); + PrintExportFormats(exportFile); + exportFile.close(); + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif // FREEIMAGE_LIB + + return 0; + +} diff --git a/#ThirdParty/FreeImage/Examples/Generic/FIIO_Mem.cpp b/#ThirdParty/FreeImage/Examples/Generic/FIIO_Mem.cpp new file mode 100644 index 0000000..33eea8a --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/FIIO_Mem.cpp @@ -0,0 +1,146 @@ +/*--------------------------------------------------------------------------*\ +|| fiio_mem.cpp by Ryan Rubley || +|| || +|| (v1.02) 4-28-2004 || +|| FreeImageIO to memory || +|| || +\*--------------------------------------------------------------------------*/ + +#include +#include +#include "fiio_mem.h" + +#ifdef __cplusplus +extern "C" { +#endif + +FIBITMAP * +FreeImage_LoadFromMem(FREE_IMAGE_FORMAT fif, fiio_mem_handle *handle, int flags) { + FreeImageIO io; + SetMemIO(&io); + + if (handle && handle->data) { + handle->curpos = 0; + return FreeImage_LoadFromHandle(fif, &io, (fi_handle)handle, flags); + } + + return NULL; +} + +BOOL +FreeImage_SaveToMem(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, fiio_mem_handle *handle, int flags) { + FreeImageIO io; + SetMemIO(&io); + + if (handle) { + handle->filelen = 0; + handle->curpos = 0; + return FreeImage_SaveToHandle(fif, dib, &io, (fi_handle)handle, flags); + } + + return FALSE; +} + +// ---------------------------------------------------------- + +void +SetMemIO(FreeImageIO *io) { + io->read_proc = fiio_mem_ReadProc; + io->seek_proc = fiio_mem_SeekProc; + io->tell_proc = fiio_mem_TellProc; + io->write_proc = fiio_mem_WriteProc; +} + +// ---------------------------------------------------------- + +#define FIIOMEM(member) (((fiio_mem_handle *)handle)->member) + +unsigned +fiio_mem_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + unsigned x; + for( x=0; x= FIIOMEM(datalen) ) { + //if we are at or above 1G, we cant double without going negative + if( FIIOMEM(datalen) & 0x40000000 ) { + //max 2G + if( FIIOMEM(datalen) == 0x7FFFFFFF ) { + return 0; + } + newdatalen = 0x7FFFFFFF; + } else if( FIIOMEM(datalen) == 0 ) { + //default to 4K if nothing yet + newdatalen = 4096; + } else { + //double size + newdatalen = FIIOMEM(datalen) << 1; + } + newdata = realloc( FIIOMEM(data), newdatalen ); + if( !newdata ) { + return 0; + } + FIIOMEM(data) = newdata; + FIIOMEM(datalen) = newdatalen; + } + memcpy( (char *)FIIOMEM(data) + FIIOMEM(curpos), buffer, size*count ); + FIIOMEM(curpos) += size*count; + if( FIIOMEM(curpos) > FIIOMEM(filelen) ) { + FIIOMEM(filelen) = FIIOMEM(curpos); + } + return count; +} + +int +fiio_mem_SeekProc(fi_handle handle, long offset, int origin) { + switch(origin) { //0 to filelen-1 are 'inside' the file + default: + case SEEK_SET: //can fseek() to 0-7FFFFFFF always + if( offset >= 0 ) { + FIIOMEM(curpos) = offset; + return 0; + } + break; + + case SEEK_CUR: + if( FIIOMEM(curpos)+offset >= 0 ) { + FIIOMEM(curpos) += offset; + return 0; + } + break; + + case SEEK_END: + if( FIIOMEM(filelen)+offset >= 0 ) { + FIIOMEM(curpos) = FIIOMEM(filelen)+offset; + return 0; + } + break; + } + + return -1; +} + +long +fiio_mem_TellProc(fi_handle handle) { + return FIIOMEM(curpos); +} + +#ifdef __cplusplus +} +#endif diff --git a/#ThirdParty/FreeImage/Examples/Generic/FIIO_Mem.h b/#ThirdParty/FreeImage/Examples/Generic/FIIO_Mem.h new file mode 100644 index 0000000..e686b1c --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/FIIO_Mem.h @@ -0,0 +1,74 @@ +/*--------------------------------------------------------------------------*\ +|| fiio_mem.h by Ryan Rubley || +|| || +|| (v1.02) 4-28-2004 || +|| FreeImageIO to memory || +|| || +\*--------------------------------------------------------------------------*/ + +#ifndef _FIIO_MEM_H_ +#define _FIIO_MEM_H_ + +#include "freeimage.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct fiio_mem_handle_s { + long filelen,datalen,curpos; + void *data; +} fiio_mem_handle; + +/* it is up to the user to create a fiio_mem_handle and init datalen and data + * filelen will be pre-set to 0 by SaveToMem + * curpos will be pre-set to 0 by SaveToMem and LoadFromMem + * IMPORTANT: data should be set to NULL and datalen to 0, + * unless the user wants to manually malloc a larger buffer + */ +FIBITMAP *FreeImage_LoadFromMem(FREE_IMAGE_FORMAT fif, fiio_mem_handle *handle, int flags); +BOOL FreeImage_SaveToMem(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, fiio_mem_handle *handle, int flags); + +void SetMemIO(FreeImageIO *io); +unsigned fiio_mem_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle); +unsigned fiio_mem_WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle); +int fiio_mem_SeekProc(fi_handle handle, long offset, int origin); +long fiio_mem_TellProc(fi_handle handle); + +/*** Example Usage *** + +//variables +FIBITMAP *bitmap, *bitmap2; +fiio_mem_handle fmh; + +//important initialization +fmh.data = NULL; +fmh.datalen = 0; + +//load a regular file +bitmap = FreeImage_Load(FIF_PNG, "sample.png"); + +//save the file to memory +FreeImage_SaveToMem(FIF_PNG, bitmap, &fmh, 0); + +//at this point, fmh.data contains the entire PNG data in memory +//fmh.datalen is the amount of space malloc'd for the image in memory, +//but only fmh.filelen amount of that space is actually used. + +//its easy load an image from memory as well +bitmap2 = FreeImage_LoadFromMem(FIF_PNG, &fmh, 0); +//you could also have image data in memory via some other method, and just set +//fmh.data to point to it, and set both fmh.datalen and fmh.filelen to the +//size of that data, then FreeImage_LoadFromMem could load the image from that +//memory + +//make sure to free the data since SaveToMem will cause it to be malloc'd +free(fmh.data); + +*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/#ThirdParty/FreeImage/Examples/Generic/LoadFromHandle.cpp b/#ThirdParty/FreeImage/Examples/Generic/LoadFromHandle.cpp new file mode 100644 index 0000000..d8e14e8 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/LoadFromHandle.cpp @@ -0,0 +1,145 @@ +// ========================================================== +// Load From Handle Example +// +// Design and implementation by +// - Hervé Drolon +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at own risk! +// ========================================================== + +// This example shows how to load a bitmap from a +// user allocated FILE pointer. +// +// Functions used in this sample : +// FreeImage_GetFormatFromFIF, FreeImage_GetFileTypeFromHandle, FreeImage_LoadFromHandle, +// FreeImage_GetFIFFromFilename, FreeImage_Save, FreeImage_Unload +// FreeImage_GetVersion, FreeImage_GetCopyrightMessage, FreeImage_SetOutputMessage +// +// ========================================================== + +#include +#include +#include + +#include "FreeImage.h" + +// ---------------------------------------------------------- + +/** + FreeImage error handler + @param fif Format / Plugin responsible for the error + @param message Error message +*/ +void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message) { + printf("\n*** "); + if(fif != FIF_UNKNOWN) { + printf("%s Format\n", FreeImage_GetFormatFromFIF(fif)); + } + printf(message); + printf(" ***\n"); +} + +// ---------------------------------------------------------- + +unsigned DLL_CALLCONV +myReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + return fread(buffer, size, count, (FILE *)handle); +} + +unsigned DLL_CALLCONV +myWriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + return fwrite(buffer, size, count, (FILE *)handle); +} + +int DLL_CALLCONV +mySeekProc(fi_handle handle, long offset, int origin) { + return fseek((FILE *)handle, offset, origin); +} + +long DLL_CALLCONV +myTellProc(fi_handle handle) { + return ftell((FILE *)handle); +} + +// ---------------------------------------------------------- + +int +main(int argc, char *argv[]) { + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif // FREEIMAGE_LIB + + // initialize your own FreeImage error handler + + FreeImage_SetOutputMessage(FreeImageErrorHandler); + + // print version & copyright infos + + printf(FreeImage_GetVersion()); + printf("\n"); + printf(FreeImage_GetCopyrightMessage()); + printf("\n"); + + + if(argc != 2) { + printf("Usage : LoadFromHandle \n"); + return 0; + } + + // initialize your own IO functions + + FreeImageIO io; + + io.read_proc = myReadProc; + io.write_proc = myWriteProc; + io.seek_proc = mySeekProc; + io.tell_proc = myTellProc; + + FILE *file = fopen(argv[1], "rb"); + + if (file != NULL) { + // find the buffer format + FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeFromHandle(&io, (fi_handle)file, 0); + + if(fif != FIF_UNKNOWN) { + // load from the file handle + FIBITMAP *dib = FreeImage_LoadFromHandle(fif, &io, (fi_handle)file, 0); + + // save the bitmap as a PNG ... + const char *output_filename = "test.png"; + + // first, check the output format from the file name or file extension + FREE_IMAGE_FORMAT out_fif = FreeImage_GetFIFFromFilename(output_filename); + + if(out_fif != FIF_UNKNOWN) { + // then save the file + FreeImage_Save(out_fif, dib, output_filename, 0); + } + + // free the loaded FIBITMAP + FreeImage_Unload(dib); + } + fclose(file); + } + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif // FREEIMAGE_LIB + + return 0; +} diff --git a/#ThirdParty/FreeImage/Examples/Generic/LoadFromMemory-classified.cpp b/#ThirdParty/FreeImage/Examples/Generic/LoadFromMemory-classified.cpp new file mode 100644 index 0000000..7494ba9 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/LoadFromMemory-classified.cpp @@ -0,0 +1,101 @@ +// ========================================================== +// Classified FreeImageIO handler +// +// Design and implementation by +// - schickb (schickb@hotmail.com) +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +class MemIO : public FreeImageIO { +public : + MemIO( BYTE *data ) : _start(data), _cp(data) { + read_proc = _ReadProc; + write_proc = _WriteProc; + tell_proc = _TellProc; + seek_proc = _SeekProc; + } + + void Reset() { + _cp = _start; + } + + static unsigned _ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle); + static unsigned _WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle); + static int _SeekProc(fi_handle handle, long offset, int origin); + static long _TellProc(fi_handle handle); + +private: + BYTE * const _start; + BYTE *_cp; +}; + + +unsigned +MemIO::_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + MemIO *memIO = (MemIO*)handle; + + BYTE *tmp = (BYTE *)buffer; + + for (unsigned c = 0; c < count; c++) { + memcpy(tmp, memIO->_cp, size); + + memIO->_cp = memIO->_cp + size; + + tmp += size; + } + + return count; +} + +unsigned +MemIO::_WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + ASSERT( false ); + return size; +} + +int +MemIO::_SeekProc(fi_handle handle, long offset, int origin) { + ASSERT(origin != SEEK_END); + + MemIO *memIO = (MemIO*)handle; + + if (origin == SEEK_SET) + memIO->_cp = memIO->_start + offset; + else + memIO->_cp = memIO->_cp + offset; + + return 0; +} + +long +MemIO::_TellProc(fi_handle handle) { + MemIO *memIO = (MemIO*)handle; + + return memIO->_cp - memIO->_start; +} + +// ---------------------------------------------------------- +// PSEUDOCODE... HELPS TO UNDERSTAND HOW THE MEMIO CLASS WORKS +// ---------------------------------------------------------- + +int +main(int argc, char *argv[]) { + BYTE *data = loadimagesomehow(); + + MemIO memIO(data); + + FIBITMAP *fbmp = FreeImage_LoadFromHandle( fif, &memIO, (fi_handle)&memIO ); +} \ No newline at end of file diff --git a/freeimage241/Examples/Generic/LoadFromMemory.cpp b/#ThirdParty/FreeImage/Examples/Generic/LoadFromMemory.cpp similarity index 84% rename from freeimage241/Examples/Generic/LoadFromMemory.cpp rename to #ThirdParty/FreeImage/Examples/Generic/LoadFromMemory.cpp index 72acc73..f62e0b5 100644 --- a/freeimage241/Examples/Generic/LoadFromMemory.cpp +++ b/#ThirdParty/FreeImage/Examples/Generic/LoadFromMemory.cpp @@ -1,112 +1,113 @@ -// ========================================================== -// Load From Memory Example -// -// Design and implementation by Floris van den Berg -// -// This file is part of FreeImage -// -// Use at own risk! -// ========================================================== -// -// This example shows how to load a bitmap from memory -// rather than from a file. To do this we make use of the -// FreeImage_LoadXXXFromHandle functions where we override -// the i/o functions to simulate FILE* access in memory. -// -// For seeking purposes the fi_handle passed to the i/o -// functions contain the start of the data block where the -// bitmap is stored. -// -// ========================================================== - -#include -#include -#include - -#include "FreeImage.h" - -// ---------------------------------------------------------- - -fi_handle g_load_address; - -// ---------------------------------------------------------- - -inline unsigned -_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { - BYTE *tmp = (BYTE *)buffer; - - for (unsigned c = 0; c < count; c++) { - memcpy(tmp, g_load_address, size); - - g_load_address = (BYTE *)g_load_address + size; - - tmp += size; - } - - return count; -} - -inline unsigned -_WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { - // there's not much use for saving the bitmap into memory now, is there? - - return size; -} - -inline int -_SeekProc(fi_handle handle, long offset, int origin) { - assert(origin != SEEK_END); - - if (origin == SEEK_SET) { - g_load_address = (BYTE *)handle + offset; - } else { - g_load_address = (BYTE *)g_load_address + offset; - } - - return 0; -} - -inline long -_TellProc(fi_handle handle) { - assert((int)handle > (int)g_load_address); - - return ((int)g_load_address - (int)handle); -} - -// ---------------------------------------------------------- - -int __cdecl -main(int argc, char *argv[]) { - FreeImageIO io; - - io.read_proc = _ReadProc; - io.write_proc = _WriteProc; - io.tell_proc = _TellProc; - io.seek_proc = _SeekProc; - - // allocate some memory for the bitmap - - BYTE *test = new BYTE[159744]; - - if (test != NULL) { - // load the bitmap into memory. ofcourse you can do this any way you want - - FILE *file = fopen("e:\\projects\\images\\money-256.tif", "rb"); - fread(test, 159744, 1, file); - fclose(file); - - // we store the load address of the bitmap for internal reasons - - g_load_address = test; - - // convert the bitmap - - FIBITMAP *dib = FreeImage_LoadTIFFFromHandle(&io, (fi_handle)test); - - FreeImage_Free(dib); - - delete [] test; - } - - return 0; +// ========================================================== +// Load From Memory Example +// +// Design and implementation by Floris van den Berg +// +// This file is part of FreeImage 3 +// +// Use at own risk! +// ========================================================== +// +// This example shows how to load a bitmap from memory +// rather than from a file. To do this we make use of the +// FreeImage_LoadFromHandle functions where we override +// the i/o functions to simulate FILE* access in memory. +// +// For seeking purposes the fi_handle passed to the i/o +// functions contain the start of the data block where the +// bitmap is stored. +// +// ========================================================== + +#include +#include +#include + +#include "FreeImage.h" + +// ---------------------------------------------------------- + +fi_handle g_load_address; + +// ---------------------------------------------------------- + +inline unsigned _stdcall +_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + BYTE *tmp = (BYTE *)buffer; + + for (unsigned c = 0; c < count; c++) { + memcpy(tmp, g_load_address, size); + + g_load_address = (BYTE *)g_load_address + size; + + tmp += size; + } + + return count; +} + +inline unsigned _stdcall +_WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle) { + // there's not much use for saving the bitmap into memory now, is there? + + return size; +} + +inline int _stdcall +_SeekProc(fi_handle handle, long offset, int origin) { + assert(origin != SEEK_END); + + if (origin == SEEK_SET) { + g_load_address = (BYTE *)handle + offset; + } else { + g_load_address = (BYTE *)g_load_address + offset; + } + + return 0; +} + +inline long _stdcall +_TellProc(fi_handle handle) { + assert((int)handle > (int)g_load_address); + + return ((int)g_load_address - (int)handle); +} + +// ---------------------------------------------------------- + +int +main(int argc, char *argv[]) { + FreeImageIO io; + + io.read_proc = _ReadProc; + io.write_proc = _WriteProc; + io.tell_proc = _TellProc; + io.seek_proc = _SeekProc; + + // allocate some memory for the bitmap + + BYTE *test = new BYTE[159744]; + + if (test != NULL) { + // load the bitmap into memory. ofcourse you can do this any way you want + + FILE *file = fopen("e:\\projects\\images\\money-256.tif", "rb"); + fread(test, 159744, 1, file); + fclose(file); + + // we store the load address of the bitmap for internal reasons + + g_load_address = test; + + // convert the bitmap + + FIBITMAP *dib = FreeImage_LoadFromHandle(FIF_TIFF, &io, (fi_handle)test); + + // don't forget to free the dib ! + FreeImage_Unload(dib); + + delete [] test; + } + + return 0; } \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Examples/Generic/ShowMetadata.cpp b/#ThirdParty/FreeImage/Examples/Generic/ShowMetadata.cpp new file mode 100644 index 0000000..1df0af8 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Generic/ShowMetadata.cpp @@ -0,0 +1,317 @@ +// ========================================================== +// Simple metadata reader +// +// Design and implementation by +// - Hervé Drolon +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at own risk! +// ========================================================== + +// +// This example shows how to easily parse all metadata +// contained in a JPEG, TIFF or PNG image. +// Comments, Exif and IPTC/NAA metadata tags are written to a HTML file +// for later reading, and Adobe XMP XML packets are written +// in a file whose extension is '.xmp'. This file can be later +// processed using a XML parser. +// +// Metadata functions showed in this sample : +// FreeImage_GetMetadataCount, FreeImage_FindFirstMetadata, FreeImage_FindNextMetadata, +// FreeImage_FindCloseMetadata, FreeImage_TagToString, FreeImage_GetMetadata +// +// ========================================================== + +#include +#include +#include + +using namespace std; + +#include "FreeImage.h" + +// ---------------------------------------------------------- + +/** Generic image loader + @param lpszPathName Pointer to the full file name + @param flag Optional load flag constant + @return Returns the loaded dib if successful, returns NULL otherwise +*/ +FIBITMAP* GenericLoader(const char* lpszPathName, int flag) { + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + + // check the file signature and deduce its format + // (the second argument is currently not used by FreeImage) + fif = FreeImage_GetFileType(lpszPathName, 0); + if(fif == FIF_UNKNOWN) { + // no signature ? + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename(lpszPathName); + } + // check that the plugin has reading capabilities ... + if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { + // ok, let's load the file + FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag); + // unless a bad file format, we are done ! + return dib; + } + return NULL; +} + +/** Generic image writer + @param dib Pointer to the dib to be saved + @param lpszPathName Pointer to the full file name + @param flag Optional save flag constant + @return Returns true if successful, returns false otherwise +*/ +bool GenericWriter(FIBITMAP* dib, const char* lpszPathName, int flag) { + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + BOOL bSuccess = FALSE; + + if(dib) { + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename(lpszPathName); + if(fif != FIF_UNKNOWN ) { + // check that the plugin has sufficient writing and export capabilities ... + WORD bpp = FreeImage_GetBPP(dib); + if(FreeImage_FIFSupportsWriting(fif) && FreeImage_FIFSupportsExportBPP(fif, bpp)) { + // ok, we can save the file + bSuccess = FreeImage_Save(fif, dib, lpszPathName, flag); + // unless an abnormal bug, we are done ! + } + } + } + return (bSuccess == TRUE) ? true : false; +} + +// ---------------------------------------------------------- + +/** + FreeImage error handler + @param fif Format / Plugin responsible for the error + @param message Error message +*/ +void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message) { + cout << "\n*** "; + if(fif != FIF_UNKNOWN) { + cout << FreeImage_GetFormatFromFIF(fif) << " Format\n"; + } + cout << message; + cout << " ***\n"; +} + +// ---------------------------------------------------------- + +/** +Print a basic HTML header +*/ +void PrintHTMLHeader(iostream& ios) { + ios << "\n\n\n"; + ios << "\n"; +} + +/** +Print a HTML footer +*/ +void PrintHTMLFooter(iostream& ios) { + ios << "\n\n\n\n"; +} + +/** +Print a table header +*/ +void PrintTableHeader(iostream& ios, const char *title) { + ios << "\n"; + ios << "" << title << "\n"; +} + +/** +Print a table section +*/ +void PrintTableSection(iostream& ios, const char *title) { + ios << "" << title << "\n"; + ios << "Tag nameTag valueDescription"; +} + +/** +Print a table footer +*/ +void PrintTableFooter(iostream& ios) { + ios << "\n"; +} + + +/** +Print the metadata tags to a HTML file +*/ +void PrintMetadata(iostream& ios, const char *sectionTitle, FIBITMAP *dib, FREE_IMAGE_MDMODEL model) { + FITAG *tag = NULL; + FIMETADATA *mdhandle = NULL; + + mdhandle = FreeImage_FindFirstMetadata(model, dib, &tag); + + if(mdhandle) { + // Print a table section + PrintTableSection(ios, sectionTitle); + + do { + // convert the tag value to a string + const char *value = FreeImage_TagToString(model, tag); + + // print the tag + // note that most tags do not have a description, + // especially when the metadata specifications are not available + if(FreeImage_GetTagDescription(tag)) { + ios << "" << FreeImage_GetTagKey(tag) << "" << value << "" << FreeImage_GetTagDescription(tag) << "\n"; + } else { + ios << "" << FreeImage_GetTagKey(tag) << "" << value << "" << " " << "\n"; + } + + } while(FreeImage_FindNextMetadata(mdhandle, &tag)); + } + + FreeImage_FindCloseMetadata(mdhandle); +} + +int +main(int argc, char *argv[]) { + unsigned count; + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif // FREEIMAGE_LIB + + // initialize your own FreeImage error handler + + FreeImage_SetOutputMessage(FreeImageErrorHandler); + + // print version & copyright infos + + cout << "FreeImage " << FreeImage_GetVersion() << "\n"; + cout << FreeImage_GetCopyrightMessage() << "\n\n"; + + if(argc != 2) { + cout << "Usage : ShowMetadata \n"; + return 0; + } + + // Load the bitmap + + FIBITMAP *dib = GenericLoader(argv[1], 0); + if(!dib) + return 0; + + // Create a HTML file + std::string html_file(strtok(argv[1], ".") + std::string(".html")); + + fstream metadataFile(html_file.c_str(), ios::out); + + // Print the header + + PrintHTMLHeader(metadataFile); + PrintTableHeader(metadataFile, argv[1]); + + // Parse and print metadata + + if(count = FreeImage_GetMetadataCount(FIMD_COMMENTS, dib)) { + cout << "\nFIMD_COMMENTS (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "Comments", dib, FIMD_COMMENTS); + } + if(count = FreeImage_GetMetadataCount(FIMD_EXIF_MAIN, dib)) { + cout << "\nFIMD_EXIF_MAIN (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "Exif - main info", dib, FIMD_EXIF_MAIN); + } + if(count = FreeImage_GetMetadataCount(FIMD_EXIF_EXIF, dib)) { + cout << "\nFIMD_EXIF_EXIF (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "Exif - advanced info", dib, FIMD_EXIF_EXIF); + } + if(count = FreeImage_GetMetadataCount(FIMD_EXIF_GPS, dib)) { + cout << "\nFIMD_EXIF_GPS (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "Exif GPS", dib, FIMD_EXIF_GPS); + } + if(count = FreeImage_GetMetadataCount(FIMD_EXIF_INTEROP, dib)) { + cout << "\nFIMD_EXIF_INTEROP (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "Exif interoperability", dib, FIMD_EXIF_INTEROP); + } + if(count = FreeImage_GetMetadataCount(FIMD_EXIF_MAKERNOTE, dib)) { + cout << "\nFIMD_EXIF_MAKERNOTE (" << count << " data)\n-----------------------------------------\n"; + + // Get the camera model + FITAG *tagMake = NULL; + FreeImage_GetMetadata(FIMD_EXIF_MAIN, dib, "Make", &tagMake); + + std::string buffer((char*)FreeImage_GetTagValue(tagMake)); + buffer += " Makernote"; + + PrintMetadata(metadataFile, buffer.c_str(), dib, FIMD_EXIF_MAKERNOTE); + } + if(count = FreeImage_GetMetadataCount(FIMD_IPTC, dib)) { + cout << "\nFIMD_IPTC (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "IPTC/NAA", dib, FIMD_IPTC); + } + if(count = FreeImage_GetMetadataCount(FIMD_GEOTIFF, dib)) { + cout << "\nFIMD_GEOTIFF (" << count << " data)\n-----------------------------------------\n"; + + PrintMetadata(metadataFile, "GEOTIFF", dib, FIMD_GEOTIFF); + } + + // Print the footer + + PrintTableFooter(metadataFile); + PrintHTMLFooter(metadataFile); + + // close the HTML file + + metadataFile.close(); + + // print XMP data + + if(count = FreeImage_GetMetadataCount(FIMD_XMP, dib)) { + cout << "\nFIMD_XMP (" << count << " packet)\n-----------------------------------------\n"; + + std::string xmp_file(strtok(argv[1], ".") + std::string(".xmp")); + metadataFile.open(xmp_file.c_str(), ios::out); + + FITAG *tag = NULL; + FreeImage_GetMetadata(FIMD_XMP, dib, "XMLPacket", &tag); + if(tag) { + metadataFile << (char*)FreeImage_GetTagValue(tag); + } + + metadataFile.close(); + } + + + // Unload the bitmap + + FreeImage_Unload(dib); + + + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif // FREEIMAGE_LIB + + return 0; +} + + + diff --git a/freeimage241/Examples/Linux/Makefile b/#ThirdParty/FreeImage/Examples/Linux/Makefile similarity index 51% rename from freeimage241/Examples/Linux/Makefile rename to #ThirdParty/FreeImage/Examples/Linux/Makefile index 10282ab..768e784 100644 --- a/freeimage241/Examples/Linux/Makefile +++ b/#ThirdParty/FreeImage/Examples/Linux/Makefile @@ -1,26 +1,24 @@ -include ../../Makefile.cfg - - - -INCLUDE = -I../../Source -VGALIBRARIES = -lfreeimage -lvga -GTKLIBRARIES = -lfreeimage -lgtk -lgdk -GTKINCLUDE = -I/usr/lib/glib/include -CFLAGS = $(COMPILERFLAGS) $(INCLUDE) - - - -all: default - -default: linux-svgalib linux-gtk - -linux-svgalib: linux-svgalib.c - $(CC) $(CFLAGS) $< -o $@ $(VGALIBRARIES) - strip $@ - -linux-gtk: linux-gtk.c - $(CC) $(CFLAGS) $< -o $@ $(GTKLIBRARIES) $(GTKINCLUDE) - strip $@ - -clean: - rm -f core linux-svgalib linux-gtk +CC = gcc +CPP = g++ +COMPILERFLAGS = -O3 +INCLUDE = -I../../Dist +VGALIBRARIES = -lfreeimage -lvga +VGAINCLUDE = -I/usr/include/asm +GTKLIBRARIES = -lfreeimage `pkg-config --libs gtk+-2.0` +GTKINCLUDE = `pkg-config --cflags gtk+-2.0` +CFLAGS = $(COMPILERFLAGS) $(INCLUDE) + +all: default + +default: linux-svgalib linux-gtk + +linux-svgalib: linux-svgalib.c + $(CC) $(CFLAGS) $< -o $@ $(VGALIBRARIES) $(VGAINCLUDE) + strip $@ + +linux-gtk: linux-gtk.c + $(CC) $(CFLAGS) $< -o $@ $(GTKLIBRARIES) $(GTKINCLUDE) + strip $@ + +clean: + rm -f core linux-svgalib linux-gtk diff --git a/freeimage241/Examples/Linux/linux-gtk.c b/#ThirdParty/FreeImage/Examples/Linux/linux-gtk.c similarity index 79% rename from freeimage241/Examples/Linux/linux-gtk.c rename to #ThirdParty/FreeImage/Examples/Linux/linux-gtk.c index 016acc3..e5cf51f 100644 --- a/freeimage241/Examples/Linux/linux-gtk.c +++ b/#ThirdParty/FreeImage/Examples/Linux/linux-gtk.c @@ -1,91 +1,100 @@ -#include -#include "FreeImage.h" - -void destroy(GtkWidget * widget, gpointer data) { - gtk_main_quit(); -} - -int main(int argc, char *argv[]) -{ - GtkWidget *window, *imagebox; - GdkVisual *visual; - GdkImage *image; - FIBITMAP *dib; - int y; - - dib = FreeImage_LoadPNG("freeimage.png",PNG_DEFAULT); - - gtk_init(&argc, &argv); - - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect(GTK_OBJECT(window), "destroy", - GTK_SIGNAL_FUNC(destroy), NULL); - - visual = gdk_visual_get_system(); - - image = gdk_image_new(GDK_IMAGE_NORMAL,visual, - FreeImage_GetWidth(dib),FreeImage_GetHeight(dib)); - - g_print("picture: %d bpp\n" - "system: %d bpp byteorder: %d\n" - " redbits: %d greenbits: %d bluebits: %d\n" - "image: %d bpp %d bytes/pixel\n", - FreeImage_GetBPP(dib), - visual->depth,visual->byte_order, - visual->red_prec,visual->green_prec,visual->blue_prec, - image->depth,image->bpp ); - - if (FreeImage_GetBPP(dib) != (image->bpp << 3)) { - FIBITMAP *ptr; - - switch (image->bpp) { - case 1: - ptr = FreeImage_ConvertTo8Bits(dib); - break; - - case 2: - if (image->depth == 15) { - ptr = FreeImage_ConvertTo16Bits555(dib); - } else { - ptr = FreeImage_ConvertTo16Bits565(dib); - } - - break; - case 3: - ptr = FreeImage_ConvertTo24Bits(dib); - break; - - default: - case 4: - ptr = FreeImage_ConvertTo32Bits(dib); - break; - } - - FreeImage_Free(dib); - dib = ptr; - } - -//makes it upside down :( -// memcpy(image->mem, FreeImage_GetBits(dib), image->bpl * image->height); - - BYTE *ptr = FreeImage_GetBits(dib); - - for (y = 0; y < image->height; y++) { - memcpy(image->mem + (y * image->bpl), - ptr + ((image->height - y - 1) * image->bpl), - image->bpl); - } - - FreeImage_Free(dib); - - imagebox = gtk_image_new(image, NULL); - gtk_container_add(GTK_CONTAINER(window), imagebox); - - gtk_widget_show(imagebox); - gtk_widget_show(window); - - gtk_main(); - - return 0; -} +#include +#include +#include + +void destroy(GtkWidget * widget, gpointer data) { + gtk_main_quit(); +} + +int main(int argc, char *argv[]) +{ + GtkWidget *window, *imagebox; + GdkVisual *visual; + GdkImage *image; + FIBITMAP *dib; + int y; + + // initialize the FreeImage library + FreeImage_Initialise(TRUE); + + dib = FreeImage_Load(FIF_PNG, "freeimage.png", PNG_DEFAULT); + + gtk_init(&argc, &argv); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + + gtk_signal_connect(GTK_OBJECT(window), "destroy", + GTK_SIGNAL_FUNC(destroy), NULL); + + visual = gdk_visual_get_system(); + + image = gdk_image_new(GDK_IMAGE_NORMAL,visual, + FreeImage_GetWidth(dib),FreeImage_GetHeight(dib)); + + g_print("picture: %d bpp\n" + "system: %d bpp byteorder: %d\n" + " redbits: %d greenbits: %d bluebits: %d\n" + "image: %d bpp %d bytes/pixel\n", + FreeImage_GetBPP(dib), + visual->depth,visual->byte_order, + visual->red_prec,visual->green_prec,visual->blue_prec, + image->depth,image->bpp ); + + if (FreeImage_GetBPP(dib) != (image->bpp << 3)) { + FIBITMAP *ptr; + + switch (image->bpp) { + case 1: + ptr = FreeImage_ConvertTo8Bits(dib); + break; + + case 2: + if (image->depth == 15) { + ptr = FreeImage_ConvertTo16Bits555(dib); + } else { + ptr = FreeImage_ConvertTo16Bits565(dib); + } + + break; + case 3: + ptr = FreeImage_ConvertTo24Bits(dib); + break; + + default: + case 4: + ptr = FreeImage_ConvertTo32Bits(dib); + break; + } + + FreeImage_Unload(dib); + dib = ptr; + } + +//makes it upside down :( +// memcpy(image->mem, FreeImage_GetBits(dib), image->bpl * image->height); + + BYTE *ptr = FreeImage_GetBits(dib); + + for (y = 0; y < image->height; y++) { + memcpy(image->mem + (y * image->bpl), + ptr + ((image->height - y - 1) * image->bpl), + image->bpl); + } + + FreeImage_Unload(dib); + + imagebox = gtk_image_new_from_image(image, NULL); + gtk_container_add(GTK_CONTAINER(window), imagebox); + + gtk_widget_show(imagebox); + gtk_widget_show(window); + + gtk_main(); + + // release the FreeImage library + FreeImage_DeInitialise(); + + return 0; +} + + diff --git a/freeimage241/Examples/Linux/linux-svgalib.c b/#ThirdParty/FreeImage/Examples/Linux/linux-svgalib.c similarity index 71% rename from freeimage241/Examples/Linux/linux-svgalib.c rename to #ThirdParty/FreeImage/Examples/Linux/linux-svgalib.c index 820329b..159a238 100644 --- a/freeimage241/Examples/Linux/linux-svgalib.c +++ b/#ThirdParty/FreeImage/Examples/Linux/linux-svgalib.c @@ -1,91 +1,96 @@ -#include -#include "FreeImage.h" - -int main(void) -{ - FIBITMAP *dib,*ptr; - vga_modeinfo *inf; - int length,height,bpp,y; - - dib = FreeImage_LoadPNG("freeimage.png",PNG_DEFAULT); - - vga_init(); - vga_setmode(vga_getdefaultmode()); - - inf = vga_getmodeinfo(vga_getcurrentmode()); - - switch(inf->colors) { - default: - printf("Must be at least 256color mode!\n"); - return; - - case 1 << 8: - bpp = 8; - break; - - case 1 << 15: - bpp = 15; - break; - - case 1 << 16: - bpp = 16; - break; - - case 1 << 24: - if( inf->bytesperpixel == 3 ) { - bpp = 24; - } else { - bpp = 32; - } - break; - } - - if(FreeImage_GetBPP(dib) != bpp) { - switch(bpp) { - case 8: - ptr = FreeImage_ConvertTo8Bits(dib); - break; - - case 15: - ptr = FreeImage_ConvertTo16Bits555(dib); - break; - - case 16: - ptr = FreeImage_ConvertTo16Bits565(dib); - break; - - case 24: - ptr = FreeImage_ConvertTo24Bits(dib); - break; - - default: - case 32: - ptr = FreeImage_ConvertTo32Bits(dib); - break; - } - - FreeImage_Free(dib); - dib = ptr; - } - - length = FreeImage_GetWidth(dib); - if( inf->width < length ) { - length = inf->width; - } - height = FreeImage_GetHeight(dib); - if( inf->height < height ) { - height = inf->height; - } - - for(y = 0; y < height; y++) { - vga_drawscansegment(FreeImage_GetScanLine(dib, y), - 0,y,length); - } - - FreeImage_Free(dib); - - vga_getch(); - vga_setmode(TEXT); - - return 0; -} +#include +#include "FreeImage.h" + +int main(void) +{ + FIBITMAP *dib,*ptr; + vga_modeinfo *inf; + int length,height,bpp,y; + + // initialize the FreeImage library + FreeImage_Initialise(); + + dib = FreeImage_Load(FIF_PNG, "freeimage.png", PNG_DEFAULT); + + vga_init(); + vga_setmode(vga_getdefaultmode()); + + inf = vga_getmodeinfo(vga_getcurrentmode()); + + switch(inf->colors) { + default: + printf("Must be at least 256 color mode!\n"); + return; + + case 1 << 8: + bpp = 8; + break; + + case 1 << 15: + bpp = 15; + break; + + case 1 << 16: + bpp = 16; + break; + + case 1 << 24: + if( inf->bytesperpixel == 3 ) { + bpp = 24; + } else { + bpp = 32; + } + break; + } + + if(FreeImage_GetBPP(dib) != bpp) { + switch(bpp) { + case 8: + ptr = FreeImage_ConvertTo8Bits(dib); + break; + + case 15: + ptr = FreeImage_ConvertTo16Bits555(dib); + break; + + case 16: + ptr = FreeImage_ConvertTo16Bits565(dib); + break; + + case 24: + ptr = FreeImage_ConvertTo24Bits(dib); + break; + + default: + case 32: + ptr = FreeImage_ConvertTo32Bits(dib); + break; + } + + FreeImage_Unload(dib); + dib = ptr; + } + + length = FreeImage_GetWidth(dib); + if( inf->width < length ) { + length = inf->width; + } + height = FreeImage_GetHeight(dib); + if( inf->height < height ) { + height = inf->height; + } + + for(y = 0; y < height; y++) { + vga_drawscansegment(FreeImage_GetScanLine(dib, y), 0, y, length); + } + + FreeImage_Unload(dib); + + vga_getch(); + vga_setmode(TEXT); + + // release the FreeImage library + FreeImage_DeInitialise(); + + return 0; +} diff --git a/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/TextureManager.cpp b/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/TextureManager.cpp new file mode 100644 index 0000000..dfc0ed9 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/TextureManager.cpp @@ -0,0 +1,145 @@ +//********************************************** +//Singleton Texture Manager class +//Written by Ben English +//benjamin.english@oit.edu +// +//For use with OpenGL and the FreeImage library +//********************************************** + +#include "TextureManager.h" + +TextureManager* TextureManager::m_inst(0); + +TextureManager* TextureManager::Inst() +{ + if(!m_inst) + m_inst = new TextureManager(); + + return m_inst; +} + +TextureManager::TextureManager() +{ + // call this ONLY when linking with FreeImage as a static library + #ifdef FREEIMAGE_LIB + FreeImage_Initialise(); + #endif +} + +//these should never be called +//TextureManager::TextureManager(const TextureManager& tm){} +//TextureManager& TextureManager::operator=(const TextureManager& tm){} + +TextureManager::~TextureManager() +{ + // call this ONLY when linking with FreeImage as a static library + #ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); + #endif + + UnloadAllTextures(); + m_inst = 0; +} + +bool TextureManager::LoadTexture(const char* filename, const unsigned int texID, GLenum image_format, GLint internal_format, GLint level, GLint border) +{ + //image format + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + //pointer to the image, once loaded + FIBITMAP *dib(0); + //pointer to the image data + BYTE* bits(0); + //image width and height + unsigned int width(0), height(0); + //OpenGL's image ID to map to + GLuint gl_texID; + + //check the file signature and deduce its format + fif = FreeImage_GetFileType(filename, 0); + //if still unknown, try to guess the file format from the file extension + if(fif == FIF_UNKNOWN) + fif = FreeImage_GetFIFFromFilename(filename); + //if still unkown, return failure + if(fif == FIF_UNKNOWN) + return false; + + //check that the plugin has reading capabilities and load the file + if(FreeImage_FIFSupportsReading(fif)) + dib = FreeImage_Load(fif, filename); + //if the image failed to load, return failure + if(!dib) + return false; + + //retrieve the image data + bits = FreeImage_GetBits(dib); + //get the image width and height + width = FreeImage_GetWidth(dib); + height = FreeImage_GetHeight(dib); + //if this somehow one of these failed (they shouldn't), return failure + if((bits == 0) || (width == 0) || (height == 0)) + return false; + + //if this texture ID is in use, unload the current texture + if(m_texID.find(texID) != m_texID.end()) + glDeleteTextures(1, &(m_texID[texID])); + + //generate an OpenGL texture ID for this texture + glGenTextures(1, &gl_texID); + //store the texture ID mapping + m_texID[texID] = gl_texID; + //bind to the new texture ID + glBindTexture(GL_TEXTURE_2D, gl_texID); + //store the texture data for OpenGL use + glTexImage2D(GL_TEXTURE_2D, level, internal_format, width, height, + border, image_format, GL_UNSIGNED_BYTE, bits); + + //Free FreeImage's copy of the data + FreeImage_Unload(dib); + + //return success + return true; +} + +bool TextureManager::UnloadTexture(const unsigned int texID) +{ + bool result(true); + //if this texture ID mapped, unload it's texture, and remove it from the map + if(m_texID.find(texID) != m_texID.end()) + { + glDeleteTextures(1, &(m_texID[texID])); + m_texID.erase(texID); + } + //otherwise, unload failed + else + { + result = false; + } + + return result; +} + +bool TextureManager::BindTexture(const unsigned int texID) +{ + bool result(true); + //if this texture ID mapped, bind it's texture as current + if(m_texID.find(texID) != m_texID.end()) + glBindTexture(GL_TEXTURE_2D, m_texID[texID]); + //otherwise, binding failed + else + result = false; + + return result; +} + +void TextureManager::UnloadAllTextures() +{ + //start at the begginning of the texture map + std::map::iterator i = m_texID.begin(); + + //Unload the textures untill the end of the texture map is found + while(i != m_texID.end()) + UnloadTexture(i->first); + + //clear the texture map + m_texID.clear(); +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/TextureManager.h b/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/TextureManager.h new file mode 100644 index 0000000..0afa4b1 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/TextureManager.h @@ -0,0 +1,51 @@ +//********************************************** +//Singleton Texture Manager class +//Written by Ben English +//benjamin.english@oit.edu +// +//For use with OpenGL and the FreeImage library +//********************************************** + +#ifndef TextureManager_H +#define TextureManager_H + +#include +#include +#include "FreeImage.h" +#include + +class TextureManager +{ +public: + static TextureManager* Inst(); + virtual ~TextureManager(); + + //load a texture an make it the current texture + //if texID is already in use, it will be unloaded and replaced with this texture + bool LoadTexture(const char* filename, //where to load the file from + const unsigned int texID, //arbitrary id you will reference the texture by + //does not have to be generated with glGenTextures + GLenum image_format = GL_RGB, //format the image is in + GLint internal_format = GL_RGB, //format to store the image in + GLint level = 0, //mipmapping level + GLint border = 0); //border size + + //free the memory for a texture + bool UnloadTexture(const unsigned int texID); + + //set the current texture + bool BindTexture(const unsigned int texID); + + //free all texture memory + void UnloadAllTextures(); + +protected: + TextureManager(); + TextureManager(const TextureManager& tm); + TextureManager& operator=(const TextureManager& tm); + + static TextureManager* m_inst; + std::map m_texID; +}; + +#endif \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/readme.txt b/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/readme.txt new file mode 100644 index 0000000..7930599 --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/OpenGL/TextureManager/readme.txt @@ -0,0 +1,31 @@ +Hello everyone, this is my 2D texture manager class for OpenGL using the FreeImage Library. + +Requirements: +-------------------- +OpenGL +STL map class +FreeImage (included) + + +Usage +-------------------- +To load a texture, simply call the LoadTexture function: + +TextureManager::Inst()->LoadTexture("img\\bg.jpg", BACKGROUND_IMAGE_ID); + +This also binds the loaded texture as the current texture, so after calling it you may make any calls to glTexParameter you may need to specify the properties of the texture. + +When you are rendering, just call the TextureManager's BindImage function instead of glBindImage: + +TextureManager::Inst()->BindImage(BACKGROUND_IMAGE_ID); + +and then do your rendering as normal. +-------------------- + + +Feel free to distribute this as you like, but mind the FreeImage licence included in license-fi.txt, and please don't take credit for my code. If you modify it, be sure to mention me (Ben English) somewhere. + +Please send any comments or suggestions to me at benjamin.english@oit.edu + + +Thanks to Herve Drolon for the FreeImage library, I've found it to be very useful! \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Examples/Plugin/PluginCradle.cpp b/#ThirdParty/FreeImage/Examples/Plugin/PluginCradle.cpp new file mode 100644 index 0000000..10c363d --- /dev/null +++ b/#ThirdParty/FreeImage/Examples/Plugin/PluginCradle.cpp @@ -0,0 +1,253 @@ +// ========================================================== +// Loader/Saver Plugin Cradle +// +// Design and implementation by +// - Floris van den Berg (flvdberg@wxs.nl) +// - Hervé Drolon (drolon@infonie.fr) +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +#include +#include + +#include "FreeImage.h" +#include "Utilities.h" + +// ========================================================== + +BOOL APIENTRY +DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH : + case DLL_PROCESS_DETACH : + case DLL_THREAD_ATTACH : + case DLL_THREAD_DETACH : + break; + } + + return TRUE; +} + +// ========================================================== +// Plugin Interface +// ========================================================== + +static int s_format_id; + +// ========================================================== +// Plugin Implementation +// ========================================================== + +/** + Returns the format string for the plugin. Each plugin, + both internal in the DLL and external in a .fip file, must have + a unique format string to be addressable. +*/ + +static const char * DLL_CALLCONV +Format() { + return "CRADLE"; +} + +/** + Returns a description string for the plugin. Though a + description is not necessary per-se, + it is advised to return an unique string in order to tell the + user what type of bitmaps this plugin will read and/or write. +*/ + +static const char * DLL_CALLCONV +Description() { + return "Here comes the description for your image loader/saver"; +} + +/** + Returns a comma separated list of file extensions indicating + what files this plugin can open. no spaces or whatsoever are allowed. + The list, being used by FreeImage_GetFIFFromFilename, is usually + used as a last resort in finding the type of the bitmap we + are dealing with. Best is to check the first few bytes on + the low-level bits level first and compare them with a known + signature . If this fails, FreeImage_GetFIFFromFilename can be + used. +*/ + +static const char * DLL_CALLCONV +Extension() { + return "ext1,ext2"; +} + +/** + RegExpr is only needed for the Qt wrapper + It allows the Qt mechanism for loading bitmaps to identify the bitmap +*/ +static const char * DLL_CALLCONV +RegExpr() { + return NULL; +} + +/** + Returns a MIME content type string for that format (MIME stands + for Multipurpose Internet Mail Extension). +*/ +static const char * DLL_CALLCONV +MimeType() { + return "image/myformat"; +} + +/** + FreeImage's internal way of seeing if a bitmap is of the desired type. + When the type of a bitmap is to be retrieved, FreeImage runs Validate + for each registered plugin until one returns true. If a plugin doesn't + have a validate function, a return value of false is assumed. + + You can always force to use a particular plugin by directly specifying + it on the command line, but this can result in a dead DLL if the plugin + was not made for the bitmap. +*/ +static BOOL DLL_CALLCONV +Validate(FreeImageIO &io, fi_handle handle) { + return FALSE; +} + +/** + SupportsExportDepth is the first in a possible range of new plugin functions + to ask specific information to that plugin. This function returns TRUE if it + can save a bitmap in the required bitdepth. If it can't the bitmap has to be + converted by the user or another plugin has to be chosen. +*/ +static BOOL DLL_CALLCONV +SupportsExportDepth(int depth) { + return FALSE; +} + +/** + Returns TRUE if the plugin belonging to the given FREE_IMAGE_FORMAT can save a + bitmap in the desired data type, returns FALSE otherwise. Currently, TIFF is the only plugin + able to save all non-standard images. The PNG plugin is able to save unsigned 16-bit + images. +*/ +static BOOL DLL_CALLCONV +SupportsExportType(FREE_IMAGE_TYPE type) { + return (type == FIT_BITMAP) ? TRUE : FALSE; +} + +/** + SupportsICCProfiles informs FreeImage that a plugin supports ICC profiles. + This function returns TRUE if the plugin can load and save a profile. + ICC profile information is accessed via freeimage->get_icc_profile_proc(dib) +*/ +static BOOL DLL_CALLCONV +SupportsICCProfiles() { + return FALSE; +} + + +// ---------------------------------------------------------- + +/** + Loads a bitmap into memory. On entry it is assumed that + the bitmap to be loaded is of the correct type. If the bitmap + is of an incorrect type, the plugin might not gracefully fail but + crash or enter an endless loop. It is also assumed that all + the bitmap data is available at one time. If the bitmap is not complete, + for example because it is being downloaded while loaded, the plugin + might also not gracefully fail. + + The Load function has the following parameters: + + The first parameter (FreeImageIO *io) is a structure providing + function pointers in order to make use of FreeImage's IO redirection. Using + FreeImage's file i/o functions instead of standard ones it is garantueed + that all bitmap types, both current and future ones, can be loaded from + memory, file cabinets, the internet and more. The second parameter (fi_handle handle) + is a companion of FreeImageIO and can be best compared with the standard FILE* type, + in a generalized form. + + The third parameter (int page) indicates wether we will be loading a certain page + in the bitmap or if we will load the default one. This parameter is only used if + the plugin supports multi-paged bitmaps, e.g. cabinet bitmaps that contain a series + of images or pages. If the plugin does support multi-paging, the page parameter + can contain either a number higher or equal to 0 to load a certain page, or -1 to + load the default page. If the plugin does not support multi-paging, + the page parameter is always -1. + + The fourth parameter (int flags) manipulates the load function to load a bitmap + in a certain way. Every plugin has a different flag parameter with different meanings. + + The last parameter (void *data) can contain a special data block used when + the file is read multi-paged. Because not every plugin supports multi-paging + not every plugin will use the data parameter and it will be set to NULL.However, + when the plugin does support multi-paging the parameter contains a pointer to a + block of data allocated by the Open function. +*/ + +static FIBITMAP * DLL_CALLCONV +Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) { + return NULL; +} + +static BOOL DLL_CALLCONV +Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data) { + return FALSE; +} + +// ========================================================== +// Init +// ========================================================== + +/** + Initialises the plugin. The first parameter (Plugin *plugin) + contains a pointer to a pre-allocated Plugin structure + wherein pointers to the available plugin functions + has to be stored. The second parameter (int format_id) is an identification + number that the plugin may use to show plugin specific warning messages + or other information to the user. The plugin number + is generated by FreeImage and can differ everytime the plugin is + initialised. + + If you want to create your own plugin you have to take some + rules into account. Plugin functions have to be compiled + __stdcall using the multithreaded c runtime libraries. Throwing + exceptions in plugin functions is allowed, as long as those exceptions + are being caught inside the same plugin. It is forbidden for a plugin + function to directly call FreeImage functions or to allocate memory + and pass it to the main DLL. Exception to this rule is the special file data + block that may be allocated the Open function. Allocating a FIBITMAP inside a + plugin can be using the function allocate_proc in the FreeImage structure, + which will allocate the memory using the DLL's c runtime library. +*/ + +void DLL_CALLCONV +Init(Plugin *plugin, int format_id) { + s_format_id = format_id; + + plugin->format_proc = Format; + plugin->description_proc = Description; + plugin->extension_proc = Extension; + plugin->regexpr_proc = RegExpr; + plugin->open_proc = NULL; + plugin->close_proc = NULL; + plugin->pagecount_proc = NULL; + plugin->pagecapability_proc = NULL; + plugin->load_proc = Load; + plugin->save_proc = Save; + plugin->validate_proc = Validate; + plugin->mime_proc = MimeType; + plugin->supports_export_bpp_proc = SupportsExportDepth; + plugin->supports_export_type_proc = SupportsExportType; + plugin->supports_icc_profiles_proc = SupportsICCProfiles; +} diff --git a/freeimage241/Examples/Plugin/PluginCradle.h b/#ThirdParty/FreeImage/Examples/Plugin/PluginCradle.h similarity index 93% rename from freeimage241/Examples/Plugin/PluginCradle.h rename to #ThirdParty/FreeImage/Examples/Plugin/PluginCradle.h index ec0b8f6..b049efb 100644 --- a/freeimage241/Examples/Plugin/PluginCradle.h +++ b/#ThirdParty/FreeImage/Examples/Plugin/PluginCradle.h @@ -4,7 +4,7 @@ // Design and implementation by // - Floris van den Berg (flvdberg@wxs.nl) // -// This file is part of FreeImage 2 +// This file is part of FreeImage 3 // // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES @@ -39,7 +39,7 @@ struct Plugin; // ---------------------------------------------------------- extern "C" { - PLUGIN_API void DLL_CALLCONV Init(Plugin &plugin, int format_id); + PLUGIN_API void DLL_CALLCONV Init(Plugin *plugin, int format_id); } #endif diff --git a/#ThirdParty/FreeImage/README.minGW b/#ThirdParty/FreeImage/README.minGW new file mode 100644 index 0000000..30195c3 --- /dev/null +++ b/#ThirdParty/FreeImage/README.minGW @@ -0,0 +1,236 @@ +===================================================================== +Using the FreeImage library with the MinGW Compiler Suite +===================================================================== + +This file describes how to use the precompiled FreeImage library +FreeImage.dll with the MinGW port of the GNU Compiler Collection +(GCC), how to build this library from source using MinGW and how +to use this MinGW-built library with Microsoft Visual Studio. + +Contents: + +I. Prerequisites + +1. Using the precompiled FreeImage library with MinGW + +2. Building the FreeImage library with MinGW + +3. Using the MinGW FreeImage library with Microsoft Visual Studio + +4. Useful links + + +--------------------------------------------------------------------- +I. Prerequisites +===================================================================== + +The procedures described in this document have been developed and +tested using the following free tools: + +1. MinGW GCC Version 4.4.0 (Core and C++ including required libs) +2. MinGW GNU Binutils Version 2.19.1 +3. MinGW GNU Make Version 3.81-20080326-3 +4. MinGW Runtime Version 3.15.2 +5. MinGW API for MS-Windows Version 3.13 +6. GnuWin32 Package CoreUtils Version 5.3.0 (only for building) +7. GnuWin32 Package Sed Version 4.2 (only for creating the GCC + import library)* + +* Sed is only needed to create a GCC-native import library from + the MSVC import library FreeImage.lib. However, since MinGW now + supports linking against MSVC lib files, this process seems to + be obsolete. See section 1. + +Basically, no version dependent capabilities are used so, this +should also work with older versions of the tools mentioned above. +Similarly, the GnuWin32 packages (which I just prefer over MSYS) +could likely be replaced by a properly installed MSYS environment. + +Furthermore, the following preconditions should be met: + +1. The folders 'bin' under both the MinGW and the GnuWin32 + installation directory should have been added to the PATH + environment variable. Likely it is best adding these + directories permanently to PATH through the System + Properties dialog on the Control Panel. + +2. The MinGW Make package only provides a 'mingw32-make.exe' + executable. There is no alias 'make.exe'. However, make is + preconfigured to use 'make' as the default $(MAKE) command. + This seems to be a bug in the MinGW GNU Make distribution. + Thus, a copy of 'mingw32-make.exe' named 'make.exe' should + be placed into MinGW's 'bin' directory. + + + +--------------------------------------------------------------------- +1. Using the precompiled FreeImage library with MinGW +===================================================================== + +When using functions from C/C++, that reside in a DLL, the linker +needs a so called import library, which specifies, how to +dynamically link these external functions during runtime. However, +different linkers use different types or formats of these import +libraries. + +Since the precompiled FreeImage library was build with Microsoft +Visual Studio, in the past, some extra work was required to use it +from MinGW. An import library, that was compatible with GNU ld, +must have been created first. + +However, for several MinGW versions, the GNU linker ld also +supports linking against Microsoft Visual C++ import libraries +directly. So, this effectively makes any circulating HOWTO's on +how to create a GCC-compatible import library from a MSVC lib file +more or less obsolete. Additionally, MinGW does not require the +GCC/Linux usual lib prefix for libraries, so linking with MinGW +against the precompiled FreeImage DLL is as easy as with MSVC: + +1.) Open a DOS shell (run application cmd.exe) + +2.) Ensure, that the 'bin' folder of MinGW is added to the PATH + environment variable (see Prerequisites). + +3.) Link directly against the supplied lib file: + + C:\>gcc -oFreeImageTest.exe FreeImageTest.c -lFreeImage + +Nonetheless, for the sake of completeness, the following steps +describe how to create a native GCC import library: + +1.) Open a DOS shell (run application cmd.exe) + +2.) Ensure, that the 'bin' folders of both MinGW and GnuWin32 are + added to the PATH environment variable (see Prerequisites). + +3.) Create a .def file 'libfreeimage.def', that contains all symbols + exported by the FreeImage library: + + C:\>pexports FreeImage.dll | sed "s/^_//" > libfreeimage.def + +4.) Create the GCC compatible import library 'libfreeimage.a': + + C:\>dlltool --add-underscore -d libfreeimage.def -l libfreeimage.a + +5.) Use this library to link against with GCC: + + C:\>gcc -oFreeImageTest.exe FreeImageTest.c -lfreeimage + + + +--------------------------------------------------------------------- +2. Building the FreeImage library with MinGW +===================================================================== + +You *do not* need to have any other third party library (like +libjpeg, libpng, libtiff, libmng and zlib and others) installed on +your system in order to compile and use the library. FreeImage uses +its own versions of these libraries. This way, you can be sure that +FreeImage will always use the latest and properly tested versions +of of these third party libraries. + +In order to build the FreeImage library under Windows with MinGW +(GCC), ensure that all the prerequisites mentioned above are met. +The MinGW makefile aims to build a Windows DLL, that differs as +least as possible from the precompiled library that comes with the +FreeImage distribution. Thus, the build process also includes the +DLL version resource as well as the __stdcall attribute for all the +exported functions, including the MSVC-like function decorations +_FuncName@nn. + +When building the FreeImage DLL, of course, an import library is +generated, too. However, this input library is not in GCC's native +format, but in MSVC lib format, which makes it usable from both +MinGW and Microsoft Visual Studio with no further processing. + +The MinGW makefile can also be used to build a static library. +However, due to the different function export attributes needed +for both the dynamic and the shared library (DLL), this requires +a separate invocation of make, which in turn needs to rebuild every +source file after switching from dynamic to static and vice versa. +So, a 'make clean' is required each time, the library type is +changed. + +The type of library to build is specified by a variable named +FREEIMAGE_LIBRARY_TYPE, which may either be set directly in the +Makefile.mingw near line 18 or may be specified as an environment +variable. This variable may either take SHARED or STATIC to build +a dynamic link library (DLL) or a static library respectively. +Since this value is used to dynamically form the actual make target +internally, only uppercase values are valid. Defaults to SHARED. + +The MinGW makefile also supports the 'install' target. However, +this only copies the FreeImage dynamic link library (DLL) from the +Dist folder into the %SystemRoot%\system32 folder. So, invoking this +target only makes sense, if the DLL has been built before. + +Since there is neither a common system wide 'include' nor a 'lib' +directory available under Windows, the FreeImage header file +FreeImage.h as well as both the static library and the DLL import +library FreeImage.lib just remain in the 'Dist' folder. + +The following procedure creates the FreeImage dynamic link library +(DLL) from the sources, installs it and also creates a static +FreeImage library: + +1.) Open a DOS shell (run application cmd.exe) + +2.) Ensure, that the 'bin' folders of both MinGW and GnuWin32 are + added to the PATH environment variable (see Prerequisites). + +3.) Create the FreeImage dynamic link library (DLL): + + C:\>make + +4.) Install the FreeImage dynamic link library (DLL): + + C:\>make install + +5.) Clean all files produced by the recent build process: + + C:\>make clean + +6.) Create a static FreeImage library: + + C:\>set FREEIMAGE_LIBRARY_TYPE=STATIC + C:\>make + +You should be able to link progams with the -lFreeImage option +after the shared library is compiled and installed. You can also +link statically against FreeImage.a from MinGW. + + + +--------------------------------------------------------------------- +3. Using the MinGW FreeImage library with Microsoft Visual Studio +===================================================================== + +Since the MinGW makefile creates an import library in MSVC's lib +format, the produced shared library (DLL) can be used from both +MinGW and Microsoft Visual Studio with no further adaption. Just +link to the import library FreeImage.lib from either MinGW or +Microsoft Visual Studio. + + + +--------------------------------------------------------------------- +4. Useful links +===================================================================== + +- The MinGW homepage: + http://www.mingw.org/ + +- The GnuWin32 homepage: + http://gnuwin32.sourceforge.net/ + +- The GCC homepage and online documentation: + http://gcc.gnu.org/ + http://gcc.gnu.org/onlinedocs/ + +- The GNU Binutils homepage and online documentation: + http://www.gnu.org/software/binutils/ + http://sourceware.org/binutils/docs-2.19/ + +- The GNU Make homepage and online documentation: + http://www.gnu.org/software/make/ + http://www.gnu.org/software/make/manual/make.html diff --git a/#ThirdParty/FreeImage/Whatsnew.txt b/#ThirdParty/FreeImage/Whatsnew.txt new file mode 100644 index 0000000..6e19915 --- /dev/null +++ b/#ThirdParty/FreeImage/Whatsnew.txt @@ -0,0 +1,1258 @@ +What's New for FreeImage + +* : fixed +- : removed +! : changed ++ : added + +Month day, 2015 - 3.17.0 +! FreeImage now uses LibPNG 1.6.16 +! FreeImage now uses LibWebP 0.4.2 (GIT patch 2015-03-03) +! FreeImage now uses LibRaw 0.17-Alpha1 +! FreeImage now uses LibTIFF 4.0.4 (CVS patch 2015-01-26) +! FreeImage now uses OpenEXR 2.2.0 +- [Herve Drolon] removed VS 2003 project files : this IDE is no longer supported because of its outdated C++ compiler ++ [Mihail Naydenov] added FreeImage_ConvertFromRawBitsEx ++ [Herve Drolon] added RAW_UNPROCESSED load flag to the RAW plugin ++ [Herve Drolon] added FreeImage_SetMetadataKeyValue ++ [Herve Drolon] added support for metadata writing to the JPEG-JXR plugin ++ [Herve Drolon] added VS 2013 project files ++ [Herve Drolon] added support for PNG tIME metadata (read/write, handle as Exif-TIFF DateTime) ++ [Carsten Klein] added explicit definition of endianness and color order in compiler options ++ [Carsten Klein] added FIQ_LFPQUANT quantizer algorithm ++ [Carsten Klein] added support for input 32-bit dib in Wu quantizer ++ [Tanner Helland] added FreeImage_ConvertToRGBAF and updated conversions in FreeImage_ConvertToType ++ [Herve Drolon] added FreeImage_ConvertToRGBA16 and updated conversions in FreeImage_ConvertToType ++ [Carsten Klein] added FreeImage_CreateView ++ [Carsten Klein] added FreeImage_RescaleRect ++ [Carsten Klein] added FreeImage_GetMemorySize +* [Tanner Helland] ICO plugin: improved support for Vista icons +* [fpgaminer] fixed a rounding error in RGB to greyscale conversion formula +* [Sven-Hendrik Haase] fixed Makefile.fip so that it installs symlinks +* [Joachim Reichel] fixed a potential memory access violation in PluginHDR Save function +* [Christian Schluchter] fixed a bug in FreeImage_LookupSVGColor ("green" color was not found) +* [Marco Altomonte] fixed TARGA signature validation for TARGA versions < 2.0 +* [Jeremy Reyniers] fixed FreeImage_GetScanLine not working with very large images on x64 platforms +* [Herve Drolon] improved PluginTIFF compatibility with LibTIFF 4 +* [Aaron Shumate] fixed a segfault occuring on a corrupted animated GIF +* [Herve Drolon] improved memory allocation in PluginRAW +* [Herve Drolon] fixed loading/saving of TIFF containing a GPS IFD inside the Exif-TIFF metadata segment (the solution is to ignore the tag) +* [Mihail Naydenov] fixed a bug in FreeImage_JPEGCrop*/_JPEGTransform* functions occuring when using the same source / destination filename +* [Herve Drolon] fixed a bug with output image quality in PluginJP2::Save & PluginJ2K::Save functions (regression from FI 3.15.4) +* [Herve Drolon] improved RAW file format detection +* [Aaron Shumate] fixed FreeImage_GetFileType behavior with ANI file formats +* [Herve Drolon] improved Exif reader so as to handle Exif IFD with a suspicious offset (can occur with maker notes) +* [Herve Drolon] fixed a memory leak in PluginPNG:Save occuring when dealing with invalid PNG files +* [Tanner Helland] fixed PNG plugin handling of 16-bit grayscale + 16-bit alpha images +* [Tanner Helland] fixed PNG plugin handling of 16-bit grayscale + tRNS chunk images +* [Tanner Helland] fixed PNG plugin handling of 24-bit RGB + tRNS chunk images +* [Tanner Helland] fixed PNG plugin handling of 1-,4-bit greyscale/palettized + tRNS chunk images +* [ekpyron] fixed invalid directory delimiter in include statement (mingw-w64) in Source/LibJXR/image/sys/strcodec.h +* [ekpyron] fixed Invalid condition for defining _byteswap_ulong (mingw-w64) in Source/LibJXR/image/sys/strcodec.c +* [tostercx] fixed FreeImage_Get*Mask not returning 0 for greyscale images +* [robpats] fixed loading of external plugins when using UNICODE directory names to store plugins +* [Herve Drolon] fixed loading of JXR files when using memory streams +* [Carsten Klein] added Dist/ directory creation in Makefiles (in case it is not already present) + +March 23rd, 2014 - 3.16.0 +! FreeImage now uses LibJPEG 9a +! FreeImage now uses LibPNG 1.6.10 +! FreeImage now uses LibTIFF 4.0.3 (CVS patch 2013-11-30) +! FreeImage now uses LibRaw 0.16.0 +! FreeImage now uses OpenJPEG 2.1.0 (SVN patch 2748) +! FreeImage now uses ZLib 1.2.8 +! FreeImage now uses LibWebP 0.4.0 (GIT patch 2014-03-21) +! FreeImage now uses LibJXR 1.1 (GIT patch 2014-01-31) ++ [Herve Drolon] added loading & writing support for the JPEG-XR image format (also support the FIF_LOAD_NOPIXELS flag) ++ [Herve Drolon] added loading & writing support for the WebP image format (also support the FIF_LOAD_NOPIXELS flag) ++ [Herve Drolon] added support for FIF_LOAD_NOPIXELS flag to JP2/J2K plugins ++ [Gaël Zimmermann] added basic support for BMP v4, v5 in BMP plugin (useful for drag and drop from another application such as Firefox) ++ [Mihail Naydenov] FreeImage_GetFIFFromFilename[U] : added support for *rgb,*rgba,*.bw extensions to the SGI plugin ++ [Mihail Naydenov] improved FreeImage_Rescale speed & spatial accuracy ++ [Mihail Naydenov] improved JPEG transform functions and added new functions (see below) : + added FreeImage_JPEGTransformFromHandle + added FreeImage_JPEGTransformCombined + added FreeImage_JPEGTransformCombinedU + added FreeImage_JPEGTransformCombinedFromMemory +* [Herve Drolon] fixed FreeImage_CloneTag behavior with ASCII data handling (regression that appeared in 3.15.2, affect metadata writing) +* [Carsten Klein] ICO plugin: avoid using the AND mask when loading a 32-bit (already transparent) icon +* [Andreas Baumann] HDR plugin: removed a comma at end of an enumerator list +* [mark] added missing in OpenEXR (needed with mingw) +* [Herve Drolon] added support for FIC_MINISWHITE color type inside FreeImage_GetColorType for FIT_UINT16 images +* [Takamasa Mitsuji] FreeImage_Rescale : fixed a NULL-pointer access bug occurring for transparent images with a linear palette +* [Herve Drolon] fixed PSD parser when reading PSD files with corrupted resources +* [Herve Drolon] fixed TIFF plugin truncating metadata tag on loading if type is ASCII and it's value is of variable size (TIFF_VARIABLE) +* [Herve Drolon] fixed loading of TGA 8-bit files with a palette size greater that 256 +* [Anton Kukoba] TIFF parser didn't initialize the memory with zeros in stripped mode. This caused random bitmap data if the tiff file was corrupted/invalid. +* [Herve Drolon] improved TGA file detection when the format version is < 2.0 +* [Christian Heimes] fixed compiler errors on 64bit Linux (INT64 / UINT64 type mismatches and missing prototype for memset) +* [Christian Heimes] fixed FreeImage_Get*Mask() returning 0 on 24-, -32-bit FIT_BITMAP images +* [Mihail Naydenov] fixed GIF plugin LZW decoder failing on some images +* [Herve Drolon] fixed the TIFF plugin against race condition when used simultaneously in multiple threads +* [Herve Drolon] fixed float <--> rgb[a]f conversions when pixels are out of [0..1] range + +October 27th, 2012 - 3.15.4 +! FreeImage now uses LibPNG 1.5.13 +! FreeImage now uses LibRaw 0.14.7 +! FreeImage now uses ZLib 1.2.7 +! FreeImage now uses LibTIFF 4.0.3 +! FreeImage now uses OpenJPEG 1.5.1 +! FreeImage now uses OpenEXR 1.7.1 ++ [Herve Drolon] improved the speed of RAW files detection in FreeImage_GetFileType* functions ++ [Herve Drolon] added JPEG_GREYSCALE load flag to the JPEG plugin (force to load as 8-bit greyscale) ++ [Herve Drolon] added 64-bit RGBA to 24-bit conversion support in FreeImage_ConvertTo24Bits ++ [Carsten Klein] improved the speed of FreeImage_Rescale for FIT_BITMAP & UINT16, RGB[A]16 types ++ [Carsten Klein] improved the speed of FreeImage_ConvertToGreyscale +* [Carsten Klein] updated makefile for building FreeImage with MinGW +* [Herve Drolon] fixed BigTIFF signature validation in FreeImage_GetFileType* functions +* [Carsten Klein] fixed handling of RGB-565 16-bit images (needed for conversion from HBITMAP to FIBITMAP) +* [Herve Drolon] fixed loading of JPEG with invalid IPTC marker +* [Herve Drolon] changed default TIF RowsPerStrips to image height when saving as TIF G3 or TIF G4 (improved compression) +* [Herve Drolon] improved the memory behavior of the RAW plugin (do not allocate huge variables on the stack) +* [Herve Drolon] fixed FreeImage_AllocateT so that it returns NULL with images with a zero width and/or height +* [Herve Drolon] replaced FIUINT64/FIINT64 with standard types UINT64/INT64 +* [Rustam Abdullaev] fixed PNG plugin with saving of transparent monochrome images +* [Floris van den Berg] improved plugin registering when replacing an existing internal plugin with a new equivalent plugin +* [Herve Drolon] fixed a crash when calling FreeImage_GetColorType on a 32-bit RGBA images loaded with the FIF_LOAD_NOPIXELS flag +* [Herve Drolon] fixed FreeImage_SetTransparencyTable falsely setting a dib to 'transparent' when called with a count of 0 +* [Carsten Klein] fixed storing of RGB masks for 16-bit RGB standard images in order to be in a MSDN compatible way +* [Herve Drolon] added an error handling message inside HDR plugin when trying to save an unsupported format +* [Corey Taylor] fixed DDS plugin color channel swapping for RGB color order, when using FREEIMAGE_COLORORDER_RGB color order +* [Herve Drolon] fixed internal TagLib singleton initialization against double-checked locking so that it is multi-thread safe + +March 17th, 2012 - 3.15.3 +! FreeImage now uses LibPNG 1.5.9 +! FreeImage now uses LibTIFF 4.0.1 ++ [Herve Drolon] added new 64-bit data types FIINT64, FIUINT64 ++ [Herve Drolon] added new 64-bit metadata types to FREE_IMAGE_MDTYPE (FIDT_LONG8, FIDT_SLONG8, FIDT_IFD8) ++ [Herve Drolon] added support for 64-bit metadata types to FreeImage_TagToString +* [Herve Drolon] fixed a regression with Fax3/Fax4 TIFF images on 64-bit OS (introduced with FI 3.15.2) +* [Herve Drolon] fixed some gcc 4.4.6 warnings +* [Petr Pytelka] refactored FreeImage_InsertPage and FreeImage_AppendPage +* [Herve Drolon] fixed JP2/J2K plugins with saving of 32-bit dib with a fully opaque layer +* [Herve Drolon] fixed loading of CMYK JPEG when using JPEG_CMYK load flag (need to invert pixels) +* [Herve Drolon] fixed loading of CMYK PSD when using PSD_CMYK load flag + +February 20th, 2012 - 3.15.2 +! FreeImage now uses LibRaw 0.14.5 +! FreeImage now uses LibPNG 1.5.8 +! FreeImage now uses LibJPEG 8d +! FreeImage now uses ZLib 1.2.6 +! FreeImage now uses OpenJPEG 1.5.0 (released version) +! FreeImage now uses LibTIFF 4.0.0 +- [Herve Drolon] removed dependency on LibMNG 1.0.10 (MNG and JNG files are now handled internally) ++ [Herve Drolon] replaced the MNG plugin with a new MNG internal FreeImage plugin (with read support) ++ [Herve Drolon] added a new JNG internal FreeImage plugin (with read/write support) ++ [Christian Heimes] added write support to the TIFF plugin for EXIF_MAIN tags ++ [Herve Drolon] added new Exif maker note tags ++ [Herve Drolon] added TAG_COMPRESSION conversion to FreeImage_TagToString +* [Mylek Grey] enabled the use of multi-component transforms (MCT) in J2K and JP2 saving +* [Herve Drolon] refactored PluginICO in order to correctly support Windows Vista 256x256 icons +* [Herve Drolon] added minor speed improvements to FreeImage_Rescale +* [Herve Drolon] fixed dib allocation failing with very large images (i.e. more than 4GB) +* [Herve Drolon] fixed FreeImage_CloneTag behavior with ASCII data handling +* [Herve Drolon] improved JPEG plugin behavior with very big images +* [Herve Drolon] improved JPEG plugin behavior with C++ exceptions +* [Herve Drolon] fixed loading of palettized PNG with more that 256 palette entries +* [Herve Drolon] fixed a bug inside IFF plugin occuring when loading a 24-bit dib with a palette +* [Herve Drolon] fixed a bug with loading of PNG images containing a cHRM chunk (regression introduced by LibPNG 1.5.4 and fixed by LibPNG 1.5.5) +* [Herve Drolon] allowed loading of PNG with benign errors (such as images with too many IDATs) +* [Mihail Naydenov] fixed some incorrect MIME types returned by FreeImage_GetFIFMimeType +* [Herve Drolon] fixed loading of Exif with bad thumbnail data or with a bad first offset size + +July 25th, 2011 - 3.15.1 +! FreeImage now uses LibRaw 0.13.7 +! FreeImage now uses LibPNG 1.5.4 +! FreeImage now uses LibTIFF 3.9.5 +! FreeImage now uses OpenJPEG 1.5.0 (SVN patch 2011-07-23) ++ [Herve Drolon] added FreeImage_ConvertToRGB16 and updated FreeImage_ConvertToType ++ [Herve Drolon] added RAW_HALFSIZE flag to RAW plugin +* [Herve Drolon] fixed a memory leak in JPEG plugin occuring when loading some corrupted images +* [Eberhard Mattes] improved thread safety behavior inside internal TagLib class +* [Hew How Chee] fixed a bug in FreeImage_EnlargeCanvas when called with negative left and right parameters and bpp <= 4 +* [Herve Drolon] improved memory allocation checking in FreeImage_ConvertTo[Float/RGBF/UINT16] +* [Herve Drolon] allowed loading of TIF with missing bitspersample/samplesperpixel/photometric tags +* [Herve Drolon] fixed FreeImage_AllocateHeaderT against possible malloc overflow +* [Herve Drolon] fixed CUT plugin against heap corruption vulnerability +* [Herve Drolon] fixed BMP plugin for images with a truncated input data stream +* [Herve Drolon] improved PCX format detection in FreeImage_GetFileType* functions +* [Christian Heimes] fixed a TIFF G4 compression bug occuring with gcc-Version 4.1.2 20080704 (Red Hat 4.1.2-50) + +January 24th, 2011 - 3.15.0 +! FreeImage now uses LibRaw 0.13-Beta3 +! FreeImage now uses LibPNG 1.4.5 +! FreeImage now uses LibTIFF 3.9.4 (CVS patch 2011-01-03) +! FreeImage now uses LibJPEG 8c +! FreeImage now uses OpenJPEG 1.4.0 (SVN patch 2011-01-18) +! [Herve Drolon] FreeImage_CloneMetadata now clone resolution info returned by FreeImage_GetDotsPerMeter(X / Y) ++ [Herve Drolon] added loading support for "half float" format to TIF plugin ++ [Herve Drolon] FreeImage_IsTransparent is now independant of FREE_IMAGE_TYPE ++ [Herve Drolon] added FIT_UINT16 to FIT_RGBF conversion to FreeImage_ConvertToRGBF & FreeImage_ConvertToType ++ [Herve Drolon] added FreeImage_ConvertToUINT16 and updated FreeImage_ConvertToType ++ [Mihail Naydenov] added FreeImage_GetThumbnail / FreeImage_SetThumbnail ++ [Mihail Naydenov] added thumbnail support to Exif, JPEG, EXR, PSD, TGA, TIF formats ++ [Mihail Naydenov] added JPEG_BASELINE save flag to the JPEG plugin ++ [Herve Drolon] added new Exif-TIFF tags (PageName, PageNumber, XPosition, YPosition) and Exif WinXP tags ++ [Herve Drolon] added support for 256x256 icon size to PluginICO:Save +* [Domingo Stephan] fixed a compilation error in TARGA plugin when using a big endian OS (OS X 10.6) +* [Christian Heimes] fixed a compilation error with gcc 4.3.x and OpenEXR +* [Eric Fruhinsholz] fixed a crash in JPEG plugin when reading a JPEG with corrupted XMP data +* [Herve Drolon] improved FreeImage_MultigridPoissonSolver for images whose size is a power-of-two +* [Herve Drolon] fixed a crash in PSD plugin when loading a PSD with a CMYK embedded thumbnail +* [Herve Drolon] fixed loading of JPEG images with a not null but zero length IPTC segment (bad files produced by Picasa) +* [Carsten Klein] fixed a bug in FreeImage_ColorQuantizeEx when using FIQ_WUQUANT quantizer +* [Herve Drolon] added support for RGBA[16][F] to FreeImage_IsTransparent +* [Herve Drolon] fixed loading of resolution info in TIFF CMYK images (bug introduced with 3.14.0) +* [Tom May] fixed JPEG plugin crashing on some Exif files containing tags with an invalid tag length +* [Herve Drolon] fixed a crash when loading TIFF images with a TIFFTAG_TRANSFERFUNCTION Exif tag +* [Tom May] removed assertions in PSD plugin, causing crashes on some malformed images in debug mode +* [Mihail Naydenov] fixed a crash in TIFF plugin when reading an uncommon 24-bit palettized file +* [Carsten Klein] fixed a bug in FreeImage_EnlargeCanvas when using the function as a FreeImage_Copy function +* [Herve Drolon] fixed a bug in PluginBMP with loading of OS/2 2.x palettized BMP +* [luispedro] fixed a bug in PluginBMP when reading malformed 16-bit RGB-555 BMP + +August 12th, 2010 - 3.14.1 ++ [Mihail Naydenov] added support for FIF_LOAD_NOPIXELS flag to EXR plugin ++ [Herve Drolon] added support for FIF_LOAD_NOPIXELS flag to CUT, HDR, RAS, ICO, PNM, RAW, BMP, PFM, XPM plugins +* [Eberhard Mattes] fixed memory allocation checking in multipage API +* [Herve Drolon] (compiler options) removed Win32 OpenMP support introduced in 3.14.0 + +August 9th, 2010 - 3.14.0 +! FreeImage now uses OpenEXR 1.7.0 +! FreeImage now uses ZLib 1.2.5 +! FreeImage now uses LibPNG 1.4.3 +! FreeImage now uses LibJPEG 8b +! FreeImage now uses LibTIFF 3.9.4 (CVS patch 2010-07-13) +! FreeImage now uses LibRaw 0.10-Beta3 +! FreeImage now uses OpenJPEG 1.4.0 (SVN patch 2010-04-16) +! [Herve Drolon] FreeImage_AllocateT now builds a default greyscale palette for 8-bit images +! [Volodymyr Goncharov] FreeImage_LoadMultiBitmapFromMemory now supports read/write operations +! [Herve Drolon] FreeImage_OpenMultiBitmapFromHandle now supports read/write operations +! [Herve Drolon] greyscale conversions now use the Rec. 709 formula +! [Mihail Naydenov] saving RGBF images to TIFF no longer use LogLuv encoding (unless you use the TIFF_LOGLUV save flag) ++ [Herve Drolon] added FIT_FLOAT to FIT_RGBF conversion to FreeImage_ConvertToRGBF & FreeImage_ConvertToType ++ [Herve Drolon] added VS 2008 project files ++ [Herve Drolon] added FreeImage_ConvertToFloat ++ [Mihail Naydenov] added RLE saving to the Targa plugin (see flag TARGA_SAVE_RLE) ++ [Volodymyr Goncharov] added FreeImage_SaveMultiBitmapToHandle ++ [Herve Drolon] added FreeImage_SaveMultiBitmapToMemory ++ [Herve Drolon] added new Exif maker note tags ++ [Lucian Sabo] added JPEG_OPTIMIZE to PluginJPEG:Save ++ [Mihail Naydenov] improved support for Exif tag reading in TIFF plugin ++ [Mihail Naydenov] allowed dataWindow with minimal bounds different from zero in OpenEXR plugin ++ [Herve Drolon] added FIMD_EXIF_RAW metadata model ++ [Herve Drolon] JPEG plugin can load & save raw Exif data (see FIMD_EXIF_RAW) ++ [Herve Drolon] added FIF_LOAD_NOPIXELS load flag constant - used to load header & metadata only ++ [Herve Drolon] added FreeImage_HasPixels ++ [Herve Drolon] added FreeImage_FIFSupportsNoPixels ++ [Herve Drolon] added support for FIF_LOAD_NOPIXELS flag to JPEG, PNG, PCD, PCX plugins ++ [Mihail Naydenov] added support for FIF_LOAD_NOPIXELS flag to TGA, PSD, TIFF plugins ++ [Mihail Naydenov] added support for 16-bit image types to FreeImage_Invert ++ [Mihail Naydenov] improved PSD plugin (faster code, added support for CMYK and LAB loading) + added load flags PSD_CMYK & PSD_LAB ++ [Mihail Naydenov] improved TIFF plugin (CMYK 16-bit loading and saving / RGBAF saving) + added TIFF_LOGLUV save flag +* [Herve Drolon] fixed FreeImage_GetFileType behavior with ANI file formats +* [Herve Drolon] fixed loading of JNG with progressive-JPEG formats +* [Mihail Naydenov] fixed loading of TGA with a corrupted rle count +* [Herve Drolon] fixed conversion formula in FreeImage_PreMultiplyWithAlpha +* [Christoph Brill] removed the use of libmng_data.h private API in MNG Plugin +* [phe02sf] fixed handling of bad Exif-GPS data in a Nikon D5000 image +* [Atsuhiro Igarashi] fixed handling of last data block in PluginGIF::Save (sometimes it saves corrupted images) +* [Christian Heimes] fixed saving of G3 & G4 compressed TIFF with 1bpp on 64bit Linux +* [Herve Drolon] fixed long data type being 64-bit on Unix/Linux platforms (use LONG/DWORD instead of long/unsigned long) +* [Herve Drolon] fixed a memory leak in FreeImage_DeletePage +* [Herve Drolon] fixed the loading of RGBZ images in OpenEXR plugin +* [Lucian Sabo] improved conversion from 1-, 4-, 8-bpp transparent images to 32-bpp +* [Roy F.] fixed a bug in FreeImage_EnlargeCanvas (unable to crop an image on the right) +* [Herve Drolon] fixed the loading of Exif with unusual IFD offset value +* [Eberhard Mattes] fixed page numbering info when saving multipage TIFF +* [Herve Drolon] fixed PluginPICT causing an infinite loop on a malformed PICT image +* [Eberhard Mattes] improved memory allocation checking when using the new operator +* [Herve Drolon] (multipage internals) fixed a potential buffer overflow in ReplaceExtension +* [Eberhard Mattes] improved error checking in FreeImage_CloseMultiBitmap + +December 22, 2009 - 3.13.1 +! FreeImage now uses libTIFF 3.9.2 +! FreeImage now uses OpenJPEG 1.3.0 (SVN patch 2009-11-05) +! FreeImage now uses libPNG 1.2.41 ++ [Berend Engelbrecht] added loading of Exif orientation tag in TIFF plugin ++ [Herve Drolon] added decoding support for the old and outdated JPEG-in-TIFF 6.0 format in TIFF plugin ++ [Herve Drolon] added new 'non standard' Exif tags ++ [Herve Drolon] added new Exif makernote tags +* [Herve Drolon] fixed TIF plugin crashing on a malformed TIFF-JPEG compressed image +* [Herve Drolon] fixed MNG plugin crashing on some old mng images +* [Herve Drolon] fixed handling of 2-bit grayscale transparent PNG +* [Herve Drolon] fixed a bug with the compression rate of JP2 and J2K encoders +* [zestony] fixed TIF plugin with the '65535 bytes' pitch size limitation on saving +* [Herve Drolon] fixed handling of PSD files with a non zero file header reserved member +* [Lucian Sabo] PNG plugin now keep transparency when saving 1- or 4-bit transparent images + +September 28th, 2009 - 3.13.0 +! FreeImage now uses LibJPEG 7 +! FreeImage now uses LibRaw-Lite 0.7.2 +! FreeImage now uses libPNG 1.2.40 +! FreeImage now uses libTIFF 3.9.1 +! FreeImage_RotateClassic is deprecated (use FreeImage_Rotate instead) ++ [Herve Drolon] added support for all Photoshop supported color modes to PSD plugin ++ [Herve Drolon] added support for 32-bit to JNG/MNG plugin ++ [Amir Ebrahimi] added loading support for the PICT format ++ [Herve Drolon] added loading support for camera RAW formats (using LibRawLite wrapper for dcraw) ++ [Mihail Naydenov] added UNICODE functions FreeImage_JPEGTransformU and FreeImage_JPEGCropU ++ [Carsten Klein] added FreeImage_OpenMultiBitmapFromHandle ++ [Carsten Klein] added FreeImage_FillBackground ++ [Carsten Klein] added FreeImage_EnlargeCanvas ++ [Carsten Klein] added FreeImage_AllocateEx / FreeImage_AllocateExT ++ [Mihail Naydenov/Herve Drolon] added FreeImage_TmoReinhard05Ex ++ [Herve Drolon] added FIT_RGBA16 to FIT_RGBF conversion to FreeImage_ConvertToRGBF ++ [Herve Drolon] added FreeImage_Rotate (support for most image types, support background color) +* [Christian Heimes] fixed function prototypes to use a void argument when no argument exist +* [Herve Drolon] fixed RGB color ordering on Intel macs +* [Herve Drolon] FreeImage_RotateClassic now keep transparency when applied to 8-bit images +* [Herve Drolon] fixed handling of transparency info in FreeImage_Copy +* [Herve Drolon] fixed a normalization error in FreeImage_GetAdjustColorsLookupTable +* [Herve Drolon] fixed invalid Exif rotation in PluginJPEG for orientation cases 2 and 4 +* [Mihail Naydenov / Carsten Klein] fixed compilation issues with MinGW32 +* [Mihail Naydenov] improved the loading speed of all targa images +* [Herve Drolon] FreeImage_TagToString now handles the Exif UserComment tag + +April 14th, 2009 - 3.12.0 +! FreeImage now uses libPNG 1.2.35 +! FreeImage now uses libTIFF 3.9.0beta (CVS patch 2009-02-12) +! FreeImage now uses OpenJPEG 1.3.0 (SVN patch 2008-08-21) +! [Herve Drolon] FreeImage_CloneMetadata no longer clone the FIMD_ANIMATION metadata (this was causing problems when saving to GIF format) ++ [Herve Drolon] added full support for the PFM format ++ [Herve Drolon] added JPEG_EXIFROTATE load flag to the JPEG plugin ++ [Herve Drolon] added 16-bit RGB(A) and float RGB(A)F support to FreeImage_GetChannel / FreeImage_SetChannel ++ [Herve Drolon] added src FIT_RGBA16 to dst 32-bit FIT_BITMAP conversion to FreeImage_ConvertToType +* [Carsten Klein] FreeImage_Copy now copies transparency info, resolution info, ICC profile and metadata +* [Carsten Klein] check for negative top/left values in FreeImage_Paste +* [Christian Heimes] changed exceptions with a "catch(char *text)" to a "catch(const char *text)" to make GCC 4.1 happy +* [Deif Lou] fixed a bug in FreeImage_SetTransparentIndex +* [Thomas Maiwald] BMP plugin: on saving, fixed correct setting of bfSize BMP file header for palettized images +* [Timothy Lee] fixed handling of frame disposal in GIF_PLAYBACK mode (GIF plugin) +* [Herve Drolon] fixed handling of Exif Olympus Type 2 maker notes (not yet supported but now safely ignored) +* [Rich Geldreich] fixed DXT1 color endpoint precision problem in DDS plugin +* [Mihail Naydenov] improved loading speed of 24-bit targa images +* [Eugene Golushkov] improved big endian / little endian swapping functions +* [Carsten Klein/Jean-Philippe Goerke] improved FreeImage_SetMetadata / FreeImage_GetMetadata accessors +* [Christian Ruppert] improved Linux Makefiles +* [Eugene Golushkov] fixed PluginBMP alignment bug while saving 16 or 24bit BMP on big endian or Apple machines + +July 28th, 2008 - 3.11.0 +! FreeImage now uses libTIFF 3.9.0beta (CVS patch 2008-05-24) +! FreeImage now uses OpenJPEG 1.3.0 (SVN patch 2008-05-22) +! FreeImage now uses libMNG 1.0.10 +! FreeImage now uses libPNG 1.2.29 ++ [Yves Schmid] added 48-bit RGB to 32-bit conversion support in FreeImage_ConvertTo32Bits ++ [Aaron Shumate] added RGB16-to-BITMAP and All-to-RGBF conversion support in FreeImage_ConvertToType ++ [Benjamin English] added a new OpenGL sample to FreeImage/Examples ++ [Lucian Sabo] added new compression flags to the PNG plugin ++ [Lucian Sabo] added new compression flags to the JPEG plugin (chroma subsampling options) ++ [Noam Gat] added support for SGI grayscale + alpha pics to SGI plugin ++ [Herve Drolon] added FreeImage_CloneMetadata ++ [Herve Drolon] added loading support for Windows Vista icons in ICO Plugin ++ [Herve Drolon] added loading and saving support for RGBF images to the TIF plugin (using the LogLuv codec) +* [Will Bryant] fixed makefile for MacOSX Tiger and Leopard +* [Maria Gullickson] fixed a 'divide by 0' error in PNM plugin and FreeImage_Rescale function +* [Yves Schmid] fixed a bug with Exif metadata reading in TIFF images +* [Herve Drolon] fixed some possible 64-bit portability issues with pointer calculations +* [wangyn] fixed a bug with transparency handling of indexed images in PNG plugin +* [Martin Dyring-Andersen] fixed a bug with GIFinfo structure initialization in GIF plugin +* [Noam Gat] fixed a bug in SGI plugin: when the file reports as two-dimensional, the height factor does not get loaded +* [Herve Drolon] added error messages in FreeImage_Load(U) / FreeImage_Save(U) in case of bad filenames +* [Scott Smith/Herve Drolon] added missing IPTC tags and renamed some tag names to be compatible with ExifTool naming convention +* [Martin Dyring-Andersen] fixed a crash problem with images containing exif data emitted by Picassa +* [Herve Drolon] removed RGBA to RGB transparent conversion in EXR plugin +* [Glenn Pierce] improved the speed of FreeImage_FlipHorizontal +* [Carsten Klein] fixed 65535 pixels width/height limitation in FreeImage_Paste + +November 19th, 2007 - 3.10.0 +! FreeImage now uses libTIFF 3.9.0beta (CVS patch 2007-10-05) +! FreeImage now uses OpenJPEG 1.2.0 (SVN patch 2007-07-13) +! FreeImage now uses OpenEXR 1.6.1 +! FreeImage now uses libPNG 1.2.23 +! FreeImage now hides its internal functions and internal libraries when compiled with gcc +- [Herve Drolon] removed VS C+ 6.0 project files : this IDE is no longer supported because of OpenEXR ++ [Herve Drolon] added VS 2005 project files ++ [Herve Drolon] added full support for the OpenEXR format ++ [Herve Drolon] added full support for the JPEG-2000 format ++ [Herve Drolon] added FreeImage_TmoFattal02 tone mapping operator ++ [Ryan Rubley] added support for RGB vs BGR regardless of endian ++ [Herve Drolon] added FreeImage_MultigridPoissonSolver ++ [Carsten Klein] added FreeImage_PreMultiplyWithAlpha ++ [Carsten Klein] added __stdcall version of FreeImage_OutputMessage ++ [Carsten Klein] added new palette and color manipulation functions (see below) : + added FreeImage_SetTransparentIndex + added FreeImage_GetTransparentIndex + added FreeImage_GetAdjustColorsLookupTable + added FreeImage_AdjustColors + added FreeImage_ApplyColorMapping + added FreeImage_SwapColors + added FreeImage_ApplyPaletteIndexMapping + added FreeImage_SwapPaletteIndices +* [Herve Drolon] fixed a bug in TIFF plugin when reading 8-bit + 8-bit alpha images +* [Herve Drolon] fixed a bug in TIFF plugin when reading images with uncommon bitdepths +* [rodrigo] fixed FreeImage exception handling under gcc (added -fexceptions to gcc compiler flags) +* [Martin Dyring-Andersen] fixed GIF plugin crashing on some corrupted files +* [Herve Drolon] fixed a bug with RLE encoding for 8-bit BMP images +* [Herve Drolon] fixed GPS metadata being skipped when reading metadata in Exif images +* [Herve Drolon] fixed a bug when reading OS/2 BMP images with a negative height +* [Ryan Rubley] fixed a bug with loading of GIFs with large amounts of solid color areas +* [Ryan Rubley] fixed OS X compile error in BitmapAccess.cpp +* [Herve Drolon] fixed a bug in FreeImage_Paste when pasting non-standard image types +* [Herve Drolon] saving 1-bit TIF with the TIFF_CCITTFAX3 flag is now compliant with the TIFF Class F specification +* [Carsten Klein] fixed topdown parameter in FreeImage_ConvertFromRawBits and FreeImage_ConvertToRawBits being handled in reverse +* [Herve Drolon] fixed a bug when reading some RLE-4 encoded BMP data +* [Carsten Klein] conversion from 1-bit to 32-bit now keep possibly present transparency + +February 11th, 2007 - 3.9.3 +! FreeImage now uses libPNG 1.2.16 +! [Ryan Rubley/Ryan Davis] reworked the MacOSX makefile in order to fully support Universal Binary builds of FreeImage +! [Herve Drolon] makefiles are now generated from VS2003 project files instead of VS6 project files +! [Herve Drolon] changed JPEG load/save flag option values ++ [Herve Drolon] added support for RGBAF images to FreeImage_ConvertToRGBF ++ [Herve Drolon] FreeImage_Paste now works with any bitmap type ++ [Herve Drolon] added full support for 64-bit RGBA images to the PNG and TIFF plugins ++ [Jascha Wetzel] added JPEG downsampling feature to PluginJPEG:Load +* [Thomas Chmielewski] fixed a bug in FreeImage_Dither and Bayer dithering, added FID_BAYER16x16 +* [Raphael Gaquer] greatly improved the speed of the GIF encoder +* [Herve Drolon] fixed saving of metadata in the PNG plugin +* [rampelstinskin] fixed transparency table to alpha channel conversion for 4-bit images in FreeImage_ConvertTo32Bits +* [Scott Smith] added missing IPTC tag named "Country/PrimaryLocationCode" +* [Herve Drolon] changed #include by #include in FreeImage.h (needed by Solaris 9) +* [Pierre Arnaud] fixed the use of FreeImage in low memory condition by checking some returned values of the malloc function +* [Pierre Arnaud] fixed TagLib::getTagFieldName not being thread safe + +October 30th, 2006 - 3.9.2 +! FreeImage now uses libTIFF 3.8.2 (with patch 2006-10-13) ++ [Herve Drolon] added full support for 16-bit greyscale and 48-bit RGB to the PNM plugin ++ [Herve Drolon] added IPTC writing support to JPEG & TIFF plugins ++ [Herve Drolon] added new Exif maker note tags ++ [Herve Drolon] added FreeImage_JPEGCrop ++ [Thorsten Radde] added support for 8-bit palettized bitmaps in FreeImage_RotateClassic ++ [Matt Rice] added automatic call to FreeImage_Initialise / FreeImage_DeInitialise when using FreeImage as a .so ++ [Martin Dyring-Andersen] added FreeImage_LoadMultiBitmapFromMemory to the multi-page API ++ [Herve Drolon] added support for tiled TIFF images +* [Carsten Klein] fixed a bug in FreeImage_SetMetadata occuring when deleting a tag +* [Herve Drolon] fixed a bug in PNG plugin when reading Macromedia 'false' PNG files +* [Thorsten Radde] added resolution support to PluginPSD +* [Ryan Rubley] fixed a bug in PluginGIF occuring with interlaced GIF +* [Ryan Rubley] fixed a bug in the multipage cache mechanism (internal FreeImage_FindBlock function) +* [Thorsten Radde] fixed a stack corruption in TIFF plugin occuring when reading exif tags +* [checkered] fixed a bug in the multipage cache mechanism causing VS2005 to crash on multipage files +* [Herve Drolon] fixed a bug with transparency support of 1- and 4-bit images +* [Roar Flolo] fixed a bug in PSD plugin when reading non compressed RGB images (alpha channel initialization) +* [Nicolas Hatier] fixed a bug in PluginGIF when using the GIF_PLAYBACK flag +* [Herve Drolon] fixed a bug in TIFF plugin when saving 8-bit images using LZW with differenciation +* [Herve Drolon] fixed 64-bit compilation issue with LibPNG and assembler code + +July 16th, 2006 - 3.9.1 +* [Ryan Rubley] fixed a bug in PluginGIF plugin causing FreeImage to crash on malformed GIF files + +July 6th, 2006 - 3.9.0 +! FreeImage now uses libPNG 1.2.12 +! FreeImage now uses libTIFF 3.8.2 (with patch 2006-06-24) +! FreeImage_Allocate/FreeImage_Allocate now set the resolution to 72 dpi instead of 0 ++ [Herve Drolon/Petr Pytelka] added a raw FAX G3 format loader ++ [Herve Drolon] added support for most image types to FreeImage_Rescale ++ [Herve Drolon] added FreeImage_MakeThumbnail ++ [Herve Drolon] added support for 64-bit images to FreeImage_ConvertTo32Bits ++ [Herve Drolon] added support for Exif tags to TIF plugin (read only) ++ [Herve Drolon] added FreeImage_ReadMemory ++ [Herve Drolon] added FreeImage_WriteMemory ++ [Herve Drolon] added new Exif maker note tags ++ [Sherman Wilcox] added a SGI file format loader ++ [Herve Drolon] added support for separated images to PluginTIFF ++ [Herve Drolon] added support for progressive-JPEG saving to PluginJPEG +* [Carsten Klein] FreeImage_Dither and FreeImage_Threshold now work with palettized 8-bit dib +* [Christophe Petit] fixed a bug in FreeImage_GetFIFFromFilenameU occuring with files without extension +* [Leigh Brasington] fixed a bug in PluginGIF causing FreeImage not working on Win/98/ME +* [Herve Drolon] fixed a bug in PluginTIFF with writing of JPEG-in-TIFF files +* [Jojakim Stahl] fixed a bug occuring with 4-bit PCX files +* [Sandor Szalacsi] fixed a bug in FreeImage_SetBackgroundColor (bkgnd clearing) +* [Petr Pytelka] fixed PluginTIFF::_tiffSizeProc failing on some images +* [Sherman Wilcox] fixed a bug in DDS plugin when loading images whose size is not a multiple of 4 +* [Sherman Wilcox] fixed a memory leak in PluginDDS::LoadDXT_Helper +* [Sherman Wilcox] fixed DDS plugin bad behavior with invalid DDS files (such as files with zero length) +* [Floris van den Berg] fixed a memory leak in the MultiPage cache mechanism +* [Herve Drolon] replaced WIN32 #define by _WIN32 #define as this is needed by VS2005 +* [Herve Drolon] fixed a VS2005 error in FreeImage_DeletePage +* [Petr Supina] fixed a pow(long,long) function not being standard ANSI C/C++ +* [Petr Supina] fixed FreeImage_FindBlock function not being standard ANSI C/C++ +* [Olaf Stoyke] added support for 64-bit Linux OS +* [Craig Stark] fixed FreeImage support on Intel based Mac OS +* [Herve Drolon] fixed PluginTIFF failing on bad fax tiff images (bad images are now loaded 'as is') +* [Zack Simpson] fixed a bug occuring in rare situations with FreeImage_Aligned_Malloc + +September 5, 2005 - 3.8.0 +! FreeImage now uses libTIFF 3.7.3 +! FreeImage now uses ZLib 1.2.3 ++ [Herve Drolon] added support for 48-bit images to FreeImage_ConvertTo24Bits ++ [Herve Drolon] added FreeImage_ConvertToGreyscale ++ [Herve Drolon] added support for 16-bit greyscale images to FreeImage_ConvertTo8Bits ++ [Petr Pytelka] added UNICODE functions (see below) + added FreeImage_LoadU + added FreeImage_SaveU + added FreeImage_GetFIFFromFilenameU + added FreeImage_GetFileTypeU ++ [Herve Drolon] FreeImage_Copy now works with any bitmap type ++ [Herve Drolon] added support for 1-bit images to FreeImage_Paste +* [Ryan Rubley] fixed PluginGIF failing to link on some broken gcc versions +* [Karl-Heinz Bussian] fixed a bug in LookupX11Color/LookupSVGColor with handling of grey color names +* [Herve Drolon] FreeImage_Dither now uses FreeImage_ConvertToGreyscale and handles 4/8-bit palletized images +* [Herve Drolon] FreeImage_Threshold now uses FreeImage_ConvertToGreyscale and handles 4/8-bit palletized images +* [Craig Hockenberry] fixed PluginGIF::Save swapping the byte order for the height on big endian machines (e.g. PPC on Mac OS X.) +* [Herve Drolon] fixed a bug in JPEG plugin when reading Exif maker notes from images produced by Nikon Editor +* [Herve Drolon] fixed a bug in BMP plugin when reading some malformed RLE8 bmp +* [Herve Drolon] fixed a bug in RAS plugin when loading 8-bit palettized images with less than 256 colors +* [Herve Drolon] fixed a bug in FreeImage_Rescale with 16-,48-,64-bit images +* [Herve Drolon] fixed a bug in the ICC profiles API when loading profile-less CMYK TIFF +* [Herve Drolon] 4-bit PNG are now loaded as 4-bit and no longer converted to 8-bit +* [Greg Ng] fixed a bug in FreeImage_ConvertToRGBF (FIT_BITMAP -> FIT_RGBF conversion) + +May 7, 2005 - 3.7.0 +! FreeImage now uses libTIFF 3.7.2 +! [Ryan Rubley] improved FreeImage_OpenMultiBitmap ++ [Detlev Vendt] added FreeImage_ZLibGUnzip ++ [Herve Drolon] added new image data types FIT_RGB16, FIT_RGBA16, FIT_RGBF, FIT_RGBAF ++ [Herve Drolon] FreeImage_FlipHorizontal & FreeImage_FlipVertical now work with any bitmap type ++ [Herve Drolon] added conversions to float and double in FreeImage_ConvertToType ++ [Herve Drolon] added FreeImage_ConvertToRGBF ++ [Herve Drolon] added support for 16-, 48- and 96-bit images to FreeImage_Rescale ++ [Ryan Rubley] added FreeImage_ColorQuantizeEx ++ [Ryan Rubley] added FIMD_ANIMATION and FIDT_PALETTE ++ [Ryan Rubley] added brand new PluginGIF with full animation multipage and metadata support ++ [Herve Drolon] added support for FIC_MINISWHITE 8-bit images to FreeImage_Rescale ++ [Herve Drolon] added HDR (High Dynamic Range) format (loader & writer) ++ [Herve Drolon] added support for 48-bit images in TIFF plugin ++ [Herve Drolon] added support for 48-bit images in PNG plugin ++ [Herve Drolon] added tone mapping operators (see below) ++ added FreeImage_ToneMapping ++ added FreeImage_TmoDrago03 ++ added FreeImage_TmoReinhard05 ++ [Petr Pytelka] added FreeImage_JPEGTransform +* [Herve Drolon] allowed loading of corrupted JPEG with a premature end of file +* [Herve Drolon] fixed a memory leak with loading of exif JPEG images +* [Detlev Vendt] changed some 'pointer-to-int' casts to 'pointer-to-long' for 64bit machines +* [Ryan Rubley] fixed a memory leak in the multipage API +* [Ryan Rubley] updated VB6 wrapper generation for new functions +* [Herve Drolon] fixed incorrect behavior when reading JPEG comments containing special characters +* [Herve Drolon] fixed incorrect behavior when reading JPEG ICC profiles with a size greater than 64 KB +* [Herve Drolon] fixed a bug in TIFF plugin when loading malformed multipage TIFF +* [Herve Drolon] fixed PluginTIFF not being thread safe + +February 20, 2005 - 3.6.1 +* [Ryan Rubley] fixed a memory leak in the metadata API +* [luedi] improved the robustness of FIBITMAP allocations + +February 13, 2005 - 3.6.0 +! FreeImage now uses libMNG 1.0.9 +! [Herve Drolon] improved the speed of FreeImage_Rescale +! [Herve Drolon] improved FreeImage_RotateClassic (more compact code, a little faster) +! [Herve Drolon] improved the metadata API using tag accessors ++ [Detlev Vendt] added LZW support to PluginGIF:Save ++ [Herve Drolon] added VS.Net 2003 project files ++ [Herve Drolon] added VERSIONINFO resource to the DLL ++ [Herve Drolon] added support for CMYK JPEG on loading ++ [Petr Supina] added 16-bytes alignment to FIBITMAP palette and pixels starting address ++ [Petr Supina] added support for MMX/SSE2 code in LibJPEG (based on Mozilla/Firefox code) ++ [Herve Drolon] added TIFF_JPEG compression flag to the TIFF plugin ++ [Detlev Vendt] added FreeImage_ZLibGZip ++ [Detlev Vendt] added FreeImage_ZLibCRC32 +* [Detlev Vendt] fixed PluginPNG not being thread safe +* [Herve Drolon] fixed compiler warning C4018 occuring with VS.Net 2003 + +December 29, 2004 - 3.5.3 +! FreeImage now uses ZLib 1.2.2 +! FreeImage now uses libPNG 1.2.8 +! FreeImage now uses libTIFF 3.7.1 +! [Herve Drolon] improved FreeImage_RotateClassic +! [Detlev Vendt] improved FreeImage_Rescale (more compact code, preserving 8-bpp colors) ++ [Herve Drolon] added support for transparency saving in ICO plugin ++ [Herve Drolon] added support for 1-bit images to FreeImage_RotateClassic ++ [Herve Drolon] added FreeImage_SetDotsPerMeterX and FreeImage_SetDotsPerMeterY +* [Nan Feng] fixed memory leak in FreeImage_DeleteTag (internal stuff) +* [Nigel Stewart] added conditional #pragma with #ifdef _MSC_VER / #endif +* [Herve Drolon] fixed the '65536 lines' limit on loading in PNM plugin + +November 27th, 2004 - 3.5.2 +* [Herve Drolon] fixed a second bug in FreeImage_Clone function + +November 26th, 2004 - 3.5.1 ++ [Riley McNiff] added FreeImage_ConvertTo4Bits +* [Herve Drolon] fixed a buffer overrun with some ILBM images +* [Riley McNiff] fixed a potential problem when reading TIFF resolution info +* [Dimitar Atanasov] fixed a bug in FreeImage_Clone function +* [Dimitar Atanasov] fixed several bugs in TIFF plugin + +November 1st, 2004 - 3.5.0 +! FreeImage now uses libPNG 1.2.7 +! FreeImage now uses libTIFF 3.7.0 +! FreeImage now uses libMNG 1.0.8 +! [Herve Drolon] improved TIFF LZW compression using a predictor +! [Detlev Vendt] FreeImagesPlus: corrected references to FreeImage.h and FreeImage.lib ++ [Herve Drolon] added support for loading/saving of 8-bit transparent TIFF ++ [Riley McNiff] added support for 4-bit dib in FreeImage_Paste ++ [Herve Drolon] added support for memory IO streams (see below) ++ added FreeImage_OpenMemory ++ added FreeImage_CloseMemory ++ added FreeImage_LoadFromMemory ++ added FreeImage_SaveToMemory ++ added FreeImage_TellMemory ++ added FreeImage_SeekMemory ++ added FreeImage_AcquireMemory ++ added FreeImage_GetFileTypeFromMemory ++ [Petr Pytelka] added FreeImage_GetFIFMimeType to the plugins function list ++ [Herve Drolon] added ICC profile support to JPEG plugin ++ [Herve Drolon] added support for metadata (see below) ++ added FreeImage_SetMetadata ++ added FreeImage_GetMetadata ++ added FreeImage_GetMetadataCount ++ added FreeImage_TagToString ++ added FreeImage_FindFirstMetadata ++ added FreeImage_FindNextMetadata ++ added FreeImage_FindCloseMetadata +* [Riley McNiff] fixed a bug with FreeImage_SetPixelIndex and 4-bit images +* [Petr Pytelka] fixed returned value in FreeImage_CloseMultiBitmap +* [Petr Pytelka] fixed index of new page in FreeImage_InsertPage +* [Aaron Shumate] fixed a minor bug in PNG plugin +* [Aaron Shumate] fixed a bug in IFF plugin (odd-length chunks) +* [Rupert Hewitt] fixed FreeImage not compiling on National Instruments Cvi Ccompiler +* [Herve Drolon] fixed a bug in IFF plugin (ILBM data) +* [Fred Harju] added a Makefile for Solaris 9 +* [Roddy Pratt] fixed FreeImage not linking under Borland C++ Builder +* [Vadim Alexandrov] fixed a memory leak in the multipage API +* [Herve Drolon] fixed a bug with DDS plugin behaviour on Big Endian OS +* [Herve Drolon] fixed a bug with conversion of JPEG resolution info on saving + +July 8th, 2004 - 3.4.0 +! [Jim Keir] improved FreeImage_FlipVertical function +! [Herve Drolon] LZW compression is now enabled in FreeImage ++ [Karl-Heinz Bussian] added constants to FreeImage.h to get at compile time the library version ++ [Karl-Heinz Bussian] added color lookup functions for X11 and SVG ++ [Herve Drolon] added TIFF tags TIFF_CCITTFAX3, TIFF_CCITTFAX4 and TIFF_LZW ++ [Detlev Vendt] added support for CMYK TIFF files with alpha channel ++ [Detlev Vendt] added (re-introduction of) PluginGIF +* [Herve Drolon] fixed a bug with loading of FAX TIFF images (introduced with LibTIFF 3.6.1) +* [Herve Drolon] fixed a bug in Floyd-Steinberg dithering algorithm +* [Herve Drolon] fixed a bug in Targa plugin save function +* [Herve Drolon] fixed a bug in FreeImage_AdjustCurve function +* [Ryan Rubley] fixed a bug with FreeImage_Rescale's filters accuracy +* [Ryan Rubley] fixed a bug in NN quantizer +* [Herve Drolon] fixed a bug with TIFF files containing additional Photoshop alpha channels +* [James Rossfeld] fixed a memory leak with some PSD images +* [Herve Drolon] fixed a bug with saving of 32-bit non transparent PNG images +* [Alexandr Zamaraev] fixed FreeImage not compiling with mingw32 +* [Herve Drolon] fixed FreeImage not compiling with VC.NET (pow function needs casts) + +May 2, 2004 - 3.3.0 +! [Ryan Rubley] FreeImage has been ported to MacOSX and should also work on other big endian processors ++ [Ryan Rubley] rewrote XPM plugin (better load support) and added save support ++ [Ryan Rubley] added ICO_MAKEALPHA flag to ICO plugin ++ [Ryan Rubley] Set/GetPixelColor now works with 16-bit pixels (555 or 565) ++ [Herve Drolon] PNG plugin now supports loading and saving of unsigned 16-bit greyscale images +* [Herve Drolon] fixed a bug with loading of 8-bit and 16-bit PNG with a 8-bit alpha channel +* [Herve Drolon] fixed a bug in NN quantizer algorithm with handling of 4-byte boundary alignment. +* [Herve Drolon] fixed a bug in PluginIFF Validate function +* [Herve Drolon] fixed a minor design issue in FreeImage_GetFIFFromFormat +* [Brad Schick] fixed some compiler warnings with VC++ 7.1 +* [Herve Drolon] fixed a bug with saving of 8-bit palettized images to 24-bit JPEG (channel inversion) + +March 16, 2004 - 3.2.1 +! [Volker Gärtner] improved the DDS plugin +! [Herve Drolon] FreeImage_Rescale now works on 8-, 24- and 32-bit images +! [Herve Drolon] FreeImage_Copy now works on 1-, 4-, 8-, 16-, 24- and 32-bit images +* [Floris van den Berg] fixed a bug in the MultiPage cache mechanism +* [Herve Drolon] fixed a bug with loading/saving of 8-bit transparent tga images +* [Herve Drolon] fixed a bug with loading of 1-bit TIFF (introduced with LibTIFF 3.6.1) + +February 18, 2004 - 3.2.0 +! FreeImage now uses libTIFF 3.6.1 ++ [Herve Drolon] added FreeImage_HasBackgroundColor ++ [Herve Drolon] added FreeImage_GetBackgroundColor ++ [Herve Drolon] added FreeImage_SetBackgroundColor ++ [Herve Drolon] added FreeImage_Composite ++ [Herve Drolon] added ICC profile support to PNG plugin ++ [Herve Drolon] added background color support to PNG plugin ++ [Volker Gärtner] added support for DDS format (loader) +* [Steve Johnson] improved FreeImage_OpenMultiBitmap/FreeImage_CloseMultiBitmap +* [Steve Johnson] fixed a bug in FreeImage_InsertPage +* [Herve Drolon] fixed a bug with JPEG compressed TIFF (red/blue swapping) +* [Herve Drolon] fixed a bug in PluginTarga where 8-bit images were saved incorrectly + +January 26, 2004 - 3.1.0 +! FreeImage now uses ZLib 1.2.1 ++ [Herve Drolon] added support for integer, real and complex image types (see below) ++ added FREE_IMAGE_TYPE enum ++ added FreeImage_AllocateT ++ added FreeImage_GetImageType ++ added FreeImage_FIFSupportsExportType ++ added FreeImage_ConvertToStandardType ++ added FreeImage_ConvertToType ++ added load/save support of all image types to TIFF plugin ++ [Peter Lemmens] added a Validate function to TARGA plugin ++ [Herve Drolon] added FreeImage_GetPixelIndex / FreeImage_SetPixelIndex ++ [Herve Drolon] added FreeImage_GetPixelColor / FreeImage_SetPixelColor ++ [Herve Drolon] added FreeImage_GetComplexChannel / FreeImage_SetComplexChannel +* [Serge Ivanchenko] TIFF_DEFLATE compression is now enabled in TIFF plugin +* [Herve Drolon] fixed a bug in NeuQuant color reduction algorithm + +November 16, 2003 - 3.0.4 +* [Tobias Persson] fixed FreeImage_GetChannel not working with FICC_ALPHA channel +* [Detlev Vendt] fixed a minor bug with PNG plugin and PNG_IGNOREGAMMA flag +* [Detlev Vendt] fixed a memory leak in PNG plugin save routine +* [Detlev Vendt] fixed JPEG validation problem with .jpe files +* [Ryan Rubley] added Source/LibTIFF/tif_extension.c to LibTIFF (needed for MacOSX) +* [Herve Drolon] improved error handling in TIFF plugin ++ [Karl-Heinz Bussian] added FreeImage_IsLittleEndian ++ [Karl-Heinz Bussian] added JPEG save support for 8-bit miniswhite bitmaps (transparent conversion to minisblack) ++ [Karl-Heinz Bussian] FreeImage_GetColorType now recognizes 8-bit FIC_MINISWHITE images +! [Herve Drolon] FreeImage_Rescale now supports rescaling of 32-bit images with alpha channel +! [Herve Drolon] FreeImage_Invert now supports inversion of 32-bit images with alpha channel +! [Herve Drolon] FreeImage_AdjustCurve now supports working with FICC_ALPHA channel + +November 2, 2003 - 3.0.3 +* [Ryan Rubley] improved makefile for Linux +* [Ryan Rubley] fixed FreeImage not compiling under MacOSX +* [Detlev Vendt] fixed still present inconsistancy with 32bpp transparency handling +* [Herve Drolon] fixed incorrect loading of 4-bit greyscale images in TIFF plugin + +October 27, 2003 - 3.0.2 +! FreeImage now uses libMNG 1.0.6 +* [Herve Drolon] fixed a boolean test in PluginCUT returning always false +* [Herve Drolon] fixed a warning in PluginIFF generated with g++ +* [Linus Tan] fixed a bug in FreeImage_Copy +* [Herve Drolon] fixed FreeImage not compiling under Linux (thanks to Michal) + +October 20, 2003 - 3.0.1 + +! FreeImage now uses libTIFF 3.6.0 +* [Detlev Vendt] fixed incorrect definition of the FREE_IMAGE_FORMAT enum +* [Detlev Vendt] fixed a potential crash problem with Load / Save routines +* [Herve Drolon] fixed incorrect loading of 16-bit greyscale images in TIFF plugin +* [Dennis Lim] fixed a memory leak in Floyd & Steinberg dithering routine +* [Herve Drolon] fixed a bug in BMP loader (incorrect loading of RLE4 bmp) +* [Detlev Vendt] fixed some inconsistancy with 32bpp transparency handling ++ [David Boland] added a C# wrapper +// Linux compatibility issues +- [Michal Novotny] removed the round function in Utilities.h +! [Herve Drolon] replaced the round routine by the clamp routine in PluginPCD ++ [Herve Drolon] added _itoa version in Utilities.h +* [Michal Novotny] fixed untyped consts not accepted by g++ in PluginBMP + +September 8, 2003 - 3.0.0 +- [Herve Drolon] removed deprecated functions +- [Herve Drolon] removed deprecated flags (TARGA_LOAD_RGB555, ICO_*, except ICO_DEFAULT) +- [Herve Drolon] removed the FreeImage pointer table (internal stuff) ++ [Herve Drolon] added a C++ wrapper ++ [Herve Drolon] added the FreeImage Toolkit (see below) ++ added FreeImage_Rescale ++ added FreeImage_RotateClassic ++ added FreeImage_RotateEx ++ added FreeImage_FlipHorizontal ++ added FreeImage_FlipVertical ++ added FreeImage_Invert ++ added FreeImage_AdjustCurve ++ added FreeImage_AdjustGamma ++ added FreeImage_AdjustBrightness ++ added FreeImage_AdjustContrast ++ added FreeImage_GetHistogram ++ added FreeImage_GetChannel ++ added FreeImage_SetChannel ++ added FreeImage_Copy ++ added FreeImage_Paste ++ [Karl-Heinz Bussian] added XPM loader ++ [Karl-Heinz Bussian] added flags parameter to FreeImage_CloseMultiBitmap ++ [Karl-Heinz Bussian] added JPEG save support for 8-bit palettized bitmaps (transparent conversion to 24-bit) ++ [Herve Drolon] added interface to ZLib compression functions ++ [Herve Drolon] added ICO format to the multipage API (loader & writer) ++ [Herve Drolon] added a MIME type to all plugins +* [Karl-Heinz Bussian] fixed incorrect conversion from 1-bit FIC_MINISWHITE bitmaps to 8-bit +* [Herve Drolon] fixed a bug in FreeImage_CloseMultiBitmap +* [Herve Drolon] fixed a potential memory leak in conversion functions (8-, 24-, 32-bit) +* [Robert Walker] fixed incorrect conversion from 16-bit to 24-bit and 16-bit to 32-bit +* [blurble] fixed TIFF validate signature problem (3DS files were recognized as TIFF) +* [Kurt Jankowski-Tepe] fixed FreeImage not compiling on MinGW / LCC WIN32 +* [Jani Peltonen] fixed bug in PluginTARGA where 32-bit bitmaps are not always correctly flipped +* [Detlev Vendt] fixed a bug with TIFF (memory leak with ICC profiles) + +May 25, 2003 - 2.6.1 ++ [Detlev Vendt] added FIC_CMYK to FREE_IMAGE_COLOR_TYPE ++ [Detlev Vendt] added ICC profile support to the library (see below) ++ added FreeImage_GetICCProfile ++ added FreeImage_CreateICCProfile ++ added FreeImage_DestroyICCProfile ++ added FIICCPROFILE & FIICCPROFILE flags ++ added plugin function FreeImage_FIFSupportsICCProfiles ++ [Detlev Vendt] added ICC profile support for TIFF ++ [Herve Drolon] added XBM (X11 Bitmap Format) support : loading +* [Herve Drolon] fixed incorrect IFF file detection (thanks Floris) +* [Herve Drolon] fixed incorrect conversion from 1/4-bit greyscale bitmaps to 8-bit +* [Herve Drolon] fixed a bug in TIFF writer when saving 1,4,8 bit dib (introduced in 2.6.0, sorry) +* [Herve Drolon] fixed a palette problem in TIFF loader when loading 1-bit b & w images +* [Herve Drolon] improved FreeImage_Dither to handle any bitdepth + +May 5th, 2003 - 2.6.0 +! FreeImage now uses libPNG 1.2.5 +! FreeImage now uses libMNG 1.0.5 +! [Markus Loibl] ActiveX wrapper is now distributed in a separate release (since 2.5.5) +! [Herve Drolon] the function FreeImage_Free is now deprecated : use FreeImage_Unload instead +! [Herve Drolon] updated the generic samples and removed deprecated functions ++ [Detlev Vendt] added CMYK support to TIFF save function ++ [Detlev Vendt] added TIFF_SAVE_CMYK flag constant ++ [Detlev Vendt] added 32-bit support (with transparency handling) to TIFF plugin ++ [Herve Drolon] added FreeImage_Threshold ++ [Herve Drolon] added FreeImage_Dither ++ [Herve Drolon] added FREE_IMAGE_DITHER parameter to FreeImage_Dither +* [Herve Drolon] improved error handling in PluginMNG +* [Herve Drolon] improved TIFF flags handling in TIFF save function +* [Herve Drolon] fixed a potential crash-problem in FreeImage_OutputMessage (in case of a null message) +* [Detlev Vendt] fixed a bug with the deprecated FreeImage_GetBitsRowCol (trailling backslash behind the DEPRECATE macro) + +July 24th, 2002 - 2.5.5 +! FreeImage now uses libPNG 1.2.4 +! FreeImage now uses libMNG 1.0.4 ++ [Markus Loibl] added ActiveX wrapper + +June 22th, 2002 - 2.5.4 +* [Timothy Roughton] fixed FreeImage not compiling on LCC WIN32 +* [Markus Loibl] fixed PluginTIFF sometimes saving with wrong X/Y resolution +* fixed crashbug when loading some RLE4 BMPs +! FreeImage now uses LibPNG 1.2.3 +! [Markus Loibl] improved startup plugin locate handling code +! [Gerhard Gruber] made some changes so that FreeImage compiles on VC5 ++ [Markus Loibl] added flags TIFF_PACKBITS, TIFF_DEFLATE, TIFF_ADOBE_DEFLATE and TIFF_NONE + +May 21th, 2002 - 2.5.3 +* fixed wrong colors when loading 16-bit grayscale TIFF +* fixed crash-problem with FreeImageQt +* fixed PluginTIFF saving some bitmaps flipped vertically +* [Laurent Rocher] fixed bug in FreeImage_GetLockedPageNumbers +* [Laurent Rocher] fixed bug in FreeImage_UnlockPage +! FreeImage now uses libpng 1.2.2 ++ added TARGA save support ++ added BMP RLE8 save support + +March 30th, 2002 - 2.5.2 +* fixed bug in PluginTARGA where 32-bit bitmaps are not always correctly flipped +* fixed FreeImage_GetLockedPageNumber being mentioned in FreeImage.h +* fixed crash bug when handling read-only multipage bitmaps +- removed internal function FreeImage_GetExtraDataPointer +! FreeImage now uses zlib 1.1.4 ++ added function FreeImage_GetLockedPageNumbers + +March 2nd 2002 - 2.5.1 +* fixed pluginTIFF not being able to save 32-bit bitmaps +* fixed not being able to save PNM bitmaps through the LoadXXX wrappers +* fixed a webcam generated BMP image being loaded with wrong colors +! FI_ReadProc, FI_WriteProc, etc. do now carry the DLL_CALLCONV flag +! the function FreeImage_GetBitsRowCol is now deprecated +! FreeImage_SetTransparencyTable now taken an integer as count parameter +! FreeImage_IsTransparent now always returns true for 32-bit bitmaps +! PluginPNG::Save now ignores the result of FreeImage_IsTransparent +! PluginTIFF now converts all 32-bit bitmaps to 24-bit, until our patch + to fully support alpha in TIFF is applied in libtiff ++ added full multi-paging support ++ added octal and hexadecimal number support to FreeImage_OutputMessage + +January 3rd 2002 - 2.5.0 +* fixed bug in FreeImage_SaveJPEG +* fixed bug in FreeImage_LoadMNG +* fixed bug in FreeImage_LoadPNG +* fixed small Visual C++ 5.0 compiler issue in PluginMNG.cpp +* fixed FreeImage crashing on JPEG 6.0 encoded TIFFs +! FreeImage now uses libTIFF 3.5.7 +! FreeImage now uses libPNG 1.2.1 +! all the FreeImage_LoadXXX and FreeImage_SaveXXX functions are now deprecated ++ added Dr. Halo (*.cut) support ++ added printf-like format string support to SetOutputMessage ++ added basic multi-paging support: open, close, counting and grabbing ++ added deprecation manager ++ added FreeImage_Clone function + +October 3rd 2001 - 2.4.2 +* fixed missing BI_BITFIELDS support for 32-bit BMPs +* fixed bug in FreeImage_ConvertLine16_555_To16_565 and vice versa +* fixed bug in FreeImage_ConvertToRawBits +* fixed PluginTIFF behaving incorrectly on PHOTOMETRIC_MASK images +* fixed 16 bit TIFFs not loading correctly +* fixed incorrect handling of CCITTFAX3 and CCITTFAX4 TIFFs +* fixed JPEG encoded TIFFs not being supported +! [Yours Detlev] patched libTIFF to handle EXTRASAMPLE_UNSPECIFIED +! [Juergen Riecker] improved speed of PCX loading a lot +! rewrote parts of FreeImage to improve support for c +! the internal RGB555 and RGB565 macros now read BGR instead of RGB +! FreeImage now uses libMNG 1.0.3 +! FreeImage now uses libPNG 1.2.0 +! FreeImage_Save now opens files with the "w+b" flag +! renamed internal macro CalculateUsedColors to CalculateUsedPaletteEntries +! enabling/disabling plugins no longer has effect on FIFSupportsReading +! enabling/disabling plugins no longer has effect on FIFSupportsWriting ++ added flag PNG_IGNOREGAMMA ++ added function FreeImage_FIFSupportsExportBPP + +July 30th 2001 - 2.4.1 +* [Jan Nauta] fixed some plugin ids not being passed to plugins +* [Jan Nauta] fixed some functions being natively called instead of indirect +* [Jan Nauta] fixed BMPs with signature BA not being regognised +* [Remo Eichenberger] fixed memory leak in the plugin system +* fixed seek bug in PluginIFF's Validate +* fixed transparency issue in PluginPNG +* fixed uncaught exceptions in WUQuantizer and NNQuantizer +* fixed some problems with PluginTARGA +* fixed some problems with PluginICO +* fixed some problems with PluginBMP +! improved FreeImageQt's load function a little +! tell/seek control for validation is now handled inside the plugin framework + +July 22th 2001 - 2.4.0 +* (Yours Detlev) fixed memory leak in FreeImage_GetFIFFromFilename +* (Yours Detlev) fixed memory leak in the ICO plugin +* (Yours Detlev) fixed memory leak in the PNG plugin +* fixed potential NULL-pointer access bug in Plugin::AddNode +* fixed problems with linking the static lib +- removed LBM plugin. Its functionality is placed in the IFF plugin now +- removed FreeImage_GetFIFByIndex +! FreeImage now uses LibMNG 1.0.2 +! FreeImage_SetTransparent now only enables alpha when the bitmap is 8 or 32 bit +! FreeImage_SetTransparencyTable now only enables alpha when the bitmap is 8 bit +! FreeImage_LoadLBM now uses Mark Sibly's IFF plugin +! FreeImage_SaveBMP now converts to 24-bit when bpp is 32 and transparency is off +! FreeImage_SaveJPEG now converts to 24-bit when bpp is 32 and transparency is off +! FreeImage_SavePNM now converts to 24-bit when bpp is 32 and transparency is off +! FreeImage_SaveTIFF now converts to 24-bit when bpp is 32 and transparency is off ++ [Mark Sibly] added IFF (ILBM) support ++ added basic support for Photoshop files ++ added mime type support (FreeImage_GetFIFFromMime) ++ added functions FreeImage_SetPluginEnabled and FreeImage_IsPluginEnabled + Disabling plugins modifies the behaviour of the following functions: + * FreeImage_LoadFromHandle + * FreeImage_SaveToHandle + * FreeImage_FIFSupportsReading + * FreeImage_FIFSupportsWriting + * FreeImage_GetFIFFromFormat + * FreeImage_GetFIFFromFilename + * FreeImage_GetFIFFromMime + * FreeImage_Validate + +June 30th 2001 - 2.3.2 +* fixed missing "targa" extension in targa extension list +* fixed small memory leak in PluginList::AddNode +* fixed 32 bit PNG saving suddenly disappeared from the distro? +* fixed 'black line' bug in LoadTARGA +- removed project FreeImageM2 +- removed FreeImage_Combine +! FreeImage_RegisterLocalPlugin now receives a FI_InitProc as first parameter +! FreeImage_GetFIFFromFilename now also takes the format id into account +! cleanup up the code a little for PluginPCD and PluginPCX ++ added static lib project + +June 11th 2001 - 2.3.1 +* [Machiel ten Brinke] fixed the loading of some 'ancient' TARGAs +* [Rui Lopes] fixed some bugs in the external plugin registration +* fixed the plugin system crashing when the init function isn't called +- removed project FreeImagePy +- removed 32 to 24 bit conversion while saving PNG in FreeImageQt +! the scanline convert functions are now accessable in plugins +! FreeImage now uses an STL map to store the plugin list +! PluginSDK.h is now integrated into FreeImage.h +! FreeImage_Register now receives the boolean parameter 'load_local_plugins_only' +! FreeImage now uses LibPNG 1.0.12 ++ [Rui Lopes] added plugin for GIF reading/writing support ++ added function FreeImage_SetTransparencyCount ++ added support for 32 bit PNG saving ++ added FreeImage_RegisterLocalPlugin to allow plugins inside apps ++ added FreeImage_RegisterExternalPlugin to manually load DLLs ++ added plugin for JBIG reading/writing support + +May 4th 2001 - 2.3.0 +* [Martin Weber] fixed some small bugs in the TARGA and BMP plugins +* [Martin Weber] fixed tiny bug in new 16 bit conversions +* [Martin Weber] fixed load flag inconsistency in the TARGA plugin +* [Martin Weber] fixed plugin id / load reference inconsistency for PNM +* [Jan Nauta] fixed bug in conversion 16 -> 16 +* [Herve Drolon] fixed small bug in 4-bit PCX loader +- removed code that loads BMPs renamed to ICO in PluginICO +! the flag TARGA_LOAD_RGB555 is now obsolete +! the plugin list is now sorted internally +! ConvertTo32Bits now stores the transparency table as alpha mask +! FreeImage now uses LibMNG 1.0,1 +! FreeImage now uses LibPNG 1.0.11 ++ added external plugin support via DLLs ++ added function FreeImage_GetFIFByIndex ++ added internal function CalculateScanLine ++ added transparency support for high-color PNGs ++ added transparency support for high-color TIFFs ++ added functions FreeImage_SetTransparent and FreeImage_IsTransparent ++ added constant FIC_RGBALPHA to FREE_IMAGE_COLOR_TYPE + +April 5th 2001 - 2.2.0 +* [Remo Eichenberger] fixed small bug concerning DLLMain and static LIB generation +* fixed 1-bit bitmaps not properly loading in FreeImageQt +* fixed bug in conversion 16->16 +* FreeImage now uses LibPNG 1.0.10 +! [Martin Weber] improved loading of BMP files +! [Martin Weber] improved loading of TARGA files +! [Dave Larson] improved visual appearance after 16 conversions +! FreeImageQt now converts 32-bit bitmaps to 24-bit when saving PNGs and JPEGs ++ added functions FreeImage_Initialise and FreeImage_DeInitialise ++ added internal plugins ++ re-added combine/alphablend functions + +March 8th 2001 - 2.1.0 +* [Martin Hemming] fixed bug in 16-bit TARGA loading code +* fixed PNG's with alpha masks not loading correctly +! FreeImage is now dual-licensed: the FI-License and the GPL license +! FreeImage now uses LibPNG 1.0.9 +! FreeImage now uses LibTIFF 3.5.6 Beta +! FreeImage now uses LiBMNG 1.0.0 +! changed the ordering of the FREE_IMAGE_FORMAT table +! improved linux support +! improved test script ++ added transparency table support to SavePNG ++ added BI_BITFIELDS support to LoadBMP and SaveBMP ++ added reading support for OS/2 2.x BMPs ++ added support for MNG and JNG reading using LibMNG ++ added support for Deluxe Paint reading ++ added 'hot swap' support to the Core DLL ++ added 'hot swap' support to FreeImage Qt ++ added functions GetFIFFromFormat and GetFIFFromFilename ++ added functions FIFSupportsReading and FIFSupportsWriting ++ added function GetFIFRegExpr + +January 14th 2001 - 2.0.0 +* [Herve Drolon] fixed a bug in the conversion 4->8 +* [Herve Drolon] fixed a bug in metrics handling in SaveJPEG +* [Herve Drolon] fixed a bug in the return value of the function SaveTIFF +* fixed the presence of two WuQuantizer.cpp files in the distribution +* fixed bug where a BMP renamed to ICO isn't loaded +- removed FreeImage_ConvertToGreyScale. Use FreeImage_ConvertTo8Bits instead. +- removed the boolean parameters from all conversion routines +- removed page handling in LoadTIFF. A new range of functions will be added. +! The void pointers used in FreeImage are now typed +! LoadBMP now takes palettes in 24/32 bit images in respect +! All effects and MMX functions are now stored in a new library (FreeEffects) +! [Herve Drolon] fixed bug in FreeImage_GetColorType +! [Herve Drolon] improved PCX loader. It can now read 1, 4, 8 and 24-bit images +! [Manfred Tausch] improved FreeImage_Rotate +! [Luca Piergentili] fixed crash bug when saving some 1-bit TIFFs +! rewrote all bitdepth conversion routines making use of the new scanline converters +! rewrote bitdepth conversion in FreeImageQt (uses less memory) +! FreeImage is now compiled __stdcall ++ [Herve Drolon] added WBMP (Wireless Bitmap Format) support: loading and saving ++ [Herve Drolon] added 4, 16 and 32 bitdepth handling in GetColorType ++ [Herve Drolon] added handling of 8-bit greyscale bitmaps in SaveJPEG ++ [Herve Drolon] added NeuQuant color reduction algorithm to ColorQuantize ++ added DLL_CALLCONV (calling convention) flag ++ added bitmask support to all bitmaps ++ added a series of functions converting scanlines from one bitdepth to another ++ added functions ConvertFromRawBits and ConvertToRawBits ++ added project FreeImageM2: Magenta II MMT bindings for FreeImage ++ added basic foundation for linux support + +December 2th 2000 - 1.4.4 +* fixed small bug related to TIFFSetDirectory in FreeImage_LoadTIFF +* fixed FreeImage_Rotate sometimes clipping too much pixels +* fixed other small bug in FreeImage_Rotate +* fixed FreeImage_Clone not taking the FREEIMAGEHEADER in account +* fixed bug in FreeImageQt where 1-bit images are not correctly allocated +* fixed FreeImage_Crop not copying the palette +* fixed message function pointer crash bug +* fixed bug where the palette wasn't copied when saving in FreeImageQt +* fixed FreeImage_Clone not copying the transparency table +- removed FreeImage_WritePaletteEntry +! [Adam Gates] rewrote parts of FreeImage so that c compilers can handle it better +! FreeImageQt doesn't statically link with the FreeImage lib anymore +! FreeImageQt now uses atexit() to automatically unregister +! rewrote parts of FreeImage_LoadBMP to increase speed ++ [Markus Loibl] added metrics handling code to LoadBMP, LoadJPEG, LoadTIFF and LoadPCX ++ added metrics handling code to FreeImageQt ++ added functions FIQT_IsLoaded, FIQT_GetVersion and FIQT_GetCopyrightMessage ++ added conversion 1 -> 16 ++ added FreeImage_SaveJPEG and JPEG quality settings ++ added FreeImage_GetBitsRowCol ++ added function FIQT_SetOutputMessage to FreeImageQt ++ added FreeImage_GetFileTypeFromExtension and FIQT_GetFileTypeFromFormat ++ added project FreeImagePy: python bindings for FreeImage + +November 7th 2000 - 1.4.3 +* fixed FreeImage_SavePNG crash bug +* fixed slighly corrupt size filter in FreeImage_Combine +* fixed FreeImage_SaveTIFF not saving 4-bit images +* [Herve Drolon] fixed bug in FreeImage_LoadTIFF +* [Herve Drolon] fixed bug in FreeImage_GetColorType +- removed fclose from FreeImage_SavePNM (who put it there?) +! rewrote FreeImage_Rotate +! FreeImageQt now automatically detects which formats are supported by Qt and which not +! FreeImage_Allocate now returns a void pointer +! FreeImage_Unload is now called FreeImage_Free ++ added 16-bit 5-5-5 support to FreeImage_LoadBMP ++ added RLE_DELTA support to FreeImage_LoadBMP ++ added directory support to FreeImage_LoadTIFF ++ added functions dealing with transparency ++ added transparency support to 8-bit PNG's in Qt ++ added FREE_IMAGE_QUANTIZE parameter to FreeImage_ColorQuantize ++ added custom FREEIMAGEHEADER header prepended to internal bitmaps ++ added new documentation + +October 18th 2000 - 1.4.2 +* fixed FreeImage_SaveBMP storing an incorrect bfSize value in the BITMAPFILEHEADER +* fixed bug where JPEG and PNG wouldn't load in FreeImageQt +* fixed FreeImage_Mirror mirroring one pixel less than needed +! FreeImage_MaskedCombine24 is now called FreeImage_MaskedCombine24Ex +! FreeImage_MaskedCombine32 is now called FreeImage_MaskedCombine32Ex ++ added 16-bit bitmap support to FreeImage_Mirror ++ added 16-bit bitmap support to FreeImage_ConvertTo8Bits ++ added simple version of FreeImage_MaskedCombine24 ++ added simple version of FreeImage_MaskedCombine32 + +October 17th 2000 - 1.4.1 +* [Herve Drolon] fixed bug in FreeImage_ConvertTo8Bits +* fixed bug in conversion with 16 -> 24 and 16 -> 32 +- removed static library support +- removed all unnecessary files from LibTIFF, LibPNG, LibJPEG and ZLib +- removed all absolute seeks from the library +! FreeImageQt now makes use of the DLL distro +! rebuilt the entire directory structure +! improved handling of BMP +! renamed FreeImage_MaskedCombine to FreeImage_MaskedCombine32 ++ [Alexander Dymerets] added 24-bit masked alpha blending with a seperate alpha mask ++ added FreeImage_Rotate (known bug in degrees 76 to 106) ++ added 4-bit bitmap support to FreeImage_ConvertTo16Bits ++ added 8-bit bitmap support to FreeImage_ConvertTo16Bits ++ added 32-bit bitmap support to FreeImage_ConvertTo16Bits ++ added 32-bit bitmap support to FreeImage_Mirror ++ added 16-bit 5-5-5 support to FreeImage_ConvertTo24Bits ++ added 16-bit 5-5-5 support to FreeImage_ConvertTo32Bits + +October 2th 2000 - 1.4.0 +* [Jani Kajala] fixed bug in conversion with 4 -> 24 and 8 -> 32 +* [Jani Kajala] fixed bug in FreeImage_Flip +* [Jani Kajala] fixed minor bug in FreeImage_LoadBMP +- [Herve Drolon] removed PBMFlags, PGMFlags and PPMFlags +- [Herve Drolon] removed FI_LoadGeneric +- removed FreeImage_Win32.h +! [Herve Drolon] changed FI_GetFileType +! [Herve Drolon] replaced FI_LoadPBM, FI_LoadPGM and FI_LoadPPM with FI_LoadPNM +! [Herve Drolon] improved FreeImage_LoadPNG +! FreeImage_WritePaletteEntry is now exported ++ [Herve Drolon] added FreeImage_SavePNG ++ [Herve Drolon] added FreeImage_SavePNM and PNMFlags ++ [Herve Drolon] added XXXFlags parameter to save functions ++ [Herve Drolon] added FreeImage_LoadRAS and FIF_RAS ++ added FreeImage_GetFileTypeFromExt + +September 7th 2000 - 1.3.5 ++ added conversion 4 -> 8 to FI_ConvertTo8Bits ++ added simple version of FI_GetFileType ++ added project FreeImageQt; a port of the library to the TrollTech library + +August 31th 2000 - 1.3.4 +* fixed 'ice effect' bug in new 24 bit PCX code +* fixed some bugs with the conversion 16 -> 24 and 16 -> 32 +! FI_Blur now returns void +! A debug build of the library now produces FreeImaged.dll and FreeImaged.lib +! TARGA_LOAD_ARGB8888 is now called TARGA_LOAD_RGB888 +! Alpha channels are now automatically loaded unless TARGA_LOAD_RGB888 is specified +! cleaned up the code a lot ++ added 32-bit bitmap support to FreeImage_ConvertToGreyscale ++ added support for 32-bit bottom-left TARGA images ++ added internal functions FreeImage_WritePaletteEntry() and FreeImage_GetScanLine() ++ added FreeImage_Win32.h, containing Windows functions needed to create DIBs ++ added documentation through Doxygen + +July 30th 2000 - 1.3.3 +* [Jani Kajala] fixed some bugs with the conversion 4 -> 24 and 8 -> 24 +* [Jani Kajala] fixed some bugs with the conversion 4 -> 32 and 8 -> 32 +* fixed bug in FI_LoadPNM's ASCII number loader +! [Herve Drolon] improved FI_LoadPNG +! [Herve Drolon] changed FI_ConvertToGreyScale (added changeable macro for conversion) +! improved FI_ConvertTo24Bits +! improved FI_ConvertTo32Bits +! freeImage now uses LibPNG 1.0.8 ++ [Herve Drolon] added FI_ColorQuantize, based on Wu's color quantizer ++ added the conversion 1 -> 24 ++ added the conversion 1 -> 32 ++ added FI_ConvertTo8Bits ++ added FI_Invert (very useful for image processing) ++ added FI_GetColorType and 'enum FREE_IMAGE_COLOR_TYPE' + +June 30th 2000 - 1.3.2 +- removed color reduction functions from the project +! [Herve Drolon] Improved FI_LoadTIFF code +! renamed FI_ToGrayscale to FI_ConvertToGreyScale +! renamed FI_IncreaseColors to FI_ConvertTo24Bits +! LoadBMP now supports 32-bit bitmaps +! [Jani Kajala] Improved FI_LoadTARGA and FI_LoadPCX code ++ added FI_ConvertTo32Bits to convert a bitmap to 32-bit ++ added FI_MaskCombine to combine two 32-bit bitmaps using a alpha mask ++ added FI_AddAlphaMask to enrich a 32-bit bitmap with an alpha mask ++ added FI_SaveTIFF ++ added 16-bit bitmap (565) support to the ConvertToXXX functions. ++ added FI_ConvertTo16Bits (555 and 565) + +June 1th 2000 - 1.3.1 +- removed Standard Template Library (STL) code +* [Jani Kajala] fixed minor bug in FI_LoadTARGA +* [Jani Kajala] fixed some minor bugs in FI_LoadPCX +! streamlined FI_LoadJPEG a little +! FreeImage now uses LibPNG 1.0.6 +! FreeImage now uses LibTIFF 3.5.5 +! FreeImage now uses malloc and free instead of new and delete ++ introduced compiler flags to disable certain features in the DLL ++ added experimental nearest color reduction (FI_ReduceColorsNearestColor) + +April 13th 2000 - 1.3.0 +* fixed some 8 bit PCX files loading incorrectly +* fixed tiny bug in internally used CalculateUsedColors function +- removed FI_SaveXPM. Only BMP is supported now. +- removed Windows dependencies for easier porting +! optimized FI_LoadKOALA a little +! optimized FI_Combine using MMX technology +! FI_Combine now receives an 'unsigned integer' as alpha blend parameter +! FI_InCreaseColors and FI_ReduceColors don't dispose the old bitmap anymore ++ added PNM support (PGM, PPM and PBM; both binary and ascii) ++ [Alexander Dymerets] added FI_EnableMMX and FI_DisableMMX ++ added various effect functions (FI_Blur, FI_Brighten and FI_Crop) + +March 1st 2000 - 1.2.1 +* fixed some 24 bit PCX files loading incorrectly + +February 8th 2000 - 1.2.0 +* fixed last bitmap data block in JPEG files being truncated +* fixed 4/8 bit BMP's incorrectly loading when the palette is smaller than the bitcount predicts +- removed FI_Load. There is no reliable way to identify all image formats +- removed FI_SetJpegDecodeMode. + Mode selection is now done using the 'DataEnum data' parameter of FI_LoadJPEG +! read_proc/write_proc/tell_proc in FreeImageIO now are same as fread/fwrite/ftell ++ added a 'DataEnum data' parameter to all FI_LoadXXX functions. ++ added 16 bit TARGA support ++ added RLE support for TARGA images ++ added FI_GetDIBSize to get the size of a DIB in bytes ++ added Kodak PhotoCD support (Base, Base/4 and Base/16 encoding) ++ added KOALA support ++ added FI_GetFileType. Note: there is no reliable way to identify TARGA, ICO and PCD. Therefore they have been excluded +In KOALA files only the files converted by a C64 emulator can be identified. ++ added FI_Combine to combine two 24-bit bitmaps with (optional) alpha blending + +January 15th 2000 - 1.1.1 +! FI_Copy is now called FI_Clone ++ added FI_ToGrayscale to convert a color bitmap to grayscale ++ added 32 bit TARGA support ++ added FI_IncreaseColors to increase the bitmap bitdepth from 4/8 bit to 24 bit + +January 14th 2000 - 1.1.0 +* FI_MIRROR: fixed nibbles not being mirrored in 4 bit images +* FI_MIRROR: fixed bits not being mirrored in 1 bit images +* fixed improper loading of 1, 4 and 8 bit OS/2 BMP's +* fixed some inconsistensies in the calculation of lines and pitches +* fixed incorrectly loading of Huffman and FAX encoded TIFFs +* fixed LoadTGA accepting 16 bit TGA's and returning corrupt DIB's +- removed LZW support for TIFFs +! FreeImage now uses LibTIFF 3.5.4 ++ added ICO support ++ added overridable file I/O support in the form of FreeImageIO and fi_handle ++ added FI_Load for generic image loading ++ added FI_ReduceColors for color reduction ++ added FI_Copy to copy a bitmap in memory + +January 5th 2000 - 1.0.0 diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/WhatsNew_Delphi.txt b/#ThirdParty/FreeImage/Wrapper/Delphi/WhatsNew_Delphi.txt new file mode 100644 index 0000000..5cce257 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/WhatsNew_Delphi.txt @@ -0,0 +1,117 @@ +What's New for FreeImage Delphi Wrapper + +* : fixed +- : removed +! : changed ++ : added + +May 5, 2014 ++ [Lorenzo Monti] updated wrapper for FreeImage 3.16.1 ++ [Lorenzo Monti] added preprocessor tests for Delphi XE2..XE6 ++ [Lorenzo Monti] merged changes for OSX compatibility (submitted by Maurício) + +December 8, 2012 ++ [Lorenzo Monti] updated wrapper for FreeImage 3.15.4 + +June 4, 2012 ++ [Lorenzo Monti] updated wrapper for FreeImage 3.15.3 + +March 4, 2011 +* [Jean-Marc Bottura] some bugfixes in FreeBitmap.pas ++ [Jean-Marc Bottura] added support for 64 bit compilers + +February 15, 2011 ++ [Lorenzo Monti] updated wrapper for FreeImage 3.15.0 + +January 4, 2011 ++ [Lorenzo Monti] updated ImagePreview demo to support latest Graphics32 components (1.9) and Delphi 2010 / XE + +November 12, 2010 ++ [Lorenzo Monti] updated wrapper for FreeImage 3.14.1 ++ [Lorenzo Monti] added Delphi XE support + +July 29, 2010 ++ [Lorenzo Monti] added Free Pascal / Lazarus 32 bit support + +July 14, 2010 ++ [Lorenzo Monti] updated wrapper for FreeImage 3.13.1 +* [Lorenzo Monti] fixed declaration of FreeImageIO functions (FI_ReadProc, FI_WriteProc, FI_SeekProc, FI_TellProc) +! [Lorenzo Monti] renamed structure PluginStruct to Plugin, according to FreeImage.h +* [Lorenzo Monti] fixed declaration of JPEG_CMYK constant +* [Lorenzo Monti] fixed declaration of type FreeImage_OutputMessageFunction +* [Lorenzo Monti] fixed declaration of FreeImage_OutputMessageProc ++ [Lorenzo Monti] added wrapper for FreeImage_OutputMessageProc for older Delphi compilers (<6) not supporting varargs +* [Lorenzo Monti] fixed declaration of FreeImage_LookupX11Color and FreeImage_LookupSVGColor +! [Lorenzo Monti] changed declaration of FreeImage_GetPixelIndex, FreeImage_GetPixelColor, FreeImage_SetPixelIndex, FreeImage_SetPixelColor +! [Lorenzo Monti] changed declaration of FreeImage_GetInfo +! [Lorenzo Monti] changed declaration of FreeImage_GetICCProfile, FreeImage_CreateICCProfile, FreeImage_DestroyICCProfile +* [Lorenzo Monti] fixed declaration of FreeImage_SetComplexChannel ++ [Lorenzo Monti] added Delphi 2010 support ++ [Lorenzo Monti] added Version.inc to determine compiler version +! [Lorenzo Monti] moved all "external" definitions to implementation section +! [Lorenzo Monti] changed FreeBitmap.pas, FreeUtils.pas and TargaImage.pas to reflect changes in the FreeImage.pas unit + +July 17, 2006 ++ [Hervé Drolon] added FIF_FAXG3 and FIF_SGI definitions, added FreeImage_MakeThumbnail definition. + +January 20, 2006 +! [Anatoliy Pulyaevskiy] updated WinBitmap demo +* [Anatoliy Pulyaevskiy] fixed TFreeBitmap.ConvertToStandartType renamed to TFreeBitmap.ConvertToStandardType +* [Anatoliy Pulyaevskiy] fixed using of SetFreeImageMarker (only for HDR dib) + +October 19, 2005 ++ [Anatoliy Pulyaevskiy] updated wrapper for FreeImage 3.8.0 ++ [Anatoliy Pulyaevskiy] added Delphi 5 support ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.OnChanging event +! [Anatoliy Pulyaevskiy] changed declaration of TFreeBitmap.Assign method ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.CanSave function +! [Anatoliy Pulyaevskiy] property TFreeBitmap.Dib now have read/write access ++ [Anatoliy Pulyaevskiy] added TFreeTag class incapsulating FreeImage FITAG type + +August 5, 2005 +* [kaare-nysite] fixed the prototype of FreeImage_ConvertFromRawBits + +June 21, 2005 +* [Maarten Veerman] fixed the prototype of FreeImage_OpenMultiBitmap + +February 17, 2005 - Version 1.3.0 ++ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.6.0 +! [Anatoliy Pulyaevskiy] FreeImage.pas unit has been reworked + +January 14, 2005 - Version 1.2.1 ++ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.5.3 ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.SetHorizontalResolution and TFreeBitmap.SetVerticalResolution ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.MakeThumbnail procedure ( an adapted version of function given by Enzo Costantini) ++ [Enzo Costantini] added FIU_GetFIFType utility function ++ [Enzo Costantini] added TFreeWinBitmap.CopyToBitmapH function +* [Anatoliy Pulyaevskiy] fixed TFreeBitmap.Rotate (fix from FreeImage CVS) ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.ConvertToStandartType + +December 20, 2004 - Version 1.2.0 ++ [Anatoliy Pulyaevskiy] added MultiBitmap Demo +* [Anatoliy Pulyaevskiy] fixed TFreeMultiBitmap.LockPage due to error with Locking/Unlocking pages ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.ConvertTo4Bits +* [Anatoliy Pulyaevskiy] TFreeBitmap.ConvertToGrayScale fixed converting bitmaps with FIC_MINISWHITE color type +* [Anatoliy Pulyaevskiy] fixed TFreeWinBitmap.DrawEx FDisplayDib deleting ++ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.5.2 + +November 12, 2004 - Version 1.1.0 ++ [Anatoliy Pulyaevskiy] added TFreeBitmap.Assign(Source: PFIBITMAP) +- [Anatoliy Pulyaevskiy] removed TFreeBitmap.SetDib +! [Anatoliy Pulyaevskiy] TFreeBitmap.Dib property now read-only +* [Anatoliy Pulyaevskiy] TFreeMultiBitmap.UnlockPage implemented +* [Anatoliy Pulyaevskiy] fixed TFreeBitmap.Rescale not applies changes + +November 8, 2004 - Version 1.0.0 ++ [Anatoliy Pulyaevskiy] added Delphi version of FreeImagePlus ++ [Anatoliy Pulyaevskiy] updated the wrapper for FreeImage 3.5.0 + +January 7, 2004 ++ [Tommy] added TargaImage unit + +October 28, 2003 ++ [Peter Byström] updated the wrapper for FreeImage 3.0.2 + +August 9, 2003 ++ [Simon Beavis] added a wrapper for FreeImage 2.6.1 + diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/_clean.bat b/#ThirdParty/FreeImage/Wrapper/Delphi/_clean.bat new file mode 100644 index 0000000..43924b0 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/_clean.bat @@ -0,0 +1,13 @@ +del /S *.~* +del /S *.dcu +del /S *.dsk +del /S *.cfg +del /S *.dof +del /S *.obj +del /S *.hpp +del /S *.ddp +del /S *.mps +del /S *.mpt +del /S *.bak +del /S *.exe +del /S *.stat \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/ImagePreview.dpr b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/ImagePreview.dpr new file mode 100644 index 0000000..79fc38b --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/ImagePreview.dpr @@ -0,0 +1,13 @@ +program ImagePreview; + +uses + Forms, + MainFrm in 'MainFrm.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/ImagePreview.res b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/ImagePreview.res new file mode 100644 index 0000000..b40deef Binary files /dev/null and b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/ImagePreview.res differ diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/MainFrm.dfm b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/MainFrm.dfm new file mode 100644 index 0000000..d8cf90f --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/MainFrm.dfm @@ -0,0 +1,135 @@ +object MainForm: TMainForm + Left = 304 + Top = 165 + Width = 467 + Height = 405 + Caption = 'Image Preview' + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + KeyPreview = True + OldCreateOrder = False + Position = poDesktopCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + OnKeyUp = FormKeyUp + OnMouseWheel = ScrollBoxMouseWheel + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object ImgView32: TImgView32 + Left = 0 + Top = 0 + Width = 459 + Height = 371 + Align = alClient + ParentShowHint = False + PopupMenu = PopupMenu + Scale = 1 + ScrollBars.Color = clScrollBar + ScrollBars.ShowHandleGrip = True + ScrollBars.Style = rbsDefault + ShowHint = True + SizeGrip = sgAuto + TabOrder = 0 + OnScroll = ImgView32Scroll + object AlphaView: TImgView32 + Left = 8 + Top = 8 + Width = 161 + Height = 145 + Scale = 1 + ScrollBars.Color = clScrollBar + ScrollBars.ShowHandleGrip = True + ScrollBars.Style = rbsDefault + SizeGrip = sgAuto + TabOrder = 2 + Visible = False + end + end + object PopupMenu: TPopupMenu + Left = 304 + Top = 28 + object ZoomInItem: TMenuItem + Caption = 'Zoom In' + OnClick = ZoomInItemClick + end + object ZoomOutItem: TMenuItem + Caption = 'Zoom Out' + OnClick = ZoomOutItemClick + end + object ActualSizeItem: TMenuItem + Caption = 'Actual Size' + OnClick = ActualSizeItemClick + end + object N1: TMenuItem + Caption = '-' + end + object RotateClockwiseItem: TMenuItem + Caption = 'Rotate Clockwise' + OnClick = RotateClockwiseItemClick + end + object RotateAntiClockwiseItem: TMenuItem + Caption = 'Rotate Anti-Clockwise' + OnClick = RotateAntiClockwiseItemClick + end + object N4: TMenuItem + Caption = '-' + end + object FlipHorizontalItem: TMenuItem + Caption = 'Flip Horizontal' + OnClick = FlipHorizontalItemClick + end + object FilpVerticalItem: TMenuItem + Caption = 'Filp Vertical' + OnClick = FilpVerticalItemClick + end + object N3: TMenuItem + Caption = '-' + end + object ShowAlphaItem: TMenuItem + Caption = 'Show Just Alpha Channel' + OnClick = ShowAlphaItemClick + end + object ShowWithAlphaItem: TMenuItem + Caption = 'Show With Alpha Channel' + OnClick = ShowWithAlphaItemClick + end + object N2: TMenuItem + Caption = '-' + end + object OpenImageItem: TMenuItem + Caption = 'Open New Image' + OnClick = OpenImageItemClick + end + end + object FilterTimer: TTimer + Interval = 500 + OnTimer = FilterTimerTimer + Left = 308 + Top = 84 + end + object OpenDialog: TOpenDialog + Filter = + 'All image files|*.bmp;*.cut;*.ico;*.iff;*.lbm;*.jng;*.jpg;*.jpeg' + + ';*.koa;*.mng;*.pbm;*.pcd;*.pcx;*.pgm;*.png;*.ppm;*.psd;*.ras;*.t' + + 'ga;*.tif;*.tiff;.wbmp;*.xbm;*.xpm)|Windows or OS/2 Bitmap File (' + + '*.BMP)|*.BMP|Dr. Halo (*.CUT)|*.CUT|Windows Icon (*.ICO)|*.ICO|A' + + 'miga IFF (*.IFF, *.LBM)|*.IFF;*.LBM|JPEG Network Graphics (*.JNG' + + ')|*.JNG|Independent JPEG Group (*.JPG)|*.JPG|Commodore 64 Koala ' + + '(*.KOA)|*.KOA|Multiple Network Graphics (*.MNG)|*.MNG|Portable B' + + 'itmap (*.PBM)|*.PBM|Kodak PhotoCD (*.PCD)|*.PCD|PCX bitmap forma' + + 't (*.PCX)|*.PCX|Portable Graymap (*.PGM)|*.PGM|Portable Network ' + + 'Graphics (*.PNG)|*.PNG|Portable Pixelmap (*.PPM)|*.PPM|Photoshop' + + ' (*.PSD)|*.PSD|Sun Rasterfile (*.RAS)|*.RAS|Targa files (*.TGA)|' + + '*.TGA|Tagged Image File Format (*.TIF)|*.TIF;*.TIFF|Wireless Bit' + + 'map (*.WBMP)|*.WBMP|X11 Bitmap Format (*.XBM)|*.XBM|X11 Pixmap F' + + 'ormat (*.XPM)|*.XPM' + Title = 'Open Image File' + Left = 328 + Top = 228 + end +end diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/MainFrm.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/MainFrm.pas new file mode 100644 index 0000000..1db403a --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/MainFrm.pas @@ -0,0 +1,524 @@ +unit MainFrm; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, Menus, ExtCtrls, Math, GR32, GR32_Image, GR32_Transforms, + ExtDlgs; + +type + TMainForm = class(TForm) + PopupMenu: TPopupMenu; + ZoomInItem: TMenuItem; + ZoomOutItem: TMenuItem; + ActualSizeItem: TMenuItem; + ImgView32: TImgView32; + N1: TMenuItem; + AlphaView: TImgView32; + ShowAlphaItem: TMenuItem; + RotateClockwiseItem: TMenuItem; + RotateAntiClockwiseItem: TMenuItem; + N3: TMenuItem; + ShowWithAlphaItem: TMenuItem; + N4: TMenuItem; + FlipHorizontalItem: TMenuItem; + FilpVerticalItem: TMenuItem; + FilterTimer: TTimer; + OpenImageItem: TMenuItem; + N2: TMenuItem; + OpenDialog: TOpenDialog; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure ZoomInItemClick(Sender: TObject); + procedure ZoomOutItemClick(Sender: TObject); + procedure ActualSizeItemClick(Sender: TObject); + procedure ScrollBoxMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); + procedure FormKeyUp(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure ShowAlphaItemClick(Sender: TObject); + procedure RotateClockwiseItemClick(Sender: TObject); + procedure RotateAntiClockwiseItemClick(Sender: TObject); + procedure ShowWithAlphaItemClick(Sender: TObject); + procedure FlipHorizontalItemClick(Sender: TObject); + procedure FilpVerticalItemClick(Sender: TObject); + procedure FilterTimerTimer(Sender: TObject); + procedure ImgView32Scroll(Sender: TObject); + procedure OpenImageItemClick(Sender: TObject); + private + { Private declarations } + OrigWidth : integer; + OrigHeight : integer; + BPP : longword; + + procedure LoadImage( Name : string); + procedure RecalcWindowSize; + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +uses FreeImage, GR32_Resamplers; + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +procedure TMainForm.FormCreate(Sender: TObject); +begin + AlphaView.Visible := False; + AlphaView.Align := alClient; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.FormDestroy(Sender: TObject); +begin + // ... +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.FormShow(Sender: TObject); +var + Resampler: TKernelResampler; +begin + Resampler := TKernelResampler.Create(ImgView32.Bitmap); + Resampler.Kernel := TSplineKernel.Create; + if ParamCount = 1 then + LoadImage(ParamStr(1)); +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.LoadImage( Name : string); +var + dib : PFIBITMAP; + PBH : PBITMAPINFOHEADER; + PBI : PBITMAPINFO; + t : FREE_IMAGE_FORMAT; + Ext : string; + BM : TBitmap; + x, y : integer; + BP : PLONGWORD; + DC : HDC; +begin + try + t := FreeImage_GetFileType(PAnsiChar(AnsiString(Name)), 16); + + if t = FIF_UNKNOWN then + begin + // Check for types not supported by GetFileType + Ext := UpperCase(ExtractFileExt(Name)); + if (Ext = '.TGA') or(Ext = '.TARGA') then + t := FIF_TARGA + else if Ext = '.MNG' then + t := FIF_MNG + else if Ext = '.PCD' then + t := FIF_PCD + else if Ext = '.WBMP' then + t := FIF_WBMP + else if Ext = '.CUT' then + t := FIF_CUT + else + raise Exception.Create('The file "' + Name + '" cannot be displayed because SFM does not recognise the file type.'); + end; + + dib := FreeImage_Load(t, PAnsiChar(AnsiString(name)), 0); + if Dib = nil then + Close; + PBH := FreeImage_GetInfoHeader(dib); + PBI := FreeImage_GetInfo(dib); + + BPP := FreeImage_GetBPP(dib); + + ShowWithAlphaItem.Enabled := BPP = 32; + ShowAlphaItem.Enabled := BPP = 32; + + if BPP = 32 then + begin + ImgView32.Bitmap.SetSize(FreeImage_GetWidth(dib), FreeImage_GetHeight(dib)); + + BP := PLONGWORD(FreeImage_GetBits(dib)); + for y := ImgView32.Bitmap.Height - 1 downto 0 do + for x := 0 to ImgView32.Bitmap.Width - 1 do + begin + ImgView32.Bitmap.Pixel[x, y] := BP^; + inc(BP); + end; + end + else + begin + BM := TBitmap.Create; + + BM.Assign(nil); + DC := GetDC(Handle); + + BM.handle := CreateDIBitmap(DC, + PBH^, + CBM_INIT, + PChar(FreeImage_GetBits(dib)), + PBI^, + DIB_RGB_COLORS); + + ImgView32.Bitmap.Assign(BM); + AlphaView.Bitmap.Assign(BM); + + BM.Free; + ReleaseDC(Handle, DC); + end; + FreeImage_Unload(dib); + + OrigWidth := ImgView32.Bitmap.Width; + OrigHeight := ImgView32.Bitmap.Height; + + Caption := ExtractFileName( Name ) + ' (' + IntToStr(OrigWidth) + + ' x ' + IntToStr(OrigHeight) + ')'; + if BPP = 32 then + Caption := Caption + ' + Alpha'; + + AlphaView.Bitmap.SetSize(OrigWidth, OrigWidth); + + ImgView32.Hint := 'Name: ' + Name + #13 + + 'Width: ' + IntToStr(OrigWidth) + #13 + + 'Height: ' + IntToStr(OrigHeight) + #13 + + 'BPP: ' + IntToStr(BPP); + + RecalcWindowSize; + + Show; + except + on e:exception do + begin + Application.BringToFront; + MessageDlg(e.message, mtInformation, [mbOK], 0); + Close; + end; + end; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ZoomInItemClick(Sender: TObject); +begin + FilterTimer.Enabled := False; + if not (ImgView32.Bitmap.Resampler is TNearestResampler) then + TNearestResampler.Create(ImgView32.Bitmap); + FilterTimer.Enabled := True; + + ImgView32.Scale := ImgView32.Scale * 2.0; + RecalcWindowSize; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ZoomOutItemClick(Sender: TObject); +begin + FilterTimer.Enabled := False; + if not (ImgView32.Bitmap.Resampler is TNearestResampler) then + TNearestResampler.Create(ImgView32.Bitmap); + FilterTimer.Enabled := True; + + ImgView32.Scale := ImgView32.Scale / 2.0; + RecalcWindowSize; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ActualSizeItemClick(Sender: TObject); +begin + FilterTimer.Enabled := False; + if not (ImgView32.Bitmap.Resampler is TNearestResampler) then + TNearestResampler.Create(ImgView32.Bitmap); + FilterTimer.Enabled := True; + + ImgView32.Scale := 1.0; + + RecalcWindowSize; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.RecalcWindowSize; +var + Rect : TRect; + CW, CH : integer; + WSH, WSW : integer; + TitleH : integer; + BorderY : integer; + BorderX : integer; +begin + CW := ImgView32.Bitmap.Width + GetSystemMetrics(SM_CXVSCROLL); + CH := ImgView32.Bitmap.Height + GetSystemMetrics(SM_CYVSCROLL); + + SystemParametersInfo( SPI_GETWORKAREA, 0, @Rect, 0); + + WSH := Rect.Bottom - Rect.Top; + WSW := Rect.Right - Rect.Left; + TitleH := GetSystemMetrics(SM_CYCAPTION); + BorderY := GetSystemMetrics(SM_CYSIZEFRAME) * 2; + BorderX := GetSystemMetrics(SM_CXSIZEFRAME) * 2; + + if (Top + CH + TitleH + BorderY > WSH) or (CH + TitleH + BorderY > WSH) then + begin + Top := Rect.Bottom - CH - BorderY; + if Top < 0 then + begin + Top := 0; + CH := WSH - TitleH - BorderY; + CW := CW + GetSystemMetrics(SM_CXVSCROLL); + + if CW + BorderX > WSW then + CH := CH - GetSystemMetrics(SM_CYVSCROLL); + end; + end; + + if (Left + CW + BorderX > WSW) or (CW + BorderX > WSW) then + begin + Left := Rect.Right - CW - BorderX; + if Left < 0 then + begin + Left := 0; + CW := WSW - BorderX; + CH := CH + GetSystemMetrics(SM_CYVSCROLL); + + if CH + TitleH + BorderY > WSH then + CW := CW + GetSystemMetrics(SM_CXVSCROLL); + end + end; + + ClientWidth := CW; + ClientHeight := CH; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ScrollBoxMouseWheel(Sender: TObject; + Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; + var Handled: Boolean); +begin + FilterTimer.Enabled := False; + if not (ImgView32.Bitmap.Resampler is TNearestResampler) then + TNearestResampler.Create(ImgView32.Bitmap); + FilterTimer.Enabled := True; + + if WheelDelta < 0 then + ImgView32.Scroll(0, 20) + else + ImgView32.Scroll(0, -20); + Handled := True; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + Amount : integer; +begin + FilterTimer.Enabled := False; + if not (ImgView32.Bitmap.Resampler is TNearestResampler) then + TNearestResampler.Create(ImgView32.Bitmap); + FilterTimer.Enabled := True; + + if ssShift in Shift then + Amount := 20 * 2 + else + Amount := 20; + + case Key of + VK_ESCAPE: + Close; + VK_UP: + ImgView32.Scroll(0, -Amount); + VK_DOWN: + ImgView32.Scroll(0, Amount); + VK_LEFT: + ImgView32.Scroll(-Amount, 0); + VK_RIGHT: + ImgView32.Scroll(Amount, 0); + VK_HOME: + ImgView32.ScrollToCenter(0, 0); + VK_END: + ImgView32.ScrollToCenter(ImgView32.Bitmap.Width, ImgView32.Bitmap.Height); + VK_NEXT: + ImgView32.Scroll(0, (Trunc(ImgView32.Bitmap.Height div 4))); + VK_PRIOR: + ImgView32.Scroll(0, -(Trunc(ImgView32.Bitmap.Height div 4))); + end; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ShowAlphaItemClick(Sender: TObject); +var + x, y : integer; + Col : TColor32; + Alpha : TColor; +begin + if ShowAlphaItem.Checked then + begin + AlphaView.Visible := False; + AlphaView.Bitmap.Delete; + end + else + begin + AlphaView.Bitmap.Width := ImgView32.Bitmap.Width; + AlphaView.Bitmap.Height := ImgView32.Bitmap.Height; + + for x := 0 to AlphaView.Bitmap.Width - 1 do + for y := 0 to AlphaView.Bitmap.Height - 1 do + begin + Col := ImgView32.Bitmap.Pixel[x, y]; + Alpha := Col shr 24; + AlphaView.Bitmap.Pixel[x, y] := Alpha + (Alpha shl 8) + (Alpha shl 16); + end; + AlphaView.Visible := True; + end; + ShowAlphaItem.Checked := not ShowAlphaItem.Checked; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.RotateClockwiseItemClick(Sender: TObject); +var + x : integer; + y : integer; + DestX : integer; + DestY : integer; + C : TColor32; +begin + AlphaView.Bitmap.Assign(ImgView32.Bitmap); + + ImgView32.BeginUpdate; + ImgView32.Bitmap.Width := AlphaView.Bitmap.Height; + ImgView32.Bitmap.Height := AlphaView.Bitmap.Width; + + for x := 0 to AlphaView.Bitmap.Width - 1 do + for y := 0 to AlphaView.Bitmap.Height - 1 do + begin + C := AlphaView.Bitmap.Pixel[x, y]; + + DestX := (ImgView32.Bitmap.Width - 1) - Y; + DestY := X; + + ImgView32.Bitmap.Pixels[DestX, DestY] := C; + end; + + ImgView32.EndUpdate; + ImgView32.Refresh; +end; + +// ----------------------------------------------------------------------------- +procedure TMainForm.RotateAntiClockwiseItemClick(Sender: TObject); +var + x : integer; + y : integer; + DestX : integer; + DestY : integer; + C : TColor32; +begin + AlphaView.Bitmap.Assign(ImgView32.Bitmap); + + ImgView32.BeginUpdate; + ImgView32.Bitmap.Width := AlphaView.Bitmap.Height; + ImgView32.Bitmap.Height := AlphaView.Bitmap.Width; + + for x := 0 to AlphaView.Bitmap.Width - 1 do + for y := 0 to AlphaView.Bitmap.Height - 1 do + begin + C := AlphaView.Bitmap.Pixel[x, y]; + + DestX := Y; + DestY := (ImgView32.Bitmap.Height - 1) -X; + + ImgView32.Bitmap.Pixels[DestX, DestY] := C; + end; + + ImgView32.EndUpdate; + ImgView32.Refresh; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ShowWithAlphaItemClick(Sender: TObject); +begin + if ShowWithAlphaItem.Checked then + ImgView32.Bitmap.DrawMode := dmOpaque + else + ImgView32.Bitmap.DrawMode := dmBlend; + ShowWithAlphaItem.Checked := not ShowWithAlphaItem.Checked; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.FlipHorizontalItemClick(Sender: TObject); +var + x : integer; + y : integer; + DestX : integer; + DestY : integer; + C : TColor32; +begin + AlphaView.Bitmap.Assign(ImgView32.Bitmap); + + ImgView32.BeginUpdate; + ImgView32.Bitmap.Width := AlphaView.Bitmap.Width; + ImgView32.Bitmap.Height := AlphaView.Bitmap.Height; + + for x := 0 to AlphaView.Bitmap.Width - 1 do + for y := 0 to AlphaView.Bitmap.Height - 1 do + begin + C := AlphaView.Bitmap.Pixel[x, y]; + + DestX := (ImgView32.Bitmap.Width - 1) -X; + DestY := Y; + + ImgView32.Bitmap.Pixels[DestX, DestY] := C; + end; + + ImgView32.EndUpdate; + ImgView32.Refresh; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.FilpVerticalItemClick(Sender: TObject); +var + x : integer; + y : integer; + DestX : integer; + DestY : integer; + C : TColor32; +begin + AlphaView.Bitmap.Assign(ImgView32.Bitmap); + + ImgView32.BeginUpdate; + ImgView32.Bitmap.Width := AlphaView.Bitmap.Width; + ImgView32.Bitmap.Height := AlphaView.Bitmap.Height; + + for x := 0 to AlphaView.Bitmap.Width - 1 do + for y := 0 to AlphaView.Bitmap.Height - 1 do + begin + C := AlphaView.Bitmap.Pixel[x, y]; + + DestX := X; + DestY := (ImgView32.Bitmap.Height - 1) - Y; + + ImgView32.Bitmap.Pixels[DestX, DestY] := C; + end; + + ImgView32.EndUpdate; + ImgView32.Refresh; +end; + +// ----------------------------------------------------------------------------- +procedure TMainForm.FilterTimerTimer(Sender: TObject); +var + Resampler: TKernelResampler; +begin + FilterTimer.Enabled := False; + Resampler := TKernelResampler.Create(ImgView32.Bitmap); + Resampler.Kernel := TSplineKernel.Create; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.ImgView32Scroll(Sender: TObject); +begin + FilterTimer.Enabled := False; + if not (ImgView32.Bitmap.Resampler is TNearestResampler) then + TNearestResampler.Create(ImgView32.Bitmap); + FilterTimer.Enabled := True; +end; +// ----------------------------------------------------------------------------- +procedure TMainForm.OpenImageItemClick(Sender: TObject); +begin + if OpenDialog.Execute then + begin + try + Screen.Cursor := crHourGlass; + LoadImage(OpenDialog.FileName); + finally + Screen.Cursor := crDefault; + end; + end; +end; + +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/Readme.txt b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/Readme.txt new file mode 100644 index 0000000..f7f1a7d --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/Readme.txt @@ -0,0 +1,8 @@ +This is a simple image viewing application that uses the FreeImage library to display images in many different formats. + +The app displays the image whose name is passed in as a command line argument. + + +To compile the app you will also need the Graphics32 library available from www.g32.org. It has been tested with version 1.5.1 of Graphics32. + +SJB. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/Tiger.jpg b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/Tiger.jpg new file mode 100644 index 0000000..c152073 Binary files /dev/null and b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/ImagePreview/Tiger.jpg differ diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.dpr b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.dpr new file mode 100644 index 0000000..f435c14 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.dpr @@ -0,0 +1,13 @@ +program MultiBitmap; + +uses + Forms, + mbMainForm in 'mbMainForm.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.res b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.res new file mode 100644 index 0000000..1228533 Binary files /dev/null and b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.res differ diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.stat b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.stat new file mode 100644 index 0000000..6e11772 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/MultiBitmap.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=82 +DesignerSecs=5 +InspectorSecs=1 +CompileSecs=850 +OtherSecs=5 +StartTime=20.12.2004 11:40:22 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=19 diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/mbMainForm.dfm b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/mbMainForm.dfm new file mode 100644 index 0000000..5029ce7 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/mbMainForm.dfm @@ -0,0 +1,89 @@ +object MainForm: TMainForm + Left = 203 + Top = 192 + Width = 696 + Height = 480 + Caption = 'MultiBitmap Demo' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Shell Dlg 2' + Font.Style = [] + OldCreateOrder = False + OnPaint = FormPaint + OnResize = FormResize + PixelsPerInch = 96 + TextHeight = 13 + object ToolBar: TToolBar + Left = 0 + Top = 0 + Width = 688 + Height = 25 + AutoSize = True + ButtonHeight = 21 + ButtonWidth = 33 + Caption = 'ToolBar' + EdgeBorders = [ebLeft, ebTop, ebRight, ebBottom] + Flat = True + Indent = 3 + ShowCaptions = True + TabOrder = 0 + object tbLoad: TToolButton + Left = 3 + Top = 0 + Caption = 'Load' + ImageIndex = 0 + OnClick = tbLoadClick + end + object ToolButton1: TToolButton + Left = 36 + Top = 0 + Width = 8 + Caption = 'ToolButton1' + ImageIndex = 1 + Style = tbsSeparator + end + object tbClose: TToolButton + Left = 44 + Top = 0 + Caption = 'Close' + ImageIndex = 1 + OnClick = tbCloseClick + end + object ToolButton2: TToolButton + Left = 77 + Top = 0 + Width = 8 + Caption = 'ToolButton2' + ImageIndex = 2 + Style = tbsSeparator + end + object Label1: TLabel + Left = 85 + Top = 0 + Width = 36 + Height = 21 + Caption = 'Pages: ' + Layout = tlCenter + end + object cbPages: TComboBox + Left = 121 + Top = 0 + Width = 60 + Height = 21 + Style = csDropDownList + DropDownCount = 15 + ItemHeight = 13 + TabOrder = 0 + OnChange = cbPagesChange + end + end + object OD: TOpenDialog + Filter = 'TIFF multibitmap (*.tiff, *.tif)|*.tiff; *.tif|ICO|*.ico' + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Title = 'Open multibitmap..' + Left = 64 + Top = 96 + end +end diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/mbMainForm.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/mbMainForm.pas new file mode 100644 index 0000000..07fd997 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/MultiBitmap/mbMainForm.pas @@ -0,0 +1,150 @@ +unit mbMainForm; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, ComCtrls, ToolWin, StdCtrls, FreeBitmap; + +type + TMainForm = class(TForm) + ToolBar: TToolBar; + tbLoad: TToolButton; + ToolButton1: TToolButton; + tbClose: TToolButton; + ToolButton2: TToolButton; + cbPages: TComboBox; + Label1: TLabel; + OD: TOpenDialog; + procedure tbLoadClick(Sender: TObject); + procedure FormPaint(Sender: TObject); + procedure tbCloseClick(Sender: TObject); + procedure cbPagesChange(Sender: TObject); + procedure FormResize(Sender: TObject); + private + FMultiBitmap: TFreeMultiBitmap; + FPage: TFreeWinBitmap; + + procedure PageBitmapChangeHandler(Sender: TObject); + procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + + procedure OpenMultiBitmap(const FileName: string); + procedure CloseMultiBitmap; + procedure OpenPage(Number: Integer); + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +{ TMainForm } + +procedure TMainForm.CloseMultiBitmap; +begin + if FPage.IsValid then + FMultiBitmap.UnlockPage(Fpage, False); + FMultiBitmap.Close; + cbPages.Clear; +end; + +constructor TMainForm.Create(AOwner: TComponent); +begin + inherited; + FMultiBitmap := TFreeMultiBitmap.Create; + FPage := TFreeWinBitmap.Create; + FPage.OnChange := PageBitmapChangeHandler; +end; + +destructor TMainForm.Destroy; +begin + if FMultiBitmap.IsValid then + CloseMultiBitmap; + FMultiBitmap.Free; + inherited; +end; + +procedure TMainForm.OpenMultiBitmap(const FileName: string); +var + I, Cnt: Integer; +begin + if FMultiBitmap.IsValid then CloseMultiBitmap; + + FMultiBitmap.Open(FileName, False, True); + + Cnt := FMultiBitmap.GetPageCount; + cbPages.OnChange := nil; + cbPages.Clear; + for I := 0 to Cnt - 1 do + cbPages.Items.Add(IntToStr(I)); + cbPages.OnChange := cbPagesChange; +end; + +procedure TMainForm.OpenPage(Number: Integer); +begin + if not FMultiBitmap.IsValid then Exit; + + if FPage.IsValid then + FMultiBitmap.UnlockPage(FPage, False); + + FMultiBitmap.LockPage(Number, FPage); +end; + +procedure TMainForm.PageBitmapChangeHandler(Sender: TObject); +begin + Invalidate; +end; + +procedure TMainForm.tbLoadClick(Sender: TObject); +begin + if OD.Execute then + begin + try + OpenMultiBitmap(OD.FileName); + except + raise Exception.CreateFmt('Can not load file %s', [OD.FileName]); + end; + end; +end; + +procedure TMainForm.WMEraseBkgnd(var Message: TWMEraseBkgnd); +begin + Message.Result := 1; +end; + +procedure TMainForm.FormPaint(Sender: TObject); +begin + if not FPage.IsValid then + begin + Canvas.Brush.Color := clBtnFace; + Canvas.FillRect(ClientRect); + end + else + FPage.Draw(Canvas.Handle, ClientRect); +end; + +procedure TMainForm.tbCloseClick(Sender: TObject); +begin + if FMultiBitmap.IsValid then + CloseMultiBitmap; +end; + +procedure TMainForm.cbPagesChange(Sender: TObject); +var + Page: Integer; +begin + Page := StrToInt(cbPages.Text); + OpenPage(Page); +end; + +procedure TMainForm.FormResize(Sender: TObject); +begin + Invalidate; +end; + +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/TargaUnit/Readme.txt b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/TargaUnit/Readme.txt new file mode 100644 index 0000000..280c6d2 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/TargaUnit/Readme.txt @@ -0,0 +1,22 @@ +TargaImage.pas is a TGraphic descendant for Delphi. Installing it +will allow Delphi TImage and TDBImage components to read Targa files +just like BMP & WMF files with no coding on your part. + +It also adds the TGA file type to the Delphi Open/Save Picture dialog +boxes. + +To install this unit, place it in your one of your library folders +and make it available to all your Delphi projects by using +Component>Install Component from the Delphi menus. + +NOTE: any Delphi applications using this *must* have FreeImage.dll +installed in your application's folder, or somewhere in the path. + +----------------------- + +Tommy +Edinburgh, Scotland +LeTene@battlefieldeurope.org + + + diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/TargaUnit/TargaImage.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/TargaUnit/TargaImage.pas new file mode 100644 index 0000000..3badc60 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/TargaUnit/TargaImage.pas @@ -0,0 +1,212 @@ +unit TargaImage; + +// ========================================================== +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// +// ========================================================== + +interface + +uses + Windows, + Classes, + FreeImage, + Graphics, + Types; + +type + TTargaImage = class(TGraphic) + private + fImage: PFIBITMAP; + fWidth: Integer; + fHeight: Integer; + protected + procedure Draw(ACanvas: TCanvas; const ARect: TRect); override; + function GetEmpty: Boolean; override; + function GetHeight: Integer; override; + function GetWidth: Integer; override; + procedure SetHeight(Value: Integer); override; + procedure SetWidth(Value: Integer); override; + public + constructor Create; override; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + procedure LoadFromClipboardFormat(AFormat: Word; AData: THandle; APalette: HPALETTE); override; + procedure LoadFromStream(Stream: TStream); override; + procedure SaveToClipboardFormat(var AFormat: Word; var AData: THandle; var APalette: HPALETTE); override; + procedure SaveToStream(Stream: TStream); override; + end; + + procedure Register; + +implementation + +{ Design-time registration } + +procedure Register; +begin + TPicture.RegisterFileFormat('tga', 'TARGA Files', TTargaImage); +end; + +{ IO functions } + +function FI_ReadProc(buffer : pointer; size : Cardinal; count : Cardinal; handle : fi_handle) : UInt; stdcall; +var + stream: TStream; + bytesToRead: Cardinal; +begin + stream := TStream(handle); + bytesToRead := size*count; + Result := stream.Read(buffer^, bytesToRead); +end; + +function FI_WriteProc(buffer : pointer; size, count : Cardinal; handle : fi_handle) : UInt; stdcall; +var + stream: TStream; + bytesToWrite: Cardinal; +begin + stream := TStream(handle); + bytesToWrite := size*count; + Result := stream.Write(buffer^, bytesToWrite); +end; + +function FI_SeekProc(handle : fi_handle; offset : longint; origin : integer) : Integer; stdcall; +begin + TStream(handle).Seek(offset, origin); + Result := 0; +end; + +function FI_TellProc(handle : fi_handle) : LongInt; stdcall; +begin + Result := TStream(handle).Position; +end; + +{ TTargaImage } + +constructor TTargaImage.Create; +begin + fImage := nil; + fWidth := 0; + fHeight := 0; + inherited; +end; + +destructor TTargaImage.Destroy; +begin + if Assigned(fImage) then + FreeImage_Unload(fImage); + inherited; +end; + +procedure TTargaImage.Assign(Source: TPersistent); +begin + if Source is TTargaImage then begin + fImage := FreeImage_Clone(TTargaImage(Source).fImage); + fWidth := FreeImage_GetWidth(fImage); + fHeight := FreeImage_GetHeight(fImage); + Changed(Self); + end else + inherited; +end; + +procedure TTargaImage.Draw(ACanvas: TCanvas; const ARect: TRect); +var + pbi: PBitmapInfo; +begin + if Assigned(fImage) then begin + pbi := FreeImage_GetInfo(fImage); + SetStretchBltMode(ACanvas.Handle, COLORONCOLOR); + StretchDIBits(ACanvas.Handle, ARect.left, ARect.top, + ARect.right-ARect.left, ARect.bottom-ARect.top, + 0, 0, fWidth, fHeight, + FreeImage_GetBits(fImage), pbi^, DIB_RGB_COLORS, SRCCOPY); + end; +end; + +function TTargaImage.GetEmpty: Boolean; +begin + Result := Assigned(fImage); +end; + +function TTargaImage.GetHeight: Integer; +begin + Result := fHeight; +end; + +function TTargaImage.GetWidth: Integer; +begin + Result := fWidth; +end; + +procedure TTargaImage.LoadFromClipboardFormat(AFormat: Word; AData: THandle; APalette: HPALETTE); +begin + if Assigned(fImage) then begin + end; +end; + +procedure TTargaImage.LoadFromStream(Stream: TStream); +var + io: FreeImageIO; +begin + with io do begin + read_proc := FI_ReadProc; + write_proc := FI_WriteProc; + seek_proc := FI_SeekProc; + tell_proc := FI_TellProc; + end; + fImage := FreeImage_LoadFromHandle(FIF_TARGA, @io, Stream); + if Assigned(fImage) then begin + fWidth := FreeImage_GetWidth(fImage); + fHeight := FreeImage_GetHeight(fImage); + end; +end; + +procedure TTargaImage.SaveToClipboardFormat(var AFormat: Word; var AData: THandle; var APalette: HPALETTE); +begin +end; + +procedure TTargaImage.SaveToStream(Stream: TStream); +var + io: FreeImageIO; +begin + with io do begin + read_proc := FI_ReadProc; + write_proc := FI_WriteProc; + seek_proc := FI_SeekProc; + tell_proc := FI_TellProc; + end; + FreeImage_SaveToHandle(FIF_TARGA, fImage, @io, Stream); +end; + +procedure TTargaImage.SetHeight(Value: Integer); +begin + if Assigned(fImage) then begin + fHeight := Value; + FreeImage_Rescale(fImage, fWidth, fHeight, FILTER_BICUBIC); + end; +end; + +procedure TTargaImage.SetWidth(Value: Integer); +begin + if Assigned(fImage) then begin + fWidth := Value; + FreeImage_Rescale(fImage, fWidth, fHeight, FILTER_BICUBIC); + end; +end; + +initialization + TPicture.RegisterFileFormat('tga', 'TARGA Files', TTargaImage); +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainDemo.dpr b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainDemo.dpr new file mode 100644 index 0000000..b8ffadd --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainDemo.dpr @@ -0,0 +1,13 @@ +program MainDemo; + +uses + Forms, + MainForm in 'MainForm.pas' {fwbMainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfwbMainForm, fwbMainForm); + Application.Run; +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainDemo.res b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainDemo.res new file mode 100644 index 0000000..1228533 Binary files /dev/null and b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainDemo.res differ diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainForm.dfm b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainForm.dfm new file mode 100644 index 0000000..46d690b --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainForm.dfm @@ -0,0 +1,607 @@ +object fwbMainForm: TfwbMainForm + Left = 205 + Top = 206 + Width = 696 + Height = 480 + Caption = 'FreeWinBitmap - MainDemo' + Color = clCaptionText + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + Menu = MainMenu + OldCreateOrder = False + ShowHint = True + OnCreate = FormCreate + OnDestroy = FormDestroy + OnPaint = FormPaint + OnResize = FormResize + PixelsPerInch = 96 + TextHeight = 13 + object StatusBar: TStatusBar + Left = 0 + Top = 411 + Width = 688 + Height = 23 + Panels = < + item + Alignment = taCenter + Width = 120 + end + item + Alignment = taCenter + Width = 80 + end + item + Width = 50 + end> + end + object tbTools: TToolBar + Left = 0 + Top = 0 + Width = 688 + Height = 29 + Caption = 'ToolBar' + Color = clBtnFace + EdgeBorders = [ebTop, ebBottom] + Flat = True + Images = ImageList1 + ParentColor = False + TabOrder = 1 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Width = 8 + Caption = 'ToolButton1' + ImageIndex = 1 + Style = tbsSeparator + end + object btnOpen: TToolButton + Left = 8 + Top = 0 + Hint = 'Open image file...' + Caption = 'Open...' + ImageIndex = 0 + OnClick = mnuFileOpenClick + end + object ToolButton4: TToolButton + Left = 31 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 4 + Style = tbsSeparator + end + object btnCopy: TToolButton + Left = 39 + Top = 0 + Hint = 'Copy to clipboard' + Caption = 'Copy' + ImageIndex = 1 + OnClick = btnCopyClick + end + object btnPaste: TToolButton + Left = 62 + Top = 0 + Hint = 'Paste from from clipboard' + Caption = 'Paste' + ImageIndex = 2 + OnClick = btnPasteClick + end + object ToolButton3: TToolButton + Left = 85 + Top = 0 + Width = 8 + Caption = 'ToolButton3' + ImageIndex = 4 + Style = tbsSeparator + end + object btnClear: TToolButton + Left = 93 + Top = 0 + Caption = 'Clear' + ImageIndex = 3 + OnClick = btnClearClick + end + end + object MainMenu: TMainMenu + Left = 120 + Top = 48 + object mnuFile: TMenuItem + Caption = '&File' + object mnuFileOpen: TMenuItem + Caption = '&Open' + OnClick = mnuFileOpenClick + end + object mnuExit: TMenuItem + Caption = 'E&xit' + OnClick = mnuExitClick + end + end + object mnuImage: TMenuItem + Caption = 'Image' + object mnuImageFlip: TMenuItem + Caption = 'Flip' + object mnuFlipHorz: TMenuItem + Caption = 'Horizontal' + OnClick = mnuFlipHorzClick + end + object mnuFlipVert: TMenuItem + Caption = 'Vertical' + OnClick = mnuFlipHorzClick + end + end + object mnuConvert: TMenuItem + Caption = 'Convert' + object mnuTo4Bits: TMenuItem + Caption = 'To 4 Bits' + OnClick = mnuFlipHorzClick + end + object mnuTo8Bits: TMenuItem + Caption = 'To 8 Bits' + OnClick = mnuFlipHorzClick + end + object mnuTo16Bits555: TMenuItem + Caption = 'To 16 Bits (555)' + OnClick = mnuFlipHorzClick + end + object mnuTo16Bits565: TMenuItem + Caption = 'To 16 Bits (565)' + OnClick = mnuFlipHorzClick + end + object mnuTo24Bits: TMenuItem + Caption = 'To 24 Bits' + OnClick = mnuFlipHorzClick + end + object mnuTo32Bits: TMenuItem + Caption = 'To 32 Bits' + OnClick = mnuFlipHorzClick + end + object mnuDither: TMenuItem + Caption = 'Dither' + OnClick = mnuFlipHorzClick + end + object mnuQuantize: TMenuItem + Caption = 'Quantize' + OnClick = mnuFlipHorzClick + end + object mnuGrayScale: TMenuItem + Caption = 'GrayScale' + OnClick = mnuFlipHorzClick + end + end + object mnuRotate: TMenuItem + Caption = 'Rotate' + object mnuClockwise: TMenuItem + Caption = 'Clockwise' + OnClick = mnuFlipHorzClick + end + object mnuAntiClockwise: TMenuItem + Caption = 'AntiClockwise' + OnClick = mnuFlipHorzClick + end + end + object mnuInvert: TMenuItem + Caption = 'Invert' + OnClick = mnuFlipHorzClick + end + object mnuClear: TMenuItem + Caption = 'Clear' + OnClick = mnuFlipHorzClick + end + end + end + object OD: TOpenDialog + Title = 'Open file ...' + Left = 152 + Top = 48 + end + object ImageList1: TImageList + Left = 184 + Top = 48 + Bitmap = { + 494C010104000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000003000000001002000000000000030 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007088900060809000607880005070 + 8000506070004058600040485000303840002030300020203000101820001010 + 1000101020000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080685000203040002030400020304000203040002030 + 4000203040002030400020304000203040000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DFE2F700EFF0FB0000000000000000007088900090A0B00070B0D0000090 + D0000090D0000090D0000090C0001088C0001080B0001080B0002078A0002070 + 900020486000B9BEBE0000000000000000000000000000000000000000000000 + 00000000000000000000C0704000B0583000B0583000A0502000A05020009048 + 2000904820009040200080402000000000007086900060809000506070004050 + 6000304050002030400090706000F0E0D000B0A09000B0A09000B0A09000B0A0 + 9000B0A09000B0A09000B0A0900020304000000000000000000000000000EFF1 + FF001F3BF100EFF1FF000000000000000000000000000000000000000000CFD3 + F3001F2DB900CFD2F30000000000000000008088900080C0D00090A8B00080E0 + FF0060D0FF0050C8FF0050C8FF0040C0F00030B0F00030A8F00020A0E0001090 + D00020688000656A700000000000000000000000000000000000000000000000 + 00000000000000000000C0785000FFF8F000D0B0A000D0B0A000D0B0A000C0B0 + A000C0A8A000C0A8900090402000000000007080900020B8F0000090D0000090 + D0000090D0000090D00090786000F0E8E000F0D8D000E0D0C000E0C8C000D0C0 + B000D0B8B000D0B8B000B0A09000203040000000000000000000F0F2FF00576F + FF001030FF001E34FF00EFF1FF00000000000000000000000000DFE2F7003F51 + CF000018C0000F1EB400DFE2F700000000008090A00080D0F00090A8B00090C0 + D00070D8FF0060D0FF0060D0FF0050C8FF0050C0FF0040B8F00030B0F00030A8 + F0001088D00020486000E1E4E500000000000000000000000000000000000000 + 00000000000000000000D0886000FFFFFF00E0906000D0805000D0805000D080 + 5000D0805000C0A8A00090482000000000007088900070C8F00010B8F00010B0 + F00000A8E0000098D000A0807000F0F0F000C0B0A000C0B0A000C0A8A000B0A0 + 9000D0C0B000B0A09000B0A0900020304000000000000000000000000000F1F2 + FF002D52FF001030FF000028FF00CFD5FF0000000000CFD3F3001F34C7000018 + D0000F25C300BFC5EF0000000000000000008090A00080D8F00080C8E00090A8 + B00080E0FF0070D0FF0060D8FF0060D0FF0060D0FF0050C8FF0040C0F00040B8 + F00030B0F000206880007897A50000000000B0A0900060483000604830006048 + 30006048300060483000D0907000FFFFFF00FFFFFF00FFF0F000F0E0D000F0D0 + C000F0C0B000C0B0A00090482000000000008088900070D0F00030C0F00010B8 + F00000A8F00000A0E000A0888000FFF8FF00F0F0F000F0E8E000F0D8D000E0D0 + C000705850006050400050484000404040000000000000000000000000000000 + 0000F1F2FF002D52FF001030FF000F2DFF00CFD3F6001F34D5000020E0000F25 + D200DFE2F7000000000000000000000000008098A00090E0F00090E0FF0090A8 + B00090B8C00070D8FF0060D8FF0060D8FF0060D8FF0060D0FF0050D0FF0050C8 + FF0040B8F00030A0E0004B697800DEE1E400B0A09000FFF0F000F0E0D000E0D8 + D000E0D0C000E0C8C000E0A08000FFFFFF00F0A88000E0987000E0906000D080 + 5000D0805000D0B0A000A0482000000000008090A00080D8F00040C8F00030C0 + F00010B8F00000A0E000B0908000FFFFFF00C0B0A000C0B0A000C0A8A000F0E0 + D00080605000D0C8C00060504000000000000000000000000000000000000000 + 000000000000E3E6FF005669FF001038FF000020F0000F2DF0002F42D800DFE2 + F700000000000000000000000000000000008098A00090E0F000A0E8FF0080C8 + E00090A8B00080E0FF0080E0FF0080E0FF0080E0FF0080E0FF0080E0FF0080E0 + FF0070D8FF0070D8FF0050A8D000919BA500B0A09000FFF8F000E0B08000E0A0 + 7000E0A07000D0987000E0A89000FFFFFF00FFFFFF00FFFFFF00FFF8F000F0E8 + E000F0D0C000D0B0A000A0502000000000008098A00090E0F00060D8F00050C8 + F00030C0F00010B0F000B0989000FFFFFF00FFFFFF00FFF8FF00F0F0F000F0E8 + E000806850008060500000000000000000000000000000000000000000000000 + 00000000000000000000C3CAFF002048FF001030FF000F2DF000CFD3F6000000 + 00000000000000000000000000000000000090A0A000A0E8F000A0E8FF00A0E8 + FF0090B0C00090B0C00090A8B00090A8B00080A0B00080A0B0008098A0008098 + A0008090A0008090A0008088900070889000C0A89000FFFFFF00FFF8F000F0F0 + F000F0E8E000F0E0D000E0B8A000FFFFFF00FFB09000FFB09000F0D8D000E090 + 6000B0583000B0583000A0502000000000008098A000A0E8F00080E0F00070D8 + F00050D0F00010B0F000B0A09000B0989000B0908000A0888000A08070009078 + 6000907060000000000000000000000000000000000000000000000000000000 + 000000000000CFD7FF004060FF003050FF002D4BFF001038FF000020F000DFE3 + FD000000000000000000000000000000000090A0B000A0E8F000A0F0FF00A0E8 + FF00A0E8FF0080D8FF0060D8FF0060D8FF0060D8FF0060D8FF0060D8FF0060D8 + FF0070889000000000000000000000000000C0A8A000FFFFFF00FFC8A000F0B8 + 9000E0B08000E0A07000F0C0A000FFFFFF00FFFFFF00FFFFFF00FFFFFF00F098 + 7000F0C8B000B0583000EBD5CB000000000090A0A000B0F0FF00A0E8FF0090E0 + F00070D0F00010A0D00010A0D00010A0D0001098D0000090D0000090D0000090 + D000303840000000000000000000000000000000000000000000000000000000 + 0000DBE1FF004060FF004058FF004B70FF00CFD5FF004B69FF002040FF000020 + F000CFD5FC0000000000000000000000000090A0B000A0F0F000B0F0F000A0F0 + FF00A0E8FF00A0E8FF0070D8FF0090A0A0008098A0008098A0008090A0008090 + 900070889000000000000000000000000000C0B0A000FFFFFF00FFFFFF00FFF8 + FF00FFF0F000F0E8E000F0C8B000FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0A8 + 8000C0683000EFD9CB00000000000000000090A0B000B0F0FF00A0F0FF006080 + 9000607080005070800050687000506870005060700040587000207090000090 + D00040486000000000000000000000000000000000000000000000000000E7EB + FF005070FF005078FF00708AFF00E7EBFF0000000000DBDFFF004B69FF003048 + FF000020F000CFD5FC00000000000000000090A8B000A0D0E000B0F0F000B0F0 + F000A0F0FF00A0E8FF0090A0B000B3C7CB000000000000000000000000000000 + 000000000000906850009068500090685000D0B8B000FFFFFF00FFD8C000FFD0 + B000F0E0D000B0A09000F0C8B000F0C0B000F0C0B000F0B8A000F0B09000F0B0 + 9000F7E3D70000000000000000000000000090A8B000B0F0FF00B0F0FF006088 + 900090C8D00090E8F00080D8E00060C8E0005098B000405860002080A0000090 + D000505870000000000000000000000000000000000000000000F3F5FF006078 + FF006078FF00697FFF00F3F5FF00000000000000000000000000E7EAFF004B69 + FF003050FF000028FF00DFE3FD0000000000DCE3E60090A8B00090A8B00090A8 + B00090A8B00090A8B000AAB3B400000000000000000000000000000000000000 + 000000000000E1D4D2009068500090685000D0C0B000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00C0A89000D0C8C00090706000E1DCD80000000000000000000000 + 00000000000000000000000000000000000090A8B000B0F0F000B0F0FF00A0F0 + F0007098A000A0F0F00060757C0080C8D000507080003060800060C0F00020B8 + F00050607000000000000000000000000000000000000000000000000000E7EB + FF006987FF00F3F5FF000000000000000000000000000000000000000000E7EA + FF005773FF00E1E5FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000090786000B7A498000000 + 0000F9F6F600A0908000E1D9D20090786000E0C0B000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00C0B0A000A0806000E1DCD8000000000000000000000000000000 + 000000000000000000000000000000000000CED8DC0090A8B00090A8B00090A8 + B0006090A000A0E8F000A0E8F00090D8E0004068700070889000808890007088 + 9000D7DADC000000000000000000000000000000000000000000000000000000 + 0000F3F5FF000000000000000000000000000000000000000000000000000000 + 0000E7EAFF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000D1CFC900A0908000A088 + 8000B0988000CFC7BF000000000000000000E0C0B000E0C0B000D0C0B000D0C0 + B000D0B8B000D0B0A000E6DEDC00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000080B0C00080B0C00080A0B000DEE1E40000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000300000000100010000000000800100000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFF0007FFFFFC00FFF3 + 0003FC010000E3E30003FC010000C1C10001FC010000E083000100010000F007 + 000000010001F80F000000010003FC1F000000010007F80F000700010007F007 + 000700030007E08300F800070007C1C101F8007F0007E3E3FF9000FF0007F7F7 + FF8301FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainForm.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainForm.pas new file mode 100644 index 0000000..41b038b --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/demo/WinBitmap/MainForm.pas @@ -0,0 +1,227 @@ +unit MainForm; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, Menus, FreeBitmap, ComCtrls, ImgList, ToolWin; + +type + TfwbMainForm = class(TForm) + MainMenu: TMainMenu; + mnuFile: TMenuItem; + mnuFileOpen: TMenuItem; + mnuExit: TMenuItem; + OD: TOpenDialog; + StatusBar: TStatusBar; + mnuImage: TMenuItem; + mnuImageFlip: TMenuItem; + mnuFlipHorz: TMenuItem; + mnuFlipVert: TMenuItem; + mnuConvert: TMenuItem; + mnuTo8Bits: TMenuItem; + mnuTo16Bits555: TMenuItem; + mnuTo16Bits565: TMenuItem; + mnuTo24Bits: TMenuItem; + mnuTo32Bits: TMenuItem; + mnuDither: TMenuItem; + mnuQuantize: TMenuItem; + mnuGrayScale: TMenuItem; + mnuRotate: TMenuItem; + mnuClockwise: TMenuItem; + mnuAntiClockwise: TMenuItem; + mnuInvert: TMenuItem; + mnuClear: TMenuItem; + mnuTo4Bits: TMenuItem; + tbTools: TToolBar; + btnCopy: TToolButton; + ImageList1: TImageList; + ToolButton1: TToolButton; + btnPaste: TToolButton; + btnClear: TToolButton; + btnOpen: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + procedure FormDestroy(Sender: TObject); + procedure FormPaint(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure mnuExitClick(Sender: TObject); + procedure mnuFileOpenClick(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure mnuFlipHorzClick(Sender: TObject); + procedure btnCopyClick(Sender: TObject); + procedure btnClearClick(Sender: TObject); + procedure btnPasteClick(Sender: TObject); + private + FBitmap: TFreeWinBitmap; + procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND; + public + { Public declarations } + end; + +var + fwbMainForm: TfwbMainForm; + +implementation + +{$R *.dfm} + +uses + FreeUtils, FreeImage, Math; + +procedure TfwbMainForm.FormDestroy(Sender: TObject); +begin + if Assigned(FBitmap) then + FBitmap.Free; +end; + +procedure TfwbMainForm.FormPaint(Sender: TObject); +var + dx, dy, w, h: Integer; + r1, r2: Double; + R: TRect; +begin + if FBitmap.IsValid then // draw the bitmap + begin + // determine paint rect + r1 := FBitmap.GetWidth / FBitmap.GetHeight; + r2 := ClientWidth / ClientHeight; + if r1 > r2 then // fit by width + begin + w := ClientWidth; + h := Floor(w / r1); + dx := 0; + dy := (ClientHeight - h) div 2; + end + else // fit by height + begin + h := ClientHeight; + w := Floor(h * r1); + dy := 0; + dx := (ClientWidth - w) div 2; + end; + with ClientRect do + R := Bounds(Left + dx, Top + dy, w, h); + FBitmap.Draw(Canvas.Handle, R); + + // erase area around the image + Canvas.Brush.Color := Color; + if dx > 0 then + begin + with ClientRect do + R := Bounds(Left, Top, dx, ClientHeight); + Canvas.FillRect(R); + with ClientRect do + R := Bounds(Right - dx, Top, dx, ClientHeight); + Canvas.FillRect(R); + end else + if dy > 0 then + begin + with ClientRect do + R := Bounds(Left, Top, ClientWidth, dy); + Canvas.FillRect(R); + with ClientRect do + R := Bounds(Left, Bottom - dy, ClientWidth, dy); + Canvas.FillRect(R); + end + end + else // clear + begin + Canvas.Brush.Color := Color; + Canvas.FillRect(ClientRect); + end +end; + +procedure TfwbMainForm.FormCreate(Sender: TObject); +begin + FBitmap := TFreeWinBitmap.Create; + + mnuImage.Enabled := FBitmap.IsValid; + OD.Filter := FIU_GetAllFilters; +end; + +procedure TfwbMainForm.mnuExitClick(Sender: TObject); +begin + Close; +end; + +procedure TfwbMainForm.mnuFileOpenClick(Sender: TObject); +var + t: Cardinal; +begin + if OD.Execute then + begin + t := GetTickCount; + FBitmap.Load(OD.FileName); + t := GetTickCount - t; + mnuImage.Enabled := FBitmap.IsValid; + StatusBar.Panels[0].Text := 'Loaded in ' + IntToStr(t) + ' msec.'; + StatusBar.Panels[1].Text := Format('%dx%d', [FBitmap.GetWidth, FBitmap.GetHeight]); + Invalidate; + end; +end; + +procedure TfwbMainForm.FormResize(Sender: TObject); +begin + Invalidate +end; + +procedure TfwbMainForm.WMEraseBkgnd(var Message: TMessage); +begin + Message.Result := 1; +end; + +procedure TfwbMainForm.mnuFlipHorzClick(Sender: TObject); +begin + with FBitmap do + if Sender = mnuFlipHorz then + FLipHorizontal else + if Sender = mnuFlipVert then + FlipVertical else + if Sender = mnuTo4Bits then + ConvertTo4Bits else + if Sender = mnuTo8Bits then + ConvertTo8Bits else + if Sender = mnuTo16Bits555 then + ConvertTo16Bits555 else + if Sender = mnuTo16Bits565 then + ConvertTo16Bits565 else + if Sender = mnuTo24Bits then + ConvertTo24Bits else + if Sender = mnuTo32Bits then + ConvertTo32Bits else + if Sender = mnuDither then + Dither(FID_FS) else + if Sender = mnuQuantize then + ColorQuantize(FIQ_WUQUANT) else + if Sender = mnuGrayScale then + ConvertToGrayscale else + if Sender = mnuClockwise then + Rotate(-90) else + if Sender = mnuAntiClockwise then + Rotate(90) else + if Sender = mnuInvert then + Invert else + if Sender = mnuClear then + Clear; + Invalidate; +end; + +procedure TfwbMainForm.btnCopyClick(Sender: TObject); +begin + if FBitmap.IsValid then FBitmap.CopyToClipBoard(Handle); +end; + +procedure TfwbMainForm.btnClearClick(Sender: TObject); +begin + FBitmap.Clear; + Invalidate; +end; + +procedure TfwbMainForm.btnPasteClick(Sender: TObject); +begin + FBitmap.PasteFromClipBoard; + Invalidate; +end; + +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/license.txt b/#ThirdParty/FreeImage/Wrapper/Delphi/license.txt new file mode 100644 index 0000000..a930004 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/license.txt @@ -0,0 +1,3 @@ +The contents of FreeImageDW package are subject to the FreeImage Public License Version 1.0 (the "License"); you may not use this package except in compliance with the License. You may obtain a copy of the License at http://home.wxs.nl/~flvdberg/freeimage-license.txt + +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeBitmap.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeBitmap.pas new file mode 100644 index 0000000..582e2ae --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeBitmap.pas @@ -0,0 +1,2187 @@ +unit FreeBitmap; + +// ========================================================== +// +// Delphi wrapper for FreeImage 3 +// +// Design and implementation by +// - Anatoliy Pulyaevskiy (xvel84@rambler.ru) +// +// Contributors: +// - Enzo Costantini (enzocostantini@libero.it) +// - Lorenzo Monti (LM) lomo74@gmail.com +// - Maurício (MAU) mauricio_box@yahoo.com - see also http://sourceforge.net/projects/tcycomponents/ +// +// Revision history +// When Who What +// ----------- ----- ----------------------------------------------------------- +// 2010-07-14 LM made RAD2010 compliant (unicode) +// 2011-03-04 JMB modifications to run on 64 bits (Windows and linux) : +// - FreeImage_RotateClassic : deprecated function, call to DeprecationManager in 64 bits crashes freeimage.dll +// ==> FreeImage_RotateClassic : replaced by FreeImage_Rotate +// modifications to run on linux : +// - exclude windows specific functions by compilation directives +// some corrections in : +// - TFreeBitmap.DoChanging +// - TFreeBitmap.IsGrayScale +// - TFreeWinBitmap.CopyFromBitmap +// - TFreeMultiBitmap.Open +// 2013-11-25 MAU Added type FreeImageAnsiString for handling accents on MAC OSX filenames/path + +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// +// ========================================================== +// +// From begining all code of this file is based on C++ wrapper to +// FreeImage - FreeImagePlus. +// +// ========================================================== + +interface + +{$I 'Version.inc'} + +uses + SysUtils, Classes, +{$IFDEF MSWINDOWS} + Windows, +{$ENDIF} + FreeImage; + +type + { TFreeObject } + + TFreeObject = class(TObject) + public + function IsValid: Boolean; virtual; + end; + + { TFreeTag } + + TFreeTag = class(TFreeObject) + private + // fields + FTag: PFITAG; + + // getters & setters + function GetCount: Cardinal; + function GetDescription: AnsiString; + function GetID: Word; + function GetKey: AnsiString; + function GetLength: Cardinal; + function GetTagType: FREE_IMAGE_MDTYPE; + function GetValue: Pointer; + procedure SetCount(const Value: Cardinal); + procedure SetDescription(const Value: AnsiString); + procedure SetID(const Value: Word); + procedure SetKey(const Value: AnsiString); + procedure SetLength(const Value: Cardinal); + procedure SetTagType(const Value: FREE_IMAGE_MDTYPE); + procedure SetValue(const Value: Pointer); + public + // construction & destruction + constructor Create(ATag: PFITAG = nil); virtual; + destructor Destroy; override; + + // methods + function Clone: TFreeTag; + function IsValid: Boolean; override; + function ToString(Model: FREE_IMAGE_MDMODEL; Make: PAnsiChar = nil): AnsiString; reintroduce; + + // properties + property Key: AnsiString read GetKey write SetKey; + property Description: AnsiString read GetDescription write SetDescription; + property ID: Word read GetID write SetID; + property TagType: FREE_IMAGE_MDTYPE read GetTagType write SetTagType; + property Count: Cardinal read GetCount write SetCount; + property Length: Cardinal read GetLength write SetLength; + property Value: Pointer read GetValue write SetValue; + property Tag: PFITAG read FTag; + end; + + { forward declarations } + + TFreeBitmap = class; + TFreeMemoryIO = class; + + { TFreeBitmap } + + TFreeBitmapChangingEvent = procedure(Sender: TFreeBitmap; var OldDib, NewDib: PFIBITMAP; var Handled: Boolean) of object; + + TFreeBitmap = class(TFreeObject) + private + // fields + FDib: PFIBITMAP; + FOnChange: TNotifyEvent; + FOnChanging: TFreeBitmapChangingEvent; + + procedure SetDib(Value: PFIBITMAP); + protected + function DoChanging(var OldDib, NewDib: PFIBITMAP): Boolean; dynamic; + function Replace(NewDib: PFIBITMAP): Boolean; dynamic; + public + constructor Create(ImageType: FREE_IMAGE_TYPE = FIT_BITMAP; Width: Integer = 0; Height: Integer = 0; Bpp: Integer = 0); + destructor Destroy; override; + function SetSize(ImageType: FREE_IMAGE_TYPE; Width, Height, Bpp: Integer; RedMask: Cardinal = 0; GreenMask: Cardinal = 0; BlueMask: Cardinal = 0): Boolean; + procedure Change; dynamic; + procedure Assign(Source: TFreeBitmap); + function CopySubImage(Left, Top, Right, Bottom: Integer; Dest: TFreeBitmap): Boolean; + function PasteSubImage(Src: TFreeBitmap; Left, Top: Integer; Alpha: Integer = 256): Boolean; + procedure Clear; virtual; + function Load(const FileName: FreeImageAnsiString; Flag: Integer = 0): Boolean; + function LoadU(const FileName: {$IFDEF DELPHI2010}string{$ELSE}WideString{$ENDIF}; Flag: Integer = 0): Boolean; + function LoadFromHandle(IO: PFreeImageIO; Handle: fi_handle; Flag: Integer = 0): Boolean; + function LoadFromMemory(MemIO: TFreeMemoryIO; Flag: Integer = 0): Boolean; + function LoadFromStream(Stream: TStream; Flag: Integer = 0): Boolean; + // save functions + function CanSave(fif: FREE_IMAGE_FORMAT): Boolean; + function Save(const FileName: FreeImageAnsiString; Flag: Integer = 0): Boolean; + function SaveU(const FileName: {$IFDEF DELPHI2010}string{$ELSE}WideString{$ENDIF}; Flag: Integer = 0): Boolean; + function SaveToHandle(fif: FREE_IMAGE_FORMAT; IO: PFreeImageIO; Handle: fi_handle; Flag: Integer = 0): Boolean; + function SaveToMemory(fif: FREE_IMAGE_FORMAT; MemIO: TFreeMemoryIO; Flag: Integer = 0): Boolean; + function SaveToStream(fif: FREE_IMAGE_FORMAT; Stream: TStream; Flag: Integer = 0): Boolean; + // image information + function GetImageType: FREE_IMAGE_TYPE; + function GetWidth: Integer; + function GetHeight: Integer; + function GetScanWidth: Integer; + function IsValid: Boolean; override; + function GetInfo: PBitmapInfo; + function GetInfoHeader: PBitmapInfoHeader; + function GetImageSize: Cardinal; + function GetBitsPerPixel: Integer; + function GetLine: Integer; + function GetHorizontalResolution: Double; + function GetVerticalResolution: Double; + procedure SetHorizontalResolution(Value: Double); + procedure SetVerticalResolution(Value: Double); + // palette operations + function GetPalette: PRGBQUAD; + function GetPaletteSize: Integer; + function GetColorsUsed: Integer; + function GetColorType: FREE_IMAGE_COLOR_TYPE; + function IsGrayScale: Boolean; + // pixels access + function AccessPixels: PByte; + function GetScanLine(ScanLine: Integer): PByte; + function GetPixelIndex(X, Y: Cardinal; var Value: Byte): Boolean; + function GetPixelColor(X, Y: Cardinal; var Value: RGBQUAD): Boolean; + function SetPixelIndex(X, Y: Cardinal; var Value: Byte): Boolean; + function SetPixelColor(X, Y: Cardinal; var Value: RGBQUAD): Boolean; + // convertion + function ConvertToStandardType(ScaleLinear: Boolean): Boolean; + function ConvertToType(ImageType: FREE_IMAGE_TYPE; ScaleLinear: Boolean): Boolean; + function Threshold(T: Byte): Boolean; + function ConvertTo4Bits: Boolean; + function ConvertTo8Bits: Boolean; + function ConvertTo16Bits555: Boolean; + function ConvertTo16Bits565: Boolean; + function ConvertTo24Bits: Boolean; + function ConvertTo32Bits: Boolean; + function ConvertToGrayscale: Boolean; + function ColorQuantize(Algorithm: FREE_IMAGE_QUANTIZE): Boolean; + function Dither(Algorithm: FREE_IMAGE_DITHER): Boolean; + function ConvertToRGBF: Boolean; + function ToneMapping(TMO: FREE_IMAGE_TMO; FirstParam, SecondParam: Double): Boolean; + // transparency + function IsTransparent: Boolean; + function GetTransparencyCount: Cardinal; + function GetTransparencyTable: PByte; + procedure SetTransparencyTable(Table: PByte; Count: Integer); + function HasFileBkColor: Boolean; + function GetFileBkColor(var BkColor: RGBQUAD): Boolean; + function SetFileBkColor(BkColor: PRGBQuad): Boolean; + // channel processing routines + function GetChannel(Bitmap: TFreeBitmap; Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; + function SetChannel(Bitmap: TFreeBitmap; Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; + function SplitChannels(RedChannel, GreenChannel, BlueChannel: TFreeBitmap): Boolean; + function CombineChannels(Red, Green, Blue: TFreeBitmap): Boolean; + // rotation and flipping + function RotateEx(Angle, XShift, YShift, XOrigin, YOrigin: Double; UseMask: Boolean): Boolean; + function Rotate(Angle: Double): Boolean; + function FlipHorizontal: Boolean; + function FlipVertical: Boolean; + // color manipulation routines + function Invert: Boolean; + function AdjustCurve(Lut: PByte; Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; + function AdjustGamma(Gamma: Double): Boolean; + function AdjustBrightness(Percentage: Double): Boolean; + function AdjustContrast(Percentage: Double): Boolean; + function GetHistogram(Histo: PDWORD; Channel: FREE_IMAGE_COLOR_CHANNEL = FICC_BLACK): Boolean; + // upsampling / downsampling + procedure MakeThumbnail(const Width, Height: Integer; DestBitmap: TFreeBitmap); + function Rescale(NewWidth, NewHeight: Integer; Filter: FREE_IMAGE_FILTER; Dest: TFreeBitmap = nil): Boolean; + // metadata routines + function FindFirstMetadata(Model: FREE_IMAGE_MDMODEL; var Tag: TFreeTag): PFIMETADATA; + function FindNextMetadata(MDHandle: PFIMETADATA; var Tag: TFreeTag): Boolean; + procedure FindCloseMetadata(MDHandle: PFIMETADATA); + function SetMetadata(Model: FREE_IMAGE_MDMODEL; const Key: AnsiString; Tag: TFreeTag): Boolean; + function GetMetadata(Model: FREE_IMAGE_MDMODEL; const Key: AnsiString; var Tag: TFreeTag): Boolean; + function GetMetadataCount(Model: FREE_IMAGE_MDMODEL): Cardinal; + + // properties + property Dib: PFIBITMAP read FDib write SetDib; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnChanging: TFreeBitmapChangingEvent read FOnChanging write FOnChanging; + end; + + { TFreeWinBitmap } + + TFreeWinBitmap = class(TFreeBitmap) + private + FDeleteMe: Boolean; // True - need to delete FDisplayDib + FDisplayDib: PFIBITMAP; // Image that paints on DC + public + constructor Create(ImageType: FREE_IMAGE_TYPE = FIT_BITMAP; Width: Integer = 0; Height: Integer = 0; Bpp: Integer = 0); + destructor Destroy; override; + + procedure Clear; override; +{$IFDEF MSWINDOWS} + function CopyToHandle: THandle; + function CopyFromHandle(HMem: THandle): Boolean; + function CopyFromBitmap(HBmp: HBITMAP): Boolean; + function CopyToBitmapH: HBITMAP; + function CopyToClipBoard(NewOwner: HWND): Boolean; + function PasteFromClipBoard: Boolean; + function CaptureWindow(ApplicationWindow, SelectedWindow: HWND): Boolean; + + procedure Draw(DC: HDC; Rect: TRect); + procedure DrawEx(DC: HDC; Rect: TRect; UseFileBkg: Boolean = False; AppBkColor: PRGBQuad = nil; Bg: PFIBITMAP = nil); +{$ENDIF} + end; + + { TFreeMemoryIO } + + TFreeMemoryIO = class(TFreeObject) + private + FHMem: PFIMEMORY; + public + // construction and destruction + constructor Create(Data: PByte = nil; SizeInBytes: DWORD = 0); + destructor Destroy; override; + + function GetFileType: FREE_IMAGE_FORMAT; + function Read(fif: FREE_IMAGE_FORMAT; Flag: Integer = 0): PFIBITMAP; + function Write(fif: FREE_IMAGE_FORMAT; dib: PFIBITMAP; Flag: Integer = 0): Boolean; + function Tell: Longint; + function Seek(Offset: Longint; Origin: Word): Boolean; + function Acquire(var Data: PByte; var SizeInBytes: DWORD): Boolean; + // overriden methods + function IsValid: Boolean; override; + end; + + { TFreeMultiBitmap } + + TFreeMultiBitmap = class(TFreeObject) + private + FMPage: PFIMULTIBITMAP; + FMemoryCache: Boolean; + public + // constructor and destructor + constructor Create(KeepCacheInMemory: Boolean = False); + destructor Destroy; override; + + // methods + function Open(const FileName: FreeImageAnsiString; CreateNew, ReadOnly: Boolean; Flags: Integer = 0): Boolean; + function Close(Flags: Integer = 0): Boolean; + function GetPageCount: Integer; + procedure AppendPage(Bitmap: TFreeBitmap); + procedure InsertPage(Page: Integer; Bitmap: TFreeBitmap); + procedure DeletePage(Page: Integer); + function MovePage(Target, Source: Integer): Boolean; + procedure LockPage(Page: Integer; DestBitmap: TFreeBitmap); + procedure UnlockPage(Bitmap: TFreeBitmap; Changed: Boolean); + function GetLockedPageNumbers(var Pages: Integer; var Count: Integer): Boolean; + // overriden methods + function IsValid: Boolean; override; + + // properties + // change of this property influences only on the next opening of a file + property MemoryCache: Boolean read FMemoryCache write FMemoryCache; + end; + +implementation + +const + ThumbSize = 150; + +// marker used for clipboard copy / paste + +procedure SetFreeImageMarker(bmih: PBitmapInfoHeader; dib: PFIBITMAP); +begin + // Windows constants goes from 0L to 5L + // Add $FF to avoid conflicts + bmih.biCompression := $FF + FreeImage_GetImageType(dib); +end; + +function GetFreeImageMarker(bmih: PBitmapInfoHeader): FREE_IMAGE_TYPE; +begin + Result := FREE_IMAGE_TYPE(bmih.biCompression - $FF); +end; + +{ TFreePersistent } + +function TFreeObject.IsValid: Boolean; +begin + Result := False +end; + +{ TFreeBitmap } + +function TFreeBitmap.AccessPixels: PByte; +begin + Result := FreeImage_GetBits(FDib) +end; + +function TFreeBitmap.AdjustBrightness(Percentage: Double): Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_AdjustBrightness(FDib, Percentage); + Change; + end + else + Result := False +end; + +function TFreeBitmap.AdjustContrast(Percentage: Double): Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_AdjustContrast(FDib, Percentage); + Change; + end + else + Result := False +end; + +function TFreeBitmap.AdjustCurve(Lut: PByte; + Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_AdjustCurve(FDib, Lut, Channel); + Change; + end + else + Result := False +end; + +function TFreeBitmap.AdjustGamma(Gamma: Double): Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_AdjustGamma(FDib, Gamma); + Change; + end + else + Result := False +end; + +procedure TFreeBitmap.Assign(Source: TFreeBitmap); +var + SourceBmp: TFreeBitmap; + Clone: PFIBITMAP; +begin + if Source = nil then + begin + Clear; + Exit; + end; + + if Source is TFreeBitmap then + begin + SourceBmp := TFreeBitmap(Source); + if SourceBmp <> Self then + begin + if SourceBmp.IsValid then + begin + Clone := FreeImage_Clone(SourceBmp.FDib); + Replace(Clone); + end + else + Clear; + end; + end; +end; + +function TFreeBitmap.CanSave(fif: FREE_IMAGE_FORMAT): Boolean; +var + ImageType: FREE_IMAGE_TYPE; + Bpp: Word; +begin + Result := False; + if not IsValid then Exit; + + if fif <> FIF_UNKNOWN then + begin + // check that the dib can be saved in this format + ImageType := FreeImage_GetImageType(FDib); + if ImageType = FIT_BITMAP then + begin + // standard bitmap type + Bpp := FreeImage_GetBPP(FDib); + Result := FreeImage_FIFSupportsWriting(fif) + and FreeImage_FIFSupportsExportBPP(fif, Bpp); + end + else // special bitmap type + Result := FreeImage_FIFSupportsExportType(fif, ImageType); + end; +end; + +procedure TFreeBitmap.Change; +begin + if Assigned(FOnChange) then FOnChange(Self) +end; + +procedure TFreeBitmap.Clear; +begin + if FDib <> nil then + begin + FreeImage_Unload(FDib); + FDib := nil; + Change; + end; +end; + +function TFreeBitmap.ColorQuantize( + Algorithm: FREE_IMAGE_QUANTIZE): Boolean; +var + dib8: PFIBITMAP; +begin + if FDib <> nil then + begin + dib8 := FreeImage_ColorQuantize(FDib, Algorithm); + Result := Replace(dib8); + end + else + Result := False; +end; + +function TFreeBitmap.CombineChannels(Red, Green, + Blue: TFreeBitmap): Boolean; +var + Width, Height: Integer; +begin + if FDib = nil then + begin + Width := Red.GetWidth; + Height := Red.GetHeight; + FDib := FreeImage_Allocate(Width, Height, 24, FI_RGBA_RED_MASK, + FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); + end; + + if FDib <> nil then + begin + Result := FreeImage_SetChannel(FDib, Red.FDib, FICC_RED) and + FreeImage_SetChannel(FDib, Green.FDib, FICC_GREEN) and + FreeImage_SetChannel(FDib, Blue.FDib, FICC_BLUE); + + Change + end + else + Result := False; +end; + +function TFreeBitmap.ConvertTo16Bits555: Boolean; +var + dib16_555: PFIBITMAP; +begin + if FDib <> nil then + begin + dib16_555 := FreeImage_ConvertTo16Bits555(FDib); + Result := Replace(dib16_555); + end + else + Result := False +end; + +function TFreeBitmap.ConvertTo16Bits565: Boolean; +var + dib16_565: PFIBITMAP; +begin + if FDib <> nil then + begin + dib16_565 := FreeImage_ConvertTo16Bits565(FDib); + Result := Replace(dib16_565); + end + else + Result := False +end; + +function TFreeBitmap.ConvertTo24Bits: Boolean; +var + dibRGB: PFIBITMAP; +begin + if FDib <> nil then + begin + dibRGB := FreeImage_ConvertTo24Bits(FDib); + Result := Replace(dibRGB); + end + else + Result := False +end; + +function TFreeBitmap.ConvertTo32Bits: Boolean; +var + dib32: PFIBITMAP; +begin + if FDib <> nil then + begin + dib32 := FreeImage_ConvertTo32Bits(FDib); + Result := Replace(dib32); + end + else + Result := False +end; + +function TFreeBitmap.ConvertTo4Bits: Boolean; +var + dib4: PFIBITMAP; +begin + Result := False; + if IsValid then + begin + dib4 := FreeImage_ConvertTo4Bits(FDib); + Result := Replace(dib4); + end; +end; + +function TFreeBitmap.ConvertTo8Bits: Boolean; +var + dib8: PFIBITMAP; +begin + if FDib <> nil then + begin + dib8 := FreeImage_ConvertTo8Bits(FDib); + Result := Replace(dib8); + end + else + Result := False +end; + +function TFreeBitmap.ConvertToGrayscale: Boolean; +var + dib8: PFIBITMAP; +begin + Result := False; + + if IsValid then + begin + dib8 := FreeImage_ConvertToGreyscale(FDib); + Result := Replace(dib8); + end +end; + +function TFreeBitmap.ConvertToRGBF: Boolean; +var + ImageType: FREE_IMAGE_TYPE; + NewDib: PFIBITMAP; +begin + Result := False; + if not IsValid then Exit; + + ImageType := GetImageType; + + if (ImageType = FIT_BITMAP) then + begin + if GetBitsPerPixel < 24 then + if not ConvertTo24Bits then + Exit + end; + NewDib := FreeImage_ConvertToRGBF(FDib); + Result := Replace(NewDib); +end; + +function TFreeBitmap.ConvertToStandardType(ScaleLinear: Boolean): Boolean; +var + dibStandard: PFIBITMAP; +begin + if IsValid then + begin + dibStandard := FreeImage_ConvertToStandardType(FDib, ScaleLinear); + Result := Replace(dibStandard); + end + else + Result := False; +end; + +function TFreeBitmap.ConvertToType(ImageType: FREE_IMAGE_TYPE; + ScaleLinear: Boolean): Boolean; +var + dib: PFIBITMAP; +begin + if FDib <> nil then + begin + dib := FreeImage_ConvertToType(FDib, ImageType, ScaleLinear); + Result := Replace(dib) + end + else + Result := False +end; + +function TFreeBitmap.CopySubImage(Left, Top, Right, Bottom: Integer; + Dest: TFreeBitmap): Boolean; +begin + if FDib <> nil then + begin + Dest.FDib := FreeImage_Copy(FDib, Left, Top, Right, Bottom); + Result := Dest.IsValid; + end else + Result := False; +end; + +constructor TFreeBitmap.Create(ImageType: FREE_IMAGE_TYPE; Width, Height, + Bpp: Integer); +begin + inherited Create; + + FDib := nil; + if (Width > 0) and (Height > 0) and (Bpp > 0) then + SetSize(ImageType, Width, Height, Bpp); +end; + +destructor TFreeBitmap.Destroy; +begin + if FDib <> nil then + FreeImage_Unload(FDib); + inherited; +end; + +function TFreeBitmap.Dither(Algorithm: FREE_IMAGE_DITHER): Boolean; +var + dib: PFIBITMAP; +begin + if FDib <> nil then + begin + dib := FreeImage_Dither(FDib, Algorithm); + Result := Replace(dib); + end + else + Result := False; +end; + +function TFreeBitmap.DoChanging(var OldDib, NewDib: PFIBITMAP): Boolean; +begin + Result := False; + if (OldDib <> NewDib) and Assigned(FOnChanging) then + FOnChanging(Self, OldDib, NewDib, Result); +end; + +procedure TFreeBitmap.FindCloseMetadata(MDHandle: PFIMETADATA); +begin + FreeImage_FindCloseMetadata(MDHandle); +end; + +function TFreeBitmap.FindFirstMetadata(Model: FREE_IMAGE_MDMODEL; + var Tag: TFreeTag): PFIMETADATA; +begin + Result := FreeImage_FindFirstMetadata(Model, FDib, Tag.FTag); +end; + +function TFreeBitmap.FindNextMetadata(MDHandle: PFIMETADATA; + var Tag: TFreeTag): Boolean; +begin + Result := FreeImage_FindNextMetadata(MDHandle, Tag.FTag); +end; + +function TFreeBitmap.FlipHorizontal: Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_FlipHorizontal(FDib); + Change; + end + else + Result := False +end; + +function TFreeBitmap.FlipVertical: Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_FlipVertical(FDib); + Change; + end + else + Result := False +end; + +function TFreeBitmap.GetBitsPerPixel: Integer; +begin + Result := FreeImage_GetBPP(FDib) +end; + +function TFreeBitmap.GetChannel(Bitmap: TFreeBitmap; + Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; +begin + if FDib <> nil then + begin + Bitmap.Dib := FreeImage_GetChannel(FDib, Channel); + Result := Bitmap.IsValid; + end + else + Result := False +end; + +function TFreeBitmap.GetColorsUsed: Integer; +begin + Result := FreeImage_GetColorsUsed(FDib) +end; + +function TFreeBitmap.GetColorType: FREE_IMAGE_COLOR_TYPE; +begin + Result := FreeImage_GetColorType(FDib); +end; + +function TFreeBitmap.GetFileBkColor(var BkColor: RGBQUAD): Boolean; +begin + Result := FreeImage_GetBackgroundColor(FDib, BkColor); +end; + +function TFreeBitmap.GetHeight: Integer; +begin + Result := FreeImage_GetHeight(FDib) +end; + +function TFreeBitmap.GetHistogram(Histo: PDWORD; + Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; +begin + if FDib <> nil then + Result := FreeImage_GetHistogram(FDib, Histo, Channel) + else + Result := False +end; + +function TFreeBitmap.GetHorizontalResolution: Double; +begin + Result := FreeImage_GetDotsPerMeterX(FDib) / 100 +end; + +function TFreeBitmap.GetImageSize: Cardinal; +begin + Result := FreeImage_GetDIBSize(FDib); +end; + +function TFreeBitmap.GetImageType: FREE_IMAGE_TYPE; +begin + Result := FreeImage_GetImageType(FDib); +end; + +function TFreeBitmap.GetInfo: PBitmapInfo; +begin + Result := FreeImage_GetInfo(FDib); +end; + +function TFreeBitmap.GetInfoHeader: PBITMAPINFOHEADER; +begin + Result := FreeImage_GetInfoHeader(FDib) +end; + +function TFreeBitmap.GetLine: Integer; +begin + Result := FreeImage_GetLine(FDib) +end; + +function TFreeBitmap.GetMetadata(Model: FREE_IMAGE_MDMODEL; + const Key: AnsiString; var Tag: TFreeTag): Boolean; +begin + Result := FreeImage_GetMetadata(Model, FDib, PAnsiChar(Key), Tag.FTag); +end; + +function TFreeBitmap.GetMetadataCount(Model: FREE_IMAGE_MDMODEL): Cardinal; +begin + Result := FreeImage_GetMetadataCount(Model, FDib); +end; + +function TFreeBitmap.GetPalette: PRGBQUAD; +begin + Result := FreeImage_GetPalette(FDib) +end; + +function TFreeBitmap.GetPaletteSize: Integer; +begin + Result := FreeImage_GetColorsUsed(FDib) * SizeOf(RGBQUAD) +end; + +function TFreeBitmap.GetPixelColor(X, Y: Cardinal; + var Value: RGBQUAD): Boolean; +begin + Result := FreeImage_GetPixelColor(FDib, X, Y, Value); +end; + +function TFreeBitmap.GetPixelIndex(X, Y: Cardinal; + var Value: Byte): Boolean; +begin + Result := FreeImage_GetPixelIndex(FDib, X, Y, Value); +end; + +function TFreeBitmap.GetScanLine(ScanLine: Integer): PByte; +var + H: Integer; +begin + H := FreeImage_GetHeight(FDib); + if ScanLine < H then + Result := FreeImage_GetScanLine(FDib, ScanLine) + else + Result := nil; +end; + +function TFreeBitmap.GetScanWidth: Integer; +begin + Result := FreeImage_GetPitch(FDib) +end; + +function TFreeBitmap.GetTransparencyCount: Cardinal; +begin + Result := FreeImage_GetTransparencyCount(FDib) +end; + +function TFreeBitmap.GetTransparencyTable: PByte; +begin + Result := FreeImage_GetTransparencyTable(FDib) +end; + +function TFreeBitmap.GetVerticalResolution: Double; +begin + Result := FreeImage_GetDotsPerMeterY(Fdib) / 100 +end; + +function TFreeBitmap.GetWidth: Integer; +begin + Result := FreeImage_GetWidth(FDib) +end; + +function TFreeBitmap.HasFileBkColor: Boolean; +begin + Result := FreeImage_HasBackgroundColor(FDib) +end; + +function TFreeBitmap.Invert: Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_Invert(FDib); + Change; + end + else + Result := False +end; + +function TFreeBitmap.IsGrayScale: Boolean; +begin + Result := (FreeImage_GetBPP(FDib) = 8) +// modif JMB NOVAXEL +// FIC_PALETTE isn't enough to tell the bitmap is grayscale +// and (FreeImage_GetColorType(FDib) = FIC_PALETTE); + and ((FreeImage_GetColorType(FDib) = FIC_MINISBLACK) or + (FreeImage_GetColorType(FDib) = FIC_MINISWHITE)); +// end of modif JMB NOVAXEL +end; + +function TFreeBitmap.IsTransparent: Boolean; +begin + Result := FreeImage_IsTransparent(FDib); +end; + +function TFreeBitmap.IsValid: Boolean; +begin + Result := FDib <> nil +end; + +function TFreeBitmap.Load(const FileName: FreeImageAnsiString; Flag: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + + // check the file signature and get its format + fif := FreeImage_GetFileType(PAnsiChar(FileName), 0); + if fif = FIF_UNKNOWN then + // no signature? + // try to guess the file format from the file extention + fif := FreeImage_GetFIFFromFilename(PAnsiChar(FileName)); + + // check that the plugin has reading capabilities ... + if (fif <> FIF_UNKNOWN) and FreeImage_FIFSupportsReading(FIF) then + begin + // free the previous dib + if FDib <> nil then + FreeImage_Unload(dib); + + // load the file + FDib := FreeImage_Load(fif, PAnsiChar(FileName), Flag); + + Change; + Result := IsValid; + end else + Result := False; +end; + +function TFreeBitmap.LoadFromHandle(IO: PFreeImageIO; Handle: fi_handle; + Flag: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + // check the file signature and get its format + fif := FreeImage_GetFileTypeFromHandle(IO, Handle, 16); + if (fif <> FIF_UNKNOWN) and FreeImage_FIFSupportsReading(fif) then + begin + // free the previous dib + if FDib <> nil then + FreeImage_Unload(FDib); + + // load the file + FDib := FreeImage_LoadFromHandle(fif, IO, Handle, Flag); + + Change; + Result := IsValid; + end else + Result := False; +end; + +function TFreeBitmap.LoadFromMemory(MemIO: TFreeMemoryIO; + Flag: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + + // check the file signature and get its format + fif := MemIO.GetFileType; + if (fif <> FIF_UNKNOWN) and FreeImage_FIFSupportsReading(fif) then + begin + // free the previous dib + if FDib <> nil then + FreeImage_Unload(FDib); + + // load the file + FDib := MemIO.Read(fif, Flag); + + Result := IsValid; + Change; + end else + Result := False; +end; + +function TFreeBitmap.LoadFromStream(Stream: TStream; + Flag: Integer): Boolean; +var + MemIO: TFreeMemoryIO; + Data: PByte; + MemStream: TMemoryStream; + Size: Cardinal; +begin + Size := Stream.Size; + + MemStream := TMemoryStream.Create; + try + MemStream.CopyFrom(Stream, Size); + Data := MemStream.Memory; + + MemIO := TFreeMemoryIO.Create(Data, Size); + try + Result := LoadFromMemory(MemIO); + finally + MemIO.Free; + end; + finally + MemStream.Free; + end; +end; + +function TFreeBitmap.LoadU(const FileName: {$IFDEF DELPHI2010}string{$ELSE}WideString{$ENDIF}; + Flag: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + + // check the file signature and get its format + fif := FreeImage_GetFileTypeU(PWideChar(Filename), 0); + if fif = FIF_UNKNOWN then + // no signature? + // try to guess the file format from the file extention + fif := FreeImage_GetFIFFromFilenameU(PWideChar(FileName)); + + // check that the plugin has reading capabilities ... + if (fif <> FIF_UNKNOWN) and FreeImage_FIFSupportsReading(FIF) then + begin + // free the previous dib + if FDib <> nil then + FreeImage_Unload(dib); + + // load the file + FDib := FreeImage_LoadU(fif, PWideChar(FileName), Flag); + + Change; + Result := IsValid; + end else + Result := False; +end; + +procedure TFreeBitmap.MakeThumbnail(const Width, Height: Integer; + DestBitmap: TFreeBitmap); +type + PRGB24 = ^TRGB24; + TRGB24 = packed record + B: Byte; + G: Byte; + R: Byte; + end; +var + x, y, ix, iy: integer; + x1, x2, x3: integer; + + xscale, yscale: single; + iRed, iGrn, iBlu, iRatio: Longword; + p, c1, c2, c3, c4, c5: TRGB24; + pt, pt1: PRGB24; + iSrc, iDst, s1: integer; + i, j, r, g, b, tmpY: integer; + + RowDest, RowSource, RowSourceStart: integer; + w, h: Integer; + dxmin, dymin: integer; + ny1, ny2, ny3: integer; + dx, dy: integer; + lutX, lutY: array of integer; + + SrcBmp, DestBmp: PFIBITMAP; +begin + if not IsValid then Exit; + + if (GetWidth <= ThumbSize) and (GetHeight <= ThumbSize) then + begin + DestBitmap.Assign(Self); + Exit; + end; + + w := Width; + h := Height; + + // prepare bitmaps + if GetBitsPerPixel <> 24 then + SrcBmp := FreeImage_ConvertTo24Bits(FDib) + else + SrcBmp := FDib; + DestBmp := FreeImage_Allocate(w, h, 24); + Assert(DestBmp <> nil, 'TFreeBitmap.MakeThumbnail error'); + +{ iDst := (w * 24 + 31) and not 31; + iDst := iDst div 8; //BytesPerScanline + iSrc := (GetWidth * 24 + 31) and not 31; + iSrc := iSrc div 8; +} + // BytesPerScanline + iDst := FreeImage_GetPitch(DestBmp); + iSrc := FreeImage_GetPitch(SrcBmp); + + xscale := 1 / (w / FreeImage_GetWidth(SrcBmp)); + yscale := 1 / (h / FreeImage_GetHeight(SrcBmp)); + + // X lookup table + SetLength(lutX, w); + x1 := 0; + x2 := trunc(xscale); + for x := 0 to w - 1 do + begin + lutX[x] := x2 - x1; + x1 := x2; + x2 := trunc((x + 2) * xscale); + end; + + // Y lookup table + SetLength(lutY, h); + x1 := 0; + x2 := trunc(yscale); + for x := 0 to h - 1 do + begin + lutY[x] := x2 - x1; + x1 := x2; + x2 := trunc((x + 2) * yscale); + end; + + Dec(w); + Dec(h); + RowDest := integer(FreeImage_GetScanLine(DestBmp, 0)); + RowSourceStart := integer(FreeImage_GetScanLine(SrcBmp, 0)); + RowSource := RowSourceStart; + + for y := 0 to h do + // resampling + begin + dy := lutY[y]; + x1 := 0; + x3 := 0; + for x := 0 to w do // loop through row + begin + dx:= lutX[x]; + iRed:= 0; + iGrn:= 0; + iBlu:= 0; + RowSource := RowSourceStart; + for iy := 1 to dy do + begin + pt := PRGB24(RowSource + x1); + for ix := 1 to dx do + begin + iRed := iRed + pt.R; + iGrn := iGrn + pt.G; + iBlu := iBlu + pt.B; + inc(pt); + end; + RowSource := RowSource + iSrc; + end; + iRatio := 65535 div (dx * dy); + pt1 := PRGB24(RowDest + x3); + pt1.R := (iRed * iRatio) shr 16; + pt1.G := (iGrn * iRatio) shr 16; + pt1.B := (iBlu * iRatio) shr 16; + x1 := x1 + 3 * dx; + inc(x3,3); + end; + RowDest := RowDest + iDst; + RowSourceStart := RowSource; + end; // resampling + + if FreeImage_GetHeight(DestBmp) >= 3 then + // Sharpening... + begin + s1 := integer(FreeImage_GetScanLine(DestBmp, 0)); + iDst := integer(FreeImage_GetScanLine(DestBmp, 1)) - s1; + ny1 := Integer(s1); + ny2 := ny1 + iDst; + ny3 := ny2 + iDst; + for y := 1 to FreeImage_GetHeight(DestBmp) - 2 do + begin + for x := 0 to FreeImage_GetWidth(DestBmp) - 3 do + begin + x1 := x * 3; + x2 := x1 + 3; + x3 := x1 + 6; + + c1 := pRGB24(ny1 + x1)^; + c2 := pRGB24(ny1 + x3)^; + c3 := pRGB24(ny2 + x2)^; + c4 := pRGB24(ny3 + x1)^; + c5 := pRGB24(ny3 + x3)^; + + r := (c1.R + c2.R + (c3.R * -12) + c4.R + c5.R) div -8; + g := (c1.G + c2.G + (c3.G * -12) + c4.G + c5.G) div -8; + b := (c1.B + c2.B + (c3.B * -12) + c4.B + c5.B) div -8; + + if r < 0 then r := 0 else if r > 255 then r := 255; + if g < 0 then g := 0 else if g > 255 then g := 255; + if b < 0 then b := 0 else if b > 255 then b := 255; + + pt1 := pRGB24(ny2 + x2); + pt1.R := r; + pt1.G := g; + pt1.B := b; + end; + inc(ny1, iDst); + inc(ny2, iDst); + inc(ny3, iDst); + end; + end; // sharpening + + if SrcBmp <> FDib then + FreeImage_Unload(SrcBmp); + DestBitmap.Replace(DestBmp); +end; + +function TFreeBitmap.PasteSubImage(Src: TFreeBitmap; Left, Top, + Alpha: Integer): Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_Paste(FDib, Src.Dib, Left, Top, Alpha); + Change; + end else + Result := False; +end; + +function TFreeBitmap.Replace(NewDib: PFIBITMAP): Boolean; +begin + Result := False; + if NewDib = nil then Exit; + + if not DoChanging(FDib, NewDib) and IsValid then + FreeImage_Unload(FDib); + + FDib := NewDib; + Result := True; + Change; +end; + +function TFreeBitmap.Rescale(NewWidth, NewHeight: Integer; + Filter: FREE_IMAGE_FILTER; Dest: TFreeBitmap): Boolean; +var + Bpp: Integer; + DstDib: PFIBITMAP; +begin + Result := False; + + if FDib <> nil then + begin + Bpp := FreeImage_GetBPP(FDib); + + if Bpp < 8 then + if not ConvertToGrayscale then Exit + else + if Bpp = 16 then + // convert to 24-bit + if not ConvertTo24Bits then Exit; + + // perform upsampling / downsampling + DstDib := FreeImage_Rescale(FDib, NewWidth, NewHeight, Filter); + if Dest = nil then + Result := Replace(DstDib) + else + Result := Dest.Replace(DstDib) + end +end; + +function TFreeBitmap.Rotate(Angle: Double): Boolean; +var + Bpp: Integer; + Rotated: PFIBITMAP; +begin + Result := False; + if IsValid then + begin + Bpp := FreeImage_GetBPP(FDib); + if Bpp in [1, 8, 24, 32] then + begin +// modif JMB : FreeImage_RotateClassic : deprecated function, call to DeprecationManager in 64 bits crash freeimage.dll + //Rotated := FreeImage_RotateClassic(FDib, Angle); + Rotated := FreeImage_Rotate(FDib, Angle, nil); +// end of modif JMB + //Rotated := FreeImage_Rotate(FDib, Angle); + Result := Replace(Rotated); + end + end; +end; + +function TFreeBitmap.RotateEx(Angle, XShift, YShift, XOrigin, + YOrigin: Double; UseMask: Boolean): Boolean; +var + Rotated: PFIBITMAP; +begin + Result := False; + if FDib <> nil then + begin + if FreeImage_GetBPP(FDib) >= 8 then + begin + Rotated := FreeImage_RotateEx(FDib, Angle, XShift, YShift, XOrigin, YOrigin, UseMask); + Result := Replace(Rotated); + end + end; +end; + +function TFreeBitmap.Save(const FileName: FreeImageAnsiString; Flag: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + Result := False; + + // try to guess the file format from the file extension + fif := FreeImage_GetFIFFromFilename(PAnsiChar(FileName)); + if CanSave(fif) then + Result := FreeImage_Save(fif, FDib, PAnsiChar(FileName), Flag); +end; + +function TFreeBitmap.SaveToHandle(fif: FREE_IMAGE_FORMAT; IO: PFreeImageIO; + Handle: fi_handle; Flag: Integer): Boolean; +begin + Result := False; + if CanSave(fif) then + Result := FreeImage_SaveToHandle(fif, FDib, IO, Handle, Flag) +end; + +function TFreeBitmap.SaveToMemory(fif: FREE_IMAGE_FORMAT; + MemIO: TFreeMemoryIO; Flag: Integer): Boolean; +begin + Result := False; + + if CanSave(fif) then + Result := MemIO.Write(fif, FDib, Flag) +end; + +function TFreeBitmap.SaveToStream(fif: FREE_IMAGE_FORMAT; Stream: TStream; + Flag: Integer): Boolean; +var + MemIO: TFreeMemoryIO; + Data: PByte; + Size: Cardinal; +begin + MemIO := TFreeMemoryIO.Create; + try + Result := SaveToMemory(fif, MemIO, Flag); + if Result then + begin + MemIO.Acquire(Data, Size); + Stream.WriteBuffer(Data^, Size); + end; + finally + MemIO.Free; + end; +end; + +function TFreeBitmap.SaveU(const FileName: {$IFDEF DELPHI2010}string{$ELSE}WideString{$ENDIF}; + Flag: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + Result := False; + + // try to guess the file format from the file extension + fif := FreeImage_GetFIFFromFilenameU(PWideChar(Filename)); + if CanSave(fif) then + Result := FreeImage_SaveU(fif, FDib, PWideChar(FileName), Flag); +end; + +function TFreeBitmap.SetChannel(Bitmap: TFreeBitmap; + Channel: FREE_IMAGE_COLOR_CHANNEL): Boolean; +begin + if FDib <> nil then + begin + Result := FreeImage_SetChannel(FDib, Bitmap.FDib, Channel); + Change; + end + else + Result := False +end; + +procedure TFreeBitmap.SetDib(Value: PFIBITMAP); +begin + Replace(Value); +end; + +function TFreeBitmap.SetFileBkColor(BkColor: PRGBQuad): Boolean; +begin + Result := FreeImage_SetBackgroundColor(FDib, BkColor); + Change; +end; + +procedure TFreeBitmap.SetHorizontalResolution(Value: Double); +begin + if IsValid then + begin + FreeImage_SetDotsPerMeterX(FDib, Trunc(Value * 100 + 0.5)); + Change; + end; +end; + +function TFreeBitmap.SetMetadata(Model: FREE_IMAGE_MDMODEL; + const Key: AnsiString; Tag: TFreeTag): Boolean; +begin + Result := FreeImage_SetMetadata(Model, FDib, PAnsiChar(Key), Tag.Tag); +end; + +function TFreeBitmap.SetPixelColor(X, Y: Cardinal; + var Value: RGBQUAD): Boolean; +begin + Result := FreeImage_SetPixelColor(FDib, X, Y, Value); + Change; +end; + +function TFreeBitmap.SetPixelIndex(X, Y: Cardinal; var Value: Byte): Boolean; +begin + Result := FreeImage_SetPixelIndex(FDib, X, Y, Value); + Change; +end; + +function TFreeBitmap.SetSize(ImageType: FREE_IMAGE_TYPE; Width, Height, + Bpp: Integer; RedMask, GreenMask, BlueMask: Cardinal): Boolean; +var + Pal: PRGBQuad; + I: Cardinal; +begin + Result := False; + + if FDib <> nil then + FreeImage_Unload(FDib); + + FDib := FreeImage_Allocate(Width, Height, Bpp, RedMask, GreenMask, BlueMask); + if FDib = nil then Exit; + + if ImageType = FIT_BITMAP then + case Bpp of + 1, 4, 8: + begin + Pal := FreeImage_GetPalette(FDib); + for I := 0 to FreeImage_GetColorsUsed(FDib) - 1 do + begin + Pal.rgbBlue := I; + Pal.rgbGreen := I; + Pal.rgbRed := I; + Inc(Pal);//, SizeOf(RGBQUAD)); + end; + end; + end; + + Result := True; + Change; +end; + +procedure TFreeBitmap.SetTransparencyTable(Table: PByte; Count: Integer); +begin + FreeImage_SetTransparencyTable(FDib, Table, Count); + Change; +end; + +procedure TFreeBitmap.SetVerticalResolution(Value: Double); +begin + if IsValid then + begin + FreeImage_SetDotsPerMeterY(FDib, Trunc(Value * 100 + 0.5)); + Change; + end; +end; + +function TFreeBitmap.SplitChannels(RedChannel, GreenChannel, + BlueChannel: TFreeBitmap): Boolean; +begin + if FDib <> nil then + begin + RedChannel.FDib := FreeImage_GetChannel(FDib, FICC_RED); + GreenChannel.FDib := FreeImage_GetChannel(FDib, FICC_GREEN); + BlueChannel.FDib := FreeImage_GetChannel(FDib, FICC_BLUE); + Result := RedChannel.IsValid and GreenChannel.IsValid and BlueChannel.IsValid; + end + else + Result := False +end; + +function TFreeBitmap.Threshold(T: Byte): Boolean; +var + dib1: PFIBITMAP; +begin + if FDib <> nil then + begin + dib1 := FreeImage_Threshold(FDib, T); + Result := Replace(dib1); + end + else + Result := False +end; + +function TFreeBitmap.ToneMapping(TMO: FREE_IMAGE_TMO; FirstParam, + SecondParam: Double): Boolean; +var + NewDib: PFIBITMAP; +begin + Result := False; + if not IsValid then Exit; + + NewDib := FreeImage_ToneMapping(Fdib, TMO, FirstParam, SecondParam); + Result := Replace(NewDib); +end; + +{ TFreeWinBitmap } +{$IFDEF MSWINDOWS} +function TFreeWinBitmap.CaptureWindow(ApplicationWindow, + SelectedWindow: HWND): Boolean; +var + XScreen, YScreen, XShift, YShift, Width, Height: Integer; + R: TRect; + dstDC, srcDC, memDC: HDC; + BM, oldBM: HBITMAP; +begin + Result := False; + + // get window size + GetWindowRect(SelectedWindow, R); + + // check if the window is out of screen or maximized + XShift := 0; + YShift := 0; + XScreen := GetSystemMetrics(SM_CXSCREEN); + YScreen := GetSystemMetrics(SM_CYSCREEN); + if R.Right > XScreen then + R.Right := XScreen; + if R.Bottom > YScreen then + R.Bottom := YScreen; + if R.Left < 0 then + begin + XShift := -R.Left; + R.Left := 0; + end; + if R.Top < 0 then + begin + YShift := -R.Top; + R.Top := 0; + end; + + Width := R.Right - R.Left; + Height := R.Bottom - R.Top; + + if (Width <= 0) or (Height <= 0) then Exit; + + // hide the application window + ShowWindow(ApplicationWindow, SW_HIDE); + + // bring the window at the top most level + SetWindowPos(SelectedWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); + + // give enough time to refresh the window + Sleep(500); + + // prepare the DCs + dstDc := GetDC(0); + srcDC := GetWindowDC(SelectedWindow); //full window (GetDC(SelectedWindow) = clientarea) + memDC := CreateCompatibleDC(dstDC); + + // copy the screen to the bitmap + BM := CreateCompatibleBitmap(dstDC, Width, Height); + oldBM := HBITMAP(SelectObject(memDC, BM)); + BitBlt(memDC, 0, 0, Width, Height, srcDC, XShift, YShift, SRCCOPY); + + // redraw the application window + ShowWindow(ApplicationWindow, SW_SHOW); + + // restore the position + SetWindowPos(SelectedWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); + SetWindowPos(ApplicationWindow, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); + + // convert the HBITMAP to FIBITMAP + CopyFromBitmap(BM); + + // free objects + DeleteObject(SelectObject(memDC, oldBM)); + DeleteObject(memDC); + + if GetBitsPerPixel = 32 then ConvertTo24Bits; + + Result := True; +end; +{$ENDIF} + +procedure TFreeWinBitmap.Clear; +begin + if FDeleteMe then FreeImage_Unload(FDisplayDib); + inherited; +end; + +{$IFDEF MSWINDOWS} +function TFreeWinBitmap.CopyFromBitmap(HBmp: HBITMAP): Boolean; +var + bm: BITMAP; + DC: HDC; + Success: Integer; +// modif NOVAXEL + nColors : integer; + bmih: PBitmapInfoHeader; +// end of modif NOVAXEL +begin + Result := False; + + if HBmp <> 0 then + begin + // get information about the bitmap + GetObject(HBmp, SizeOf(BITMAP), @bm); + + // create the image + SetSize(FIT_BITMAP, bm.bmWidth, bm.bmHeight, bm.bmBitsPixel); + +// modif NOVAXEL + // GetDIBits clears the biClrUsed and biClrImportant BITMAPINFO properties. + // So for the Palettized bitmaps, we need to save the count of colors and + // to restore it after the call to GetDIBits + nColors := GetColorsUsed; +// end of modif NOVAXEL + // create the device context for the bitmap + DC := GetDC(0); + + // copy the pixels + Success := GetDIBits(DC, // handle to DC + HBmp, // handle to Bitmap + 0, // first scan line + FreeImage_GetHeight(Dib), // number of scan lines to copy + FreeImage_GetBits(Dib), // array for bitmap bits + FreeImage_GetInfo(Dib)^, // bitmap data buffer + DIB_RGB_COLORS // RGB + ); + + ReleaseDC(0, DC); +// modif NOVAXEL + // as seen above, wr restore the properties which have been cleared by GetDIBits + bmih := GetInfoHeader; + bmih.biClrUsed := nColors; + bmih.biClrImportant := nColors; +// end of modif NOVAXEL + + if Success = 0 then + raise Exception.Create('Error: GetDIBits failed') + else + Result := True; + end; +end; + +function TFreeWinBitmap.CopyFromHandle(HMem: THandle): Boolean; +var + Data: PByte; + bmih: PBitmapInfoHeader; + Palette: PRGBQuad; + Bits: PByte; + BitFields: array [0..2] of DWORD; + MaskSize: Longint; + image_type: FREE_IMAGE_TYPE; +begin + Result := False; + Palette := nil; + BitFields[0] := 0; BitFields[1] := 0; BitFields[2] := 0; + + // get a pointer to the bitmap + Data := GlobalLock(HMem); + + // get a pointer to the bitmap header + bmih := PBitmapInfoHeader(Data); + + // get a pointer to the palette + if bmih.biBitCount < 16 then + begin + Palette := PRGBQUAD(bmih); + Inc(PByte(Palette), SizeOf(BITMAPINFOHEADER)); + end; + + // get a pointer to the pixels + Bits := PByte(bmih); + Inc(Bits, SizeOf(BITMAPINFOHEADER) + SizeOF(RGBQUAD) * bmih.biClrUsed); + + if bmih.biCompression = BI_BITFIELDS then + begin + // take into account the color masks that specify the red, green and blue + // components (16- and 32-bit) + MaskSize := 3 * SizeOf(DWORD); + CopyMemory(@BitFields[0], Bits, MaskSize); + Inc(Bits, MaskSize); + end; + + if Data <> nil then + begin + image_type := FIT_BITMAP; + + case GetFreeImageMarker(bmih) of + FIT_UINT16..FIT_RGBAF: image_type := GetFreeImageMarker(bmih); + end; + + // allocate a new FIBITMAP + if not SetSize(image_type, bmih.biWidth, bmih.biHeight, bmih.biBitCount, + BitFields[2], BitFields[1], BitFields[0]) then + begin + GlobalUnlock(HMem); + Exit; + end; + + // copy the bitmap header + CopyMemory(FreeImage_GetInfoHeader(Dib), bmih, SizeOf(BITMAPINFOHEADER)); + + // copy the palette + CopyMemory(FreeImage_GetPalette(Dib), Palette, bmih.biClrUsed * SizeOf(RGBQUAD)); + + // copy the bitmap + CopyMemory(FreeImage_GetBits(Dib), Bits, FreeImage_GetPitch(Dib) * FreeImage_GetHeight(Dib)); + + GlobalUnlock(HMem); + end; +end; + +function TFreeWinBitmap.CopyToBitmapH: HBITMAP; +var DC : HDC; +begin + Result:=0; + if IsValid then + begin + DC:=GetDC(0); + Result:=CreateDIBitmap(DC, + FreeImage_GetInfoHeader(Dib)^, + CBM_INIT, + PAnsiChar(FreeImage_GetBits(Dib)), + FreeImage_GetInfo(Dib)^, + DIB_RGB_COLORS); + ReleaseDC(0,DC); + end; +end; + +function TFreeWinBitmap.CopyToClipBoard(NewOwner: HWND): Boolean; +var + HDib: THandle; +begin + Result := False; + HDib := CopyToHandle; + + if OpenClipboard(NewOwner) and EmptyClipboard then + begin + if SetClipboardData(CF_DIB, HDib) = 0 then + begin + MessageBox(NewOwner, 'Unable to set clipboard data', 'FreeImage', MB_ICONERROR); + CloseClipboard; + Exit; + end; + end; + CloseClipboard; + Result := True; +end; + +function TFreeWinBitmap.CopyToHandle: THandle; +var + DibSize: Longint; + ADib, pdib: PByte; + bmih: PBITMAPINFOHEADER; + Pal: PRGBQuad; + Bits: PByte; +begin + Result := 0; + if IsValid then + begin + // get equivalent DIB size + DibSize := SizeOf(BITMAPINFOHEADER); + Inc(DibSize, FreeImage_GetColorsUsed(Dib) * SizeOf(RGBQUAD)); + Inc(DibSize, FreeImage_GetPitch(Dib) * FreeImage_GetHeight(Dib)); + + // allocate a DIB + Result := GlobalAlloc(GHND, DibSize); + ADib := GlobalLock(Result); + + pdib := ADib; + + // copy the BITMAPINFOHEADER + bmih := FreeImage_GetInfoHeader(Dib); + CopyMemory(pdib, bmih, SizeOf(BITMAPINFOHEADER)); + Inc(pdib, SizeOf(BITMAPINFOHEADER)); + if FreeImage_GetImageType(Dib) <> FIT_BITMAP then + SetFreeImageMarker(bmih, FDib); + + // copy the palette + Pal := FreeImage_GetPalette(Dib); + CopyMemory(pdib, Pal, FreeImage_GetColorsUsed(Dib) * SizeOf(RGBQUAD)); + Inc(pdib, FreeImage_GetColorsUsed(Dib) * SizeOf(RGBQUAD)); + + // copy the bitmap + Bits := FreeImage_GetBits(Dib); + CopyMemory(pdib, Bits, FreeImage_GetPitch(Dib) * FreeImage_GetHeight(Dib)); + + GlobalUnlock(Result); + end; +end; +{$ENDIF} + +constructor TFreeWinBitmap.Create(ImageType: FREE_IMAGE_TYPE; Width, + Height, Bpp: Integer); +begin + inherited Create(ImageType, Width, Height, Bpp); + + FDisplayDib := nil; + FDeleteMe := False; +end; + +destructor TFreeWinBitmap.Destroy; +begin + if FDeleteMe then + FreeImage_Unload(FDisplayDib); + inherited; +end; + +{$IFDEF MSWINDOWS} +procedure TFreeWinBitmap.Draw(DC: HDC; Rect: TRect); +begin + DrawEx(DC, Rect); +end; + +procedure TFreeWinBitmap.DrawEx(DC: HDC; Rect: TRect; UseFileBkg: Boolean; + AppBkColor: PRGBQuad; Bg: PFIBITMAP); +var + ImageType: FREE_IMAGE_TYPE; + HasBackground, Transparent: Boolean; + DibDouble: PFIBITMAP; +begin + if not IsValid then Exit; + + // convert to standard bitmap if needed + if FDeleteMe then + begin + FreeImage_Unload(FDisplayDib); + FDisplayDib := nil; + FDeleteMe := False; + end; + + ImageType := FreeImage_GetImageType(FDib); + if ImageType = FIT_BITMAP then + begin + HasBackground := FreeImage_HasBackgroundColor(Dib); + Transparent := FreeImage_IsTransparent(Dib); + + if not Transparent and not HasBackground then + // copy pointer + FDisplayDib := Dib + else + begin + // create the transparent / alpha blended image + FDisplayDib := FreeImage_Composite(Dib, UseFileBkg, AppBkColor, Bg); + // remember to delete FDisplayDib + FDeleteMe := True; + end + end + else + begin + // convert to standard dib for display + if ImageType <> FIT_COMPLEX then + FDisplayDib := FreeImage_ConvertToStandardType(Dib, True) + else + begin + // convert to type FIT_DOUBLE + DibDouble := FreeImage_GetComplexChannel(Dib, FICC_MAG); + FDisplayDib := FreeImage_ConvertToStandardType(DibDouble, True); + // free image of type FIT_DOUBLE + FreeImage_Unload(DibDouble); + end; + // remember to delete FDisplayDib + FDeleteMe := True; + end; + + // Draw the DIB + SetStretchBltMode(DC, COLORONCOLOR); + StretchDIBits(DC, Rect.Left, Rect.Top, + Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, + 0, 0, FreeImage_GetWidth(FDisplayDib), FreeImage_GetHeight(FDisplayDib), + FreeImage_GetBits(FDisplayDib), FreeImage_GetInfo(FDisplayDib)^, DIB_RGB_COLORS, SRCCOPY); +end; + +function TFreeWinBitmap.PasteFromClipBoard: Boolean; +var + HDib: THandle; +begin + Result := False; + if not IsClipboardFormatAvailable(CF_DIB) then Exit; + + if OpenClipboard(0) then + begin + HDib := GetClipboardData(CF_DIB); + CopyFromHandle(HDib); + Result := True; + end; + CloseClipboard; +end; +{$ENDIF} + +{ TFreeMultiBitmap } + +procedure TFreeMultiBitmap.AppendPage(Bitmap: TFreeBitmap); +begin + if IsValid then + FreeImage_AppendPage(FMPage, Bitmap.FDib); +end; + +function TFreeMultiBitmap.Close(Flags: Integer): Boolean; +begin + Result := FreeImage_CloseMultiBitmap(FMPage, Flags); + FMPage := nil; +end; + +constructor TFreeMultiBitmap.Create(KeepCacheInMemory: Boolean); +begin + inherited Create; + FMemoryCache := KeepCacheInMemory; +end; + +procedure TFreeMultiBitmap.DeletePage(Page: Integer); +begin + if IsValid then + FreeImage_DeletePage(FMPage, Page); +end; + +destructor TFreeMultiBitmap.Destroy; +begin + if FMPage <> nil then Close; + inherited; +end; + +function TFreeMultiBitmap.GetLockedPageNumbers(var Pages, + Count: Integer): Boolean; +begin + Result := False; + if not IsValid then Exit; + Result := FreeImage_GetLockedPageNumbers(FMPage, Pages, Count) +end; + +function TFreeMultiBitmap.GetPageCount: Integer; +begin + Result := 0; + if IsValid then + Result := FreeImage_GetPageCount(FMPage) +end; + +procedure TFreeMultiBitmap.InsertPage(Page: Integer; Bitmap: TFreeBitmap); +begin + if IsValid then + FreeImage_InsertPage(FMPage, Page, Bitmap.FDib); +end; + +function TFreeMultiBitmap.IsValid: Boolean; +begin + Result := FMPage <> nil +end; + +procedure TFreeMultiBitmap.LockPage(Page: Integer; DestBitmap: TFreeBitmap); +begin + if not IsValid then Exit; + + if Assigned(DestBitmap) then + begin + DestBitmap.Replace(FreeImage_LockPage(FMPage, Page)); + end; +end; + +function TFreeMultiBitmap.MovePage(Target, Source: Integer): Boolean; +begin + Result := False; + if not IsValid then Exit; + Result := FreeImage_MovePage(FMPage, Target, Source); +end; + +function TFreeMultiBitmap.Open(const FileName: FreeImageAnsiString; CreateNew, + ReadOnly: Boolean; Flags: Integer): Boolean; +var + fif: FREE_IMAGE_FORMAT; +begin + Result := False; + +// modif NOVAXEL +// In order to try to get the file format even if the extension is not standard, +// we check first the file signature + fif := FreeImage_GetFileType(PAnsiChar(FileName), 0); + + if fif = FIF_UNKNOWN then + // no signature? +// end of modif NOVAXEL + // try to guess the file format from the filename + fif := FreeImage_GetFIFFromFilename(PAnsiChar(FileName)); + + // check for supported file types + if (fif <> FIF_UNKNOWN) and (not fif in [FIF_TIFF, FIF_ICO, FIF_GIF]) then + Exit; + + // open the stream + FMPage := FreeImage_OpenMultiBitmap(fif, PAnsiChar(FileName), CreateNew, ReadOnly, FMemoryCache, Flags); + + Result := FMPage <> nil; +end; + +procedure TFreeMultiBitmap.UnlockPage(Bitmap: TFreeBitmap; + Changed: Boolean); +begin + if IsValid then + begin + FreeImage_UnlockPage(FMPage, Bitmap.FDib, Changed); + // clear the image so that it becomes invalid. + // don't use Bitmap.Clear method because it calls FreeImage_Unload + // just clear the pointer + Bitmap.FDib := nil; + Bitmap.Change; + end; +end; + +{ TFreeMemoryIO } + +function TFreeMemoryIO.Acquire(var Data: PByte; + var SizeInBytes: DWORD): Boolean; +begin + Result := FreeImage_AcquireMemory(FHMem, Data, SizeInBytes); +end; + +constructor TFreeMemoryIO.Create(Data: PByte; SizeInBytes: DWORD); +begin + inherited Create; + FHMem := FreeImage_OpenMemory(Data, SizeInBytes); +end; + +destructor TFreeMemoryIO.Destroy; +begin + FreeImage_CloseMemory(FHMem); + inherited; +end; + +function TFreeMemoryIO.GetFileType: FREE_IMAGE_FORMAT; +begin + Result := FreeImage_GetFileTypeFromMemory(FHMem); +end; + +function TFreeMemoryIO.IsValid: Boolean; +begin + Result := FHMem <> nil +end; + +function TFreeMemoryIO.Read(fif: FREE_IMAGE_FORMAT; + Flag: Integer): PFIBITMAP; +begin + Result := FreeImage_LoadFromMemory(fif, FHMem, Flag) +end; + +function TFreeMemoryIO.Seek(Offset: Longint; Origin: Word): Boolean; +begin + Result := FreeImage_SeekMemory(FHMem, Offset, Origin) +end; + +function TFreeMemoryIO.Tell: Longint; +begin + Result := FreeImage_TellMemory(FHMem) +end; + +function TFreeMemoryIO.Write(fif: FREE_IMAGE_FORMAT; dib: PFIBITMAP; + Flag: Integer): Boolean; +begin + Result := FreeImage_SaveToMemory(fif, dib, FHMem, Flag) +end; + +{ TFreeTag } + +function TFreeTag.Clone: TFreeTag; +var + CloneTag: PFITAG; +begin + Result := nil; + if not IsValid then Exit; + + CloneTag := FreeImage_CloneTag(FTag); + Result := TFreeTag.Create(CloneTag); +end; + +constructor TFreeTag.Create(ATag: PFITAG); +begin + inherited Create; + + if ATag <> nil then + FTag := ATag + else + FTag := FreeImage_CreateTag; +end; + +destructor TFreeTag.Destroy; +begin + if IsValid then + FreeImage_DeleteTag(FTag); + + inherited; +end; + +function TFreeTag.GetCount: Cardinal; +begin + Result := 0; + if not IsValid then Exit; + + Result := FreeImage_GetTagCount(FTag); +end; + +function TFreeTag.GetDescription: AnsiString; +begin + Result := ''; + if not IsValid then Exit; + + Result := FreeImage_GetTagDescription(FTag); +end; + +function TFreeTag.GetID: Word; +begin + Result := 0; + if not IsValid then Exit; + + Result := FreeImage_GetTagID(FTag); +end; + +function TFreeTag.GetKey: AnsiString; +begin + Result := ''; + if not IsValid then Exit; + + Result := FreeImage_GetTagKey(FTag); +end; + +function TFreeTag.GetLength: Cardinal; +begin + Result := 0; + if not IsValid then Exit; + + Result := FreeImage_GetTagLength(FTag); +end; + +function TFreeTag.GetTagType: FREE_IMAGE_MDTYPE; +begin + Result := FIDT_NOTYPE; + if not IsValid then Exit; + + Result := FreeImage_GetTagType(FTag); +end; + +function TFreeTag.GetValue: Pointer; +begin + Result := nil; + if not IsValid then Exit; + + Result := FreeImage_GetTagValue(FTag); +end; + +function TFreeTag.IsValid: Boolean; +begin + Result := FTag <> nil; +end; + +procedure TFreeTag.SetCount(const Value: Cardinal); +begin + if IsValid then + FreeImage_SetTagCount(FTag, Value); +end; + +procedure TFreeTag.SetDescription(const Value: AnsiString); +begin + if IsValid then + FreeImage_SetTagDescription(FTag, PAnsiChar(Value)); +end; + +procedure TFreeTag.SetID(const Value: Word); +begin + if IsValid then + FreeImage_SetTagID(FTag, Value); +end; + +procedure TFreeTag.SetKey(const Value: AnsiString); +begin + if IsValid then + FreeImage_SetTagKey(FTag, PAnsiChar(Value)); +end; + +procedure TFreeTag.SetLength(const Value: Cardinal); +begin + if IsValid then + FreeImage_SetTagLength(FTag, Value); +end; + +procedure TFreeTag.SetTagType(const Value: FREE_IMAGE_MDTYPE); +begin + if IsValid then + FreeImage_SetTagType(FTag, Value); +end; + +procedure TFreeTag.SetValue(const Value: Pointer); +begin + if IsValid then + FreeImage_SetTagValue(FTag, Value); +end; + +function TFreeTag.ToString(Model: FREE_IMAGE_MDMODEL; Make: PAnsiChar): AnsiString; +begin + Result := FreeImage_TagToString(Model, FTag, Make); +end; + +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeImage.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeImage.pas new file mode 100644 index 0000000..66f0408 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeImage.pas @@ -0,0 +1,1746 @@ +unit FreeImage; + +// ========================================================== +// Delphi wrapper for FreeImage 3 +// +// Design and implementation by +// - Simon Beavis +// - Peter Byström +// - Anatoliy Pulyaevskiy (xvel84@rambler.ru) +// +// Contributors: +// - Lorenzo Monti (LM) lomo74@gmail.com +// - Maurício (MAU) mauricio_box@yahoo.com - see also http://sourceforge.net/projects/tcycomponents/ +// +// Revision history +// When Who What +// ----------- ----- ----------------------------------------------------------- +// 2010-07-14 LM Fixed some C->Delphi translation errors, +// updated to 3.13.1, made RAD2010 compliant (unicode) +// 2010-07-29 LM Added Free Pascal / Lazarus 32 bit support +// 2010-11-12 LM Updated to 3.14.1 +// 2011-02-15 LM Updated to 3.15.0 +// 2011-03-04 JMB Modifications to compile on Free Pascal / Lazarus 64 bits (tested on Windows 7 and linux OpenSuse) : +// - in 64 bits, the names of the exported function are different : +// e.g. : _FreeImage_AcquireMemory@12 in 32 bits and FreeImage_AcquireMemory in 64 bits +// so the define WIN32 will allow to distinguish 32 and 64 bits in the calls to the freeimage library +// - in 64 bits, the Boolean type is not correctly converted to freeimage BOOL type (integer 32 bits) +// ==> replace Boolean with LongBool in the calls to the freeimage library +// - as linux sees the difference between uppercase and lowercase : +// ==> replace FreeImage_GetMetaData with FreeImage_GetMetadata in the call to the freeimage library +// 2012-06-04 LM Updated to 3.15.3 +// 2012-12-08 LM Updated to 3.15.4 +// 2013-05-06 MAU Corrected calls definition to MAC OSX library +// 2013-11-25 MAU Added type FreeImageAnsiString for handling accents on MAC OSX filenames/path +// 2014-05-05 LM Updated to 3.16.1 +// + +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +interface + +{$MINENUMSIZE 4} // Make sure enums are stored as an integer to be compatible with C/C++ + +{$I 'Version.inc'} + +{$IFDEF MSWINDOWS} +uses Windows; + +type + FreeImageAnsiString = AnsiString; + +{$ELSE} +type + FreeImageAnsiString = UTF8String; + + LONG = LongInt; + DWORD = Cardinal; + + PDWORD = ^DWORD; + + BITMAPINFOHEADER = record + biSize : DWORD; + biWidth : LONG; + biHeight : LONG; + biPlanes : WORD; + biBitCount : WORD; + biCompression : DWORD; + biSizeImage : DWORD; + biXPelsPerMeter : LONG; + biYPelsPerMeter : LONG; + biClrUsed : DWORD; + biClrImportant : DWORD; + end; + LPBITMAPINFOHEADER = ^BITMAPINFOHEADER; + TBITMAPINFOHEADER = BITMAPINFOHEADER; + PBITMAPINFOHEADER = ^BITMAPINFOHEADER; + + RGBQUAD = record + rgbBlue : BYTE; + rgbGreen : BYTE; + rgbRed : BYTE; + rgbReserved : BYTE; + end; + tagRGBQUAD = RGBQUAD; + TRGBQUAD = RGBQUAD; + PRGBQUAD = ^RGBQUAD; + + BITMAPINFO = record + bmiHeader : BITMAPINFOHEADER; + bmiColors : array[0..0] of RGBQUAD; + end; + LPBITMAPINFO = ^BITMAPINFO; + PBITMAPINFO = ^BITMAPINFO; + TBITMAPINFO = BITMAPINFO; +// modif JMB NOVAXEL + HBITMAP = type LongWord; + HWND = type LongWord; + HDC = type LongWord; +// end of modif JMB NOVAXEL +{$ENDIF} + +const + FIDLL = {$IFDEF MSWINDOWS}'FreeImage.dll';{$ENDIF} + {$IFDEF LINUX}'libfreeimage.so';{$ENDIF} + {$IFDEF MACOS}'libfreeimage.dylib';{$ENDIF} + +const + // Version information + FREEIMAGE_MAJOR_VERSION = 3; + FREEIMAGE_MINOR_VERSION = 16; + FREEIMAGE_RELEASE_SERIAL = 1; + // This really only affects 24 and 32 bit formats, the rest are always RGB order. + FREEIMAGE_COLORORDER_BGR = 0; + FREEIMAGE_COLORORDER_RGB = 1; + FREEIMAGE_COLORORDER = FREEIMAGE_COLORORDER_BGR; + +// -------------------------------------------------------------------------- +// Bitmap types ------------------------------------------------------------- +// -------------------------------------------------------------------------- + +type + FIBITMAP = record + data: Pointer; + end; + PFIBITMAP = ^FIBITMAP; + + FIMULTIBITMAP = record + data: Pointer; + end; + PFIMULTIBITMAP = ^FIMULTIBITMAP; + +// -------------------------------------------------------------------------- +// Types used in the library (specific to FreeImage) ------------------------ +// -------------------------------------------------------------------------- + +type + {* 48-bit RGB } + tagFIRGB16 = packed record + red: WORD; + green: WORD; + blue: WORD; + end; + FIRGB16 = tagFIRGB16; + + {* 64-bit RGBA } + tagFIRGBA16 = packed record + red: WORD; + green: WORD; + blue: WORD; + alpha: WORD; + end; + FIRGBA16 = tagFIRGBA16; + + {* 96-bit RGB Float } + tagFIRGBF = packed record + red: Single; + green: Single; + blue: Single; + end; + FIRGBF = tagFIRGBF; + + {* 128-bit RGBA Float } + tagFIRGBAF = packed record + red: Single; + green: Single; + blue: Single; + alpha: Single; + end; + FIRGBAF = tagFIRGBAF; + + {* Data structure for COMPLEX type (complex number) } + tagFICOMPLEX = packed record + /// real part + r: Double; + /// imaginary part + i: Double; + end; + FICOMPLEX = tagFICOMPLEX; + +// -------------------------------------------------------------------------- +// Indexes for byte arrays, masks and shifts for treating pixels as words --- +// These coincide with the order of RGBQUAD and RGBTRIPLE ------------------- +// Little Endian (x86 / MS Windows, Linux) : BGR(A) order ------------------- +// -------------------------------------------------------------------------- + +const + FI_RGBA_RED = 2; + FI_RGBA_GREEN = 1; + FI_RGBA_BLUE = 0; + FI_RGBA_ALPHA = 3; + FI_RGBA_RED_MASK = $00FF0000; + FI_RGBA_GREEN_MASK = $0000FF00; + FI_RGBA_BLUE_MASK = $000000FF; + FI_RGBA_ALPHA_MASK = $FF000000; + FI_RGBA_RED_SHIFT = 16; + FI_RGBA_GREEN_SHIFT = 8; + FI_RGBA_BLUE_SHIFT = 0; + FI_RGBA_ALPHA_SHIFT = 24; + + FI_RGBA_RGB_MASK = FI_RGBA_RED_MASK or FI_RGBA_GREEN_MASK or FI_RGBA_BLUE_MASK; + +// -------------------------------------------------------------------------- +// The 16bit macros only include masks and shifts, -------------------------- +// since each color element is not byte aligned ----------------------------- +// -------------------------------------------------------------------------- + +const + FI16_555_RED_MASK = $7C00; + FI16_555_GREEN_MASK = $03E0; + FI16_555_BLUE_MASK = $001F; + FI16_555_RED_SHIFT = 10; + FI16_555_GREEN_SHIFT = 5; + FI16_555_BLUE_SHIFT = 0; + FI16_565_RED_MASK = $F800; + FI16_565_GREEN_MASK = $07E0; + FI16_565_BLUE_MASK = $001F; + FI16_565_RED_SHIFT = 11; + FI16_565_GREEN_SHIFT = 5; + FI16_565_BLUE_SHIFT = 0; + +// -------------------------------------------------------------------------- +// ICC profile support ------------------------------------------------------ +// -------------------------------------------------------------------------- + +const + FIICC_DEFAULT = $0; + FIICC_COLOR_IS_CMYK = $1; + +type + FIICCPROFILE = record + flags: WORD; // info flag + size: DWORD; // profile's size measured in bytes + data: Pointer; // points to a block of contiguous memory containing the profile + end; + PFIICCPROFILE = ^FIICCPROFILE; + +// -------------------------------------------------------------------------- +// Important enums ---------------------------------------------------------- +// -------------------------------------------------------------------------- + +type + FREE_IMAGE_FORMAT = type Integer; + FREE_IMAGE_TYPE = type Integer; + FREE_IMAGE_COLOR_TYPE = type Integer; + FREE_IMAGE_QUANTIZE = type Integer; + FREE_IMAGE_DITHER = type Integer; + FREE_IMAGE_FILTER = type Integer; + FREE_IMAGE_COLOR_CHANNEL = type Integer; + FREE_IMAGE_MDTYPE = type Integer; + FREE_IMAGE_MDMODEL = type Integer; + FREE_IMAGE_JPEG_OPERATION = type Integer; + FREE_IMAGE_TMO = type Integer; + +const + // I/O image format identifiers. + FIF_UNKNOWN = FREE_IMAGE_FORMAT(-1); + FIF_BMP = FREE_IMAGE_FORMAT(0); + FIF_ICO = FREE_IMAGE_FORMAT(1); + FIF_JPEG = FREE_IMAGE_FORMAT(2); + FIF_JNG = FREE_IMAGE_FORMAT(3); + FIF_KOALA = FREE_IMAGE_FORMAT(4); + FIF_LBM = FREE_IMAGE_FORMAT(5); + FIF_IFF = FIF_LBM; + FIF_MNG = FREE_IMAGE_FORMAT(6); + FIF_PBM = FREE_IMAGE_FORMAT(7); + FIF_PBMRAW = FREE_IMAGE_FORMAT(8); + FIF_PCD = FREE_IMAGE_FORMAT(9); + FIF_PCX = FREE_IMAGE_FORMAT(10); + FIF_PGM = FREE_IMAGE_FORMAT(11); + FIF_PGMRAW = FREE_IMAGE_FORMAT(12); + FIF_PNG = FREE_IMAGE_FORMAT(13); + FIF_PPM = FREE_IMAGE_FORMAT(14); + FIF_PPMRAW = FREE_IMAGE_FORMAT(15); + FIF_RAS = FREE_IMAGE_FORMAT(16); + FIF_TARGA = FREE_IMAGE_FORMAT(17); + FIF_TIFF = FREE_IMAGE_FORMAT(18); + FIF_WBMP = FREE_IMAGE_FORMAT(19); + FIF_PSD = FREE_IMAGE_FORMAT(20); + FIF_CUT = FREE_IMAGE_FORMAT(21); + FIF_XBM = FREE_IMAGE_FORMAT(22); + FIF_XPM = FREE_IMAGE_FORMAT(23); + FIF_DDS = FREE_IMAGE_FORMAT(24); + FIF_GIF = FREE_IMAGE_FORMAT(25); + FIF_HDR = FREE_IMAGE_FORMAT(26); + FIF_FAXG3 = FREE_IMAGE_FORMAT(27); + FIF_SGI = FREE_IMAGE_FORMAT(28); + FIF_EXR = FREE_IMAGE_FORMAT(29); + FIF_J2K = FREE_IMAGE_FORMAT(30); + FIF_JP2 = FREE_IMAGE_FORMAT(31); + FIF_PFM = FREE_IMAGE_FORMAT(32); + FIF_PICT = FREE_IMAGE_FORMAT(33); + FIF_RAW = FREE_IMAGE_FORMAT(34); + FIF_WEBP = FREE_IMAGE_FORMAT(35); + FIF_JXR = FREE_IMAGE_FORMAT(36); + + // Image type used in FreeImage. + FIT_UNKNOWN = FREE_IMAGE_TYPE(0); // unknown type + FIT_BITMAP = FREE_IMAGE_TYPE(1); // standard image: 1-, 4-, 8-, 16-, 24-, 32-bit + FIT_UINT16 = FREE_IMAGE_TYPE(2); // array of unsigned short: unsigned 16-bit + FIT_INT16 = FREE_IMAGE_TYPE(3); // array of short: signed 16-bit + FIT_UINT32 = FREE_IMAGE_TYPE(4); // array of unsigned long: unsigned 32-bit + FIT_INT32 = FREE_IMAGE_TYPE(5); // array of long: signed 32-bit + FIT_FLOAT = FREE_IMAGE_TYPE(6); // array of float: 32-bit IEEE floating point + FIT_DOUBLE = FREE_IMAGE_TYPE(7); // array of double: 64-bit IEEE floating point + FIT_COMPLEX = FREE_IMAGE_TYPE(8); // array of FICOMPLEX: 2 x 64-bit IEEE floating point + FIT_RGB16 = FREE_IMAGE_TYPE(9); // 48-bit RGB image: 3 x 16-bit + FIT_RGBA16 = FREE_IMAGE_TYPE(10); // 64-bit RGBA image: 4 x 16-bit + FIT_RGBF = FREE_IMAGE_TYPE(11); // 96-bit RGB float image: 3 x 32-bit IEEE floating point + FIT_RGBAF = FREE_IMAGE_TYPE(12); // 128-bit RGBA float image: 4 x 32-bit IEEE floating point + + // Image color type used in FreeImage. + FIC_MINISWHITE = FREE_IMAGE_COLOR_TYPE(0); // min value is white + FIC_MINISBLACK = FREE_IMAGE_COLOR_TYPE(1); // min value is black + FIC_RGB = FREE_IMAGE_COLOR_TYPE(2); // RGB color model + FIC_PALETTE = FREE_IMAGE_COLOR_TYPE(3); // color map indexed + FIC_RGBALPHA = FREE_IMAGE_COLOR_TYPE(4); // RGB color model with alpha channel + FIC_CMYK = FREE_IMAGE_COLOR_TYPE(5); // CMYK color model + + // Color quantization algorithms. Constants used in FreeImage_ColorQuantize. + FIQ_WUQUANT = FREE_IMAGE_QUANTIZE(0); // Xiaolin Wu color quantization algorithm + FIQ_NNQUANT = FREE_IMAGE_QUANTIZE(1); // NeuQuant neural-net quantization algorithm by Anthony Dekker + + // Dithering algorithms. Constants used FreeImage_Dither. + FID_FS = FREE_IMAGE_DITHER(0); // Floyd & Steinberg error diffusion + FID_BAYER4x4 = FREE_IMAGE_DITHER(1); // Bayer ordered dispersed dot dithering (order 2 dithering matrix) + FID_BAYER8x8 = FREE_IMAGE_DITHER(2); // Bayer ordered dispersed dot dithering (order 3 dithering matrix) + FID_CLUSTER6x6 = FREE_IMAGE_DITHER(3); // Ordered clustered dot dithering (order 3 - 6x6 matrix) + FID_CLUSTER8x8 = FREE_IMAGE_DITHER(4); // Ordered clustered dot dithering (order 4 - 8x8 matrix) + FID_CLUSTER16x16 = FREE_IMAGE_DITHER(5); // Ordered clustered dot dithering (order 8 - 16x16 matrix) + FID_BAYER16x16 = FREE_IMAGE_DITHER(6); // Bayer ordered dispersed dot dithering (order 4 dithering matrix) + + // Lossless JPEG transformations Constants used in FreeImage_JPEGTransform + FIJPEG_OP_NONE = FREE_IMAGE_JPEG_OPERATION(0); // no transformation + FIJPEG_OP_FLIP_H = FREE_IMAGE_JPEG_OPERATION(1); // horizontal flip + FIJPEG_OP_FLIP_V = FREE_IMAGE_JPEG_OPERATION(2); // vertical flip + FIJPEG_OP_TRANSPOSE = FREE_IMAGE_JPEG_OPERATION(3); // transpose across UL-to-LR axis + FIJPEG_OP_TRANSVERSE = FREE_IMAGE_JPEG_OPERATION(4); // transpose across UR-to-LL axis + FIJPEG_OP_ROTATE_90 = FREE_IMAGE_JPEG_OPERATION(5); // 90-degree clockwise rotation + FIJPEG_OP_ROTATE_180 = FREE_IMAGE_JPEG_OPERATION(6); // 180-degree rotation + FIJPEG_OP_ROTATE_270 = FREE_IMAGE_JPEG_OPERATION(7); // 270-degree clockwise (or 90 ccw) + + // Tone mapping operators. Constants used in FreeImage_ToneMapping. + FITMO_DRAGO03 = FREE_IMAGE_TMO(0); // Adaptive logarithmic mapping (F. Drago, 2003) + FITMO_REINHARD05 = FREE_IMAGE_TMO(1); // Dynamic range reduction inspired by photoreceptor physiology (E. Reinhard, 2005) + FITMO_FATTAL02 = FREE_IMAGE_TMO(2); // Gradient domain high dynamic range compression (R. Fattal, 2002) + + // Upsampling / downsampling filters. Constants used in FreeImage_Rescale. + FILTER_BOX = FREE_IMAGE_FILTER(0); // Box, pulse, Fourier window, 1st order (constant) b-spline + FILTER_BICUBIC = FREE_IMAGE_FILTER(1); // Mitchell & Netravali's two-param cubic filter + FILTER_BILINEAR = FREE_IMAGE_FILTER(2); // Bilinear filter + FILTER_BSPLINE = FREE_IMAGE_FILTER(3); // 4th order (cubic) b-spline + FILTER_CATMULLROM = FREE_IMAGE_FILTER(4); // Catmull-Rom spline, Overhauser spline + FILTER_LANCZOS3 = FREE_IMAGE_FILTER(5); // Lanczos3 filter + + // Color channels. Constants used in color manipulation routines. + FICC_RGB = FREE_IMAGE_COLOR_CHANNEL(0); // Use red, green and blue channels + FICC_RED = FREE_IMAGE_COLOR_CHANNEL(1); // Use red channel + FICC_GREEN = FREE_IMAGE_COLOR_CHANNEL(2); // Use green channel + FICC_BLUE = FREE_IMAGE_COLOR_CHANNEL(3); // Use blue channel + FICC_ALPHA = FREE_IMAGE_COLOR_CHANNEL(4); // Use alpha channel + FICC_BLACK = FREE_IMAGE_COLOR_CHANNEL(5); // Use black channel + FICC_REAL = FREE_IMAGE_COLOR_CHANNEL(6); // Complex images: use real part + FICC_IMAG = FREE_IMAGE_COLOR_CHANNEL(7); // Complex images: use imaginary part + FICC_MAG = FREE_IMAGE_COLOR_CHANNEL(8); // Complex images: use magnitude + FICC_PHASE = FREE_IMAGE_COLOR_CHANNEL(9); // Complex images: use phase + + // Tag data type information (based on TIFF specifications) + FIDT_NOTYPE = FREE_IMAGE_MDTYPE(0); // placeholder + FIDT_BYTE = FREE_IMAGE_MDTYPE(1); // 8-bit unsigned integer + FIDT_ASCII = FREE_IMAGE_MDTYPE(2); // 8-bit bytes w/ last byte null + FIDT_SHORT = FREE_IMAGE_MDTYPE(3); // 16-bit unsigned integer + FIDT_LONG = FREE_IMAGE_MDTYPE(4); // 32-bit unsigned integer + FIDT_RATIONAL = FREE_IMAGE_MDTYPE(5); // 64-bit unsigned fraction + FIDT_SBYTE = FREE_IMAGE_MDTYPE(6); // 8-bit signed integer + FIDT_UNDEFINED = FREE_IMAGE_MDTYPE(7); // 8-bit untyped data + FIDT_SSHORT = FREE_IMAGE_MDTYPE(8); // 16-bit signed integer + FIDT_SLONG = FREE_IMAGE_MDTYPE(9); // 32-bit signed integer + FIDT_SRATIONAL = FREE_IMAGE_MDTYPE(10); // 64-bit signed fraction + FIDT_FLOAT = FREE_IMAGE_MDTYPE(11); // 32-bit IEEE floating point + FIDT_DOUBLE = FREE_IMAGE_MDTYPE(12); // 64-bit IEEE floating point + FIDT_IFD = FREE_IMAGE_MDTYPE(13); // 32-bit unsigned integer (offset) + FIDT_PALETTE = FREE_IMAGE_MDTYPE(14); // 32-bit RGBQUAD + FIDT_LONG8 = FREE_IMAGE_MDTYPE(16); // 64-bit unsigned integer + FIDT_SLONG8 = FREE_IMAGE_MDTYPE(17); // 64-bit signed integer + FIDT_IFD8 = FREE_IMAGE_MDTYPE(18); // 64-bit unsigned integer (offset) + + // Metadata models supported by FreeImage + FIMD_NODATA = FREE_IMAGE_MDMODEL(-1); + FIMD_COMMENTS = FREE_IMAGE_MDMODEL(0); // single comment or keywords + FIMD_EXIF_MAIN = FREE_IMAGE_MDMODEL(1); // Exif-TIFF metadata + FIMD_EXIF_EXIF = FREE_IMAGE_MDMODEL(2); // Exif-specific metadata + FIMD_EXIF_GPS = FREE_IMAGE_MDMODEL(3); // Exif GPS metadata + FIMD_EXIF_MAKERNOTE = FREE_IMAGE_MDMODEL(4); // Exif maker note metadata + FIMD_EXIF_INTEROP = FREE_IMAGE_MDMODEL(5); // Exif interoperability metadata + FIMD_IPTC = FREE_IMAGE_MDMODEL(6); // IPTC/NAA metadata + FIMD_XMP = FREE_IMAGE_MDMODEL(7); // Abobe XMP metadata + FIMD_GEOTIFF = FREE_IMAGE_MDMODEL(8); // GeoTIFF metadata (to be implemented) + FIMD_ANIMATION = FREE_IMAGE_MDMODEL(9); // Animation metadata + FIMD_CUSTOM = FREE_IMAGE_MDMODEL(10); // Used to attach other metadata types to a dib + FIMD_EXIF_RAW = FREE_IMAGE_MDMODEL(11); // Exif metadata as a raw buffer + +type + // Handle to a metadata model + FIMETADATA = record + data: Pointer; + end; + PFIMETADATA = ^FIMETADATA; + + // Handle to a metadata tag + FITAG = record + data: Pointer; + end; + PFITAG = ^FITAG; + +// -------------------------------------------------------------------------- +// File IO routines --------------------------------------------------------- +// -------------------------------------------------------------------------- + +type + fi_handle = Pointer; + + FI_ReadProc = function(buffer: Pointer; size, count: Cardinal; + handle: fi_handle): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_WriteProc = function(buffer: Pointer; size, count: Cardinal; + handle: fi_handle): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_SeekProc = function(handle: fi_handle; offset: LongInt; + origin: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_TellProc = function(handle: fi_handle): LongInt; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + + FreeImageIO = packed record + read_proc : FI_ReadProc; // pointer to the function used to read data + write_proc: FI_WriteProc; // pointer to the function used to write data + seek_proc : FI_SeekProc; // pointer to the function used to seek + tell_proc : FI_TellProc; // pointer to the function used to aquire the current position + end; + PFreeImageIO = ^FreeImageIO; + + // Handle to a memory I/O stream + FIMEMORY = record + data: Pointer; + end; + PFIMEMORY = ^FIMEMORY; + +const + // constants used in FreeImage_Seek for Origin parameter + SEEK_SET = 0; + SEEK_CUR = 1; + SEEK_END = 2; + +//type + // define portable types for 32-bit / 64-bit OS + //FIINT64 = Int64; + //FIUINT64 = UInt64; + +// -------------------------------------------------------------------------- +// Plugin routines ---------------------------------------------------------- +// -------------------------------------------------------------------------- + +type + PPlugin = ^Plugin; + + FI_FormatProc = function: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_DescriptionProc = function: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_ExtensionListProc = function: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_RegExprProc = function: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_OpenProc = function(io: PFreeImageIO; handle: fi_handle; + read: LongBool): Pointer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_CloseProc = procedure(io: PFreeImageIO; handle: fi_handle; + data: Pointer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_PageCountProc = function(io: PFreeImageIO; handle: fi_handle; + data: Pointer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_PageCapabilityProc = function(io: PFreeImageIO; handle: fi_handle; + data: Pointer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_LoadProc = function(io: PFreeImageIO; handle: fi_handle; page, flags: Integer; + data: Pointer): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_SaveProc = function(io: PFreeImageIO; dib: PFIBITMAP; handle: fi_handle; + page, flags: Integer; data: Pointer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_ValidateProc = function(io: PFreeImageIO; handle: fi_handle): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_MimeProc = function: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_SupportsExportBPPProc = function(bpp: integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_SupportsExportTypeProc = function(_type: FREE_IMAGE_TYPE): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_SupportsICCProfilesProc = function: LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + FI_SupportsNoPixelsProc = function: LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + + Plugin = record + format_proc: FI_FormatProc; + description_proc: FI_DescriptionProc; + extension_proc: FI_ExtensionListProc; + regexpr_proc: FI_RegExprProc; + open_proc: FI_OpenProc; + close_proc: FI_CloseProc; + pagecount_proc: FI_PageCountProc; + pagecapability_proc: FI_PageCapabilityProc; + load_proc: FI_LoadProc; + save_proc: FI_SaveProc; + validate_proc: FI_ValidateProc; + mime_proc: FI_MimeProc; + supports_export_bpp_proc: FI_SupportsExportBPPProc; + supports_export_type_proc: FI_SupportsExportTypeProc; + supports_icc_profiles_proc: FI_SupportsICCProfilesProc; + supports_no_pixels_proc: FI_SupportsNoPixelsProc; + end; + + FI_InitProc = procedure(aplugin: PPlugin; format_id: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + +// -------------------------------------------------------------------------- +// Load/Save flag constants ------------------------------------------------- +// -------------------------------------------------------------------------- + +const + FIF_LOAD_NOPIXELS = $8000; //! loading: load the image header only (not supported by all plugins, default to full loading) + BMP_DEFAULT = 0; + BMP_SAVE_RLE = 1; + CUT_DEFAULT = 0; + DDS_DEFAULT = 0; + EXR_DEFAULT = 0; //! save data as half with piz-based wavelet compression + EXR_FLOAT = $0001; //! save data as float instead of as half (not recommended) + EXR_NONE = $0002; //! save with no compression + EXR_ZIP = $0004; //! save with zlib compression, in blocks of 16 scan lines + EXR_PIZ = $0008; //! save with piz-based wavelet compression + EXR_PXR24 = $0010; //! save with lossy 24-bit float compression + EXR_B44 = $0020; //! save with lossy 44% float compression - goes to 22% when combined with EXR_LC + EXR_LC = $0040; //! save images with one luminance and two chroma channels, rather than as RGB (lossy compression) + FAXG3_DEFAULT = 0; + GIF_DEFAULT = 0; + GIF_LOAD256 = 1; //! Load the image as a 256 color image with ununsed palette entries, if it's 16 or 2 color + GIF_PLAYBACK = 2; //! 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading + HDR_DEFAULT = 0; + ICO_DEFAULT = 0; + ICO_MAKEALPHA = 1; //! convert to 32bpp and create an alpha channel from the AND-mask when loading + IFF_DEFAULT = 0; + J2K_DEFAULT = 0; //! save with a 16:1 rate + JP2_DEFAULT = 0; //! save with a 16:1 rate + JPEG_DEFAULT = 0; //! loading (see JPEG_FAST); saving (see JPEG_QUALITYGOOD|JPEG_SUBSAMPLING_420) + JPEG_FAST = 1; //! load the file as fast as possible, sacrificing some quality + JPEG_ACCURATE = 2; //! load the file with the best quality, sacrificing some speed + JPEG_CMYK = $0004; //! load separated CMYK "as is" (use | to combine with other flags) + JPEG_EXIFROTATE = $0008; //! load and rotate according to Exif 'Orientation' tag if available + JPEG_GREYSCALE = $0010; //! load and convert to a 8-bit greyscale image + JPEG_QUALITYSUPERB = $0080; //! save with superb quality (100:1) + JPEG_QUALITYGOOD = $0100; //! save with good quality (75:1) + JPEG_QUALITYNORMAL = $0200; //! save with normal quality (50:1) + JPEG_QUALITYAVERAGE = $0400; //! save with average quality (25:1) + JPEG_QUALITYBAD = $0800; //! save with bad quality (10:1) + JPEG_PROGRESSIVE = $2000; //! save as a progressive-JPEG (use | to combine with other save flags) + JPEG_SUBSAMPLING_411 = $1000; //! save with high 4x1 chroma subsampling (4:1:1) + JPEG_SUBSAMPLING_420 = $4000; //! save with medium 2x2 medium chroma subsampling (4:2:0) - default value + JPEG_SUBSAMPLING_422 = $8000; //! save with low 2x1 chroma subsampling (4:2:2) + JPEG_SUBSAMPLING_444 = $10000; //! save with no chroma subsampling (4:4:4) + JPEG_OPTIMIZE = $20000; //! on saving, compute optimal Huffman coding tables (can reduce a few percent of file size) + JPEG_BASELINE = $40000; //! save basic JPEG, without metadata or any markers + KOALA_DEFAULT = 0; + LBM_DEFAULT = 0; + MNG_DEFAULT = 0; + PCD_DEFAULT = 0; + PCD_BASE = 1; //! load the bitmap sized 768 x 512 + PCD_BASEDIV4 = 2; //! load the bitmap sized 384 x 256 + PCD_BASEDIV16 = 3; //! load the bitmap sized 192 x 128 + PCX_DEFAULT = 0; + PFM_DEFAULT = 0; + PICT_DEFAULT = 0; + PNG_DEFAULT = 0; + PNG_IGNOREGAMMA = 1; //! loading: avoid gamma correction + PNG_Z_BEST_SPEED = $0001; //! save using ZLib level 1 compression flag (default value is 6) + PNG_Z_DEFAULT_COMPRESSION = $0006; //! save using ZLib level 6 compression flag (default recommended value) + PNG_Z_BEST_COMPRESSION = $0009; //! save using ZLib level 9 compression flag (default value is 6) + PNG_Z_NO_COMPRESSION = $0100; //! save without ZLib compression + PNG_INTERLACED = $0200; //! save using Adam7 interlacing (use | to combine with other save flags) + PNM_DEFAULT = 0; + PNM_SAVE_RAW = 0; //! if set the writer saves in RAW format (i.e. P4, P5 or P6) + PNM_SAVE_ASCII = 1; //! if set the writer saves in ASCII format (i.e. P1, P2 or P3) + PSD_DEFAULT = 0; + PSD_CMYK = 1; //! reads tags for separated CMYK (default is conversion to RGB) + PSD_LAB = 2; //! reads tags for CIELab (default is conversion to RGB) + RAS_DEFAULT = 0; + RAW_DEFAULT = 0; //! load the file as linear RGB 48-bit + RAW_PREVIEW = 1; //! try to load the embedded JPEG preview with included Exif Data or default to RGB 24-bit + RAW_DISPLAY = 2; //! load the file as RGB 24-bit + RAW_HALFSIZE = 4; //! output a half-size color image + SGI_DEFAULT = 0; + TARGA_DEFAULT = 0; + TARGA_LOAD_RGB888 = 1; //! if set the loader converts RGB555 and ARGB8888 -> RGB888. + TARGA_SAVE_RLE = 2; //! if set, the writer saves with RLE compression + TIFF_DEFAULT = 0; + TIFF_CMYK = $0001; //! reads/stores tags for separated CMYK (use | to combine with compression flags) + TIFF_PACKBITS = $0100; //! save using PACKBITS compression + TIFF_DEFLATE = $0200; //! save using DEFLATE compression + TIFF_ADOBE_DEFLATE = $0400; //! save using ADOBE DEFLATE compression + TIFF_NONE = $0800; //! save without any compression + TIFF_CCITTFAX3 = $1000; //! save using CCITT Group 3 fax encoding + TIFF_CCITTFAX4 = $2000; //! save using CCITT Group 4 fax encoding + TIFF_LZW = $4000; //! save using LZW compression + TIFF_JPEG = $8000; //! save using JPEG compression + TIFF_LOGLUV = $10000; //! save using LogLuv compression + WBMP_DEFAULT = 0; + XBM_DEFAULT = 0; + XPM_DEFAULT = 0; + WEBP_DEFAULT = 0; //! save with good quality (75:1) + WEBP_LOSSLESS = $100; //! save in lossless mode + JXR_DEFAULT = 0; //! save with quality 80 and no chroma subsampling (4:4:4) + JXR_LOSSLESS = $0064; //! save lossless + JXR_PROGRESSIVE = $2000; //! save as a progressive-JXR (use | to combine with other save flags) + +// -------------------------------------------------------------------------- +// Background filling options ----------------------------------------------- +// Constants used in FreeImage_FillBackground and FreeImage_EnlargeCanvas +// -------------------------------------------------------------------------- + +const + FI_COLOR_IS_RGB_COLOR = $00; // RGBQUAD color is a RGB color (contains no valid alpha channel) + FI_COLOR_IS_RGBA_COLOR = $01; // RGBQUAD color is a RGBA color (contains a valid alpha channel) + FI_COLOR_FIND_EQUAL_COLOR = $02; // For palettized images: lookup equal RGB color from palette + FI_COLOR_ALPHA_IS_INDEX = $04; // The color's rgbReserved member (alpha) contains the palette index to be used + FI_COLOR_PALETTE_SEARCH_MASK = FI_COLOR_FIND_EQUAL_COLOR or FI_COLOR_ALPHA_IS_INDEX; // No color lookup is performed + +// -------------------------------------------------------------------------- +// Init/Error routines ------------------------------------------------------ +// -------------------------------------------------------------------------- + +procedure FreeImage_Initialise(load_local_plugins_only: LongBool = False); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Initialise@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Initialise'{$ENDIF}; +procedure FreeImage_DeInitialise; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_DeInitialise@0'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_DeInitialise'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Version routines --------------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_GetVersion: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetVersion@0'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetVersion'{$ENDIF}; +function FreeImage_GetCopyrightMessage: PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetCopyrightMessage@0'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetCopyrightMessage'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Message output functions ------------------------------------------------- +// -------------------------------------------------------------------------- + +type + FreeImage_OutputMessageFunction = procedure(fif: FREE_IMAGE_FORMAT; + msg: PAnsiChar); cdecl; + FreeImage_OutputMessageFunctionStdCall = procedure(fif: FREE_IMAGE_FORMAT; + msg: PAnsiChar); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + +procedure FreeImage_SetOutputMessageStdCall(omf: FreeImage_OutputMessageFunctionStdCall); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetOutputMessageStdCall@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetOutputMessageStdCall'{$ENDIF}; +procedure FreeImage_SetOutputMessage(omf: FreeImage_OutputMessageFunction); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetOutputMessage@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetOutputMessage'{$ENDIF}; + +{$IFDEF DELPHI6} +//this is declared stdcall in the C header but it is actually cdecl. +//with varargs functions, clearing the stack is caller's responsibility +//(since the callee doesn't know how many parameters were passed). +//cdecl is the right convention here, not stdcall +procedure FreeImage_OutputMessageProc(fif: Integer; fmt: PAnsiChar); cdecl; varargs; + external FIDLL; +{$ELSE} +//older Delphi versions (<6) do not support varargs. +//we provide a wrapper that uses open arrays instead +procedure FreeImage_OutputMessageProc(fif: Integer; fmt: PAnsiChar; args: array of const); +{$ENDIF} + +// -------------------------------------------------------------------------- +// Allocate / Clone / Unload routines --------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_Allocate(width, height, bpp: Integer; red_mask: Cardinal = 0; + green_mask: Cardinal = 0; blue_mask: Cardinal = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Allocate@24'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Allocate'{$ENDIF}; +function FreeImage_AllocateT(_type: FREE_IMAGE_TYPE; width, height: Integer; + bpp: Integer = 8; red_mask: Cardinal = 0; green_mask: Cardinal = 0; + blue_mask: Cardinal = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AllocateT@28'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AllocateT'{$ENDIF}; +function FreeImage_Clone(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Clone@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Clone'{$ENDIF}; +procedure FreeImage_Unload(dib: PFIBITMAP); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Unload@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Unload'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Header loading routines +// -------------------------------------------------------------------------- +function FreeImage_HasPixels(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_HasPixels@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_HasPixels'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Load / Save routines ----------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_Load(fif: FREE_IMAGE_FORMAT; filename: PAnsiChar; + flags: Integer = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Load@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Load'{$ENDIF}; +function FreeImage_LoadU(fif: FREE_IMAGE_FORMAT; filename: PWideChar; + flags: Integer = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LoadU@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LoadU'{$ENDIF}; +function FreeImage_LoadFromHandle(fif: FREE_IMAGE_FORMAT; io: PFreeImageIO; + handle: fi_handle; flags: Integer = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LoadFromHandle@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LoadFromHandle'{$ENDIF}; +function FreeImage_Save(fif: FREE_IMAGE_FORMAT; dib: PFIBITMAP; filename: PAnsiChar; + flags: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Save@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Save'{$ENDIF}; +function FreeImage_SaveU(fif: FREE_IMAGE_FORMAT; dib: PFIBITMAP; filename: PWideChar; + flags: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SaveU@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SaveU'{$ENDIF}; +function FreeImage_SaveToHandle(fif: FREE_IMAGE_FORMAT; dib: PFIBITMAP; + io: PFreeImageIO; handle: fi_handle; flags: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SaveToHandle@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SaveToHandle'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Memory I/O stream routines ----------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_OpenMemory(data: PByte = nil; size_in_bytes: DWORD = 0): PFIMEMORY; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_OpenMemory@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_OpenMemory'{$ENDIF}; +procedure FreeImage_CloseMemory(stream: PFIMEMORY); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_CloseMemory@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_CloseMemory'{$ENDIF}; +function FreeImage_LoadFromMemory(fif: FREE_IMAGE_FORMAT; stream: PFIMEMORY; + flags: Integer = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LoadFromMemory@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LoadFromMemory'{$ENDIF}; +function FreeImage_SaveToMemory(fif: FREE_IMAGE_FORMAT; dib: PFIBITMAP; + stream: PFIMEMORY; flags: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SaveToMemory@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SaveToMemory'{$ENDIF}; +function FreeImage_TellMemory(stream: PFIMEMORY): LongInt; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_TellMemory@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_TellMemory'{$ENDIF}; +function FreeImage_SeekMemory(stream: PFIMEMORY; offset: LongInt; + origin: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SeekMemory@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SeekMemory'{$ENDIF}; +function FreeImage_AcquireMemory(stream: PFIMEMORY; var data: PByte; + var size_in_bytes: DWORD): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AcquireMemory@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AcquireMemory'{$ENDIF}; +function FreeImage_ReadMemory(buffer: Pointer; size, count: Cardinal; + stream: PFIMEMORY): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ReadMemory@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ReadMemory'{$ENDIF}; +function FreeImage_WriteMemory(buffer: Pointer; size, count: Cardinal; + stream: PFIMEMORY): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_WriteMemory@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_WriteMemory'{$ENDIF}; +function FreeImage_LoadMultiBitmapFromMemory(fif: FREE_IMAGE_FORMAT; stream: PFIMEMORY; + flags: Integer = 0): PFIMULTIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LoadMultiBitmapFromMemory@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LoadMultiBitmapFromMemory'{$ENDIF}; +function FreeImage_SaveMultiBitmapToMemory(fif: FREE_IMAGE_FORMAT; bitmap: PFIMULTIBITMAP; + stream: PFIMEMORY; flags: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SaveMultiBitmapToMemory@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SaveMultiBitmapToMemory'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Plugin Interface --------------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_RegisterLocalPlugin(proc_address: FI_InitProc; format: PAnsiChar = nil; + description: PAnsiChar = nil; extension: PAnsiChar = nil; + regexpr: PAnsiChar = nil): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_RegisterLocalPlugin@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_RegisterLocalPlugin'{$ENDIF}; +function FreeImage_RegisterExternalPlugin(path: PAnsiChar; format: PAnsiChar = nil; + description: PAnsiChar = nil; extension: PAnsiChar = nil; + regexpr: PAnsiChar = nil): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_RegisterExternalPlugin@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_RegisterExternalPlugin'{$ENDIF}; +function FreeImage_GetFIFCount: Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFCount@0'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFCount'{$ENDIF}; +procedure FreeImage_SetPluginEnabled(fif: FREE_IMAGE_FORMAT; enable: LongBool); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetPluginEnabled@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetPluginEnabled'{$ENDIF}; +function FreeImage_IsPluginEnabled(fif: FREE_IMAGE_FORMAT): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_IsPluginEnabled@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_IsPluginEnabled'{$ENDIF}; +function FreeImage_GetFIFFromFormat(format: PAnsiChar): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFFromFormat@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFFromFormat'{$ENDIF}; +function FreeImage_GetFIFFromMime(mime: PAnsiChar): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFFromMime@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFFromMime'{$ENDIF}; +function FreeImage_GetFormatFromFIF(fif: FREE_IMAGE_FORMAT): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFormatFromFIF@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFormatFromFIF'{$ENDIF}; +function FreeImage_GetFIFExtensionList(fif: FREE_IMAGE_FORMAT): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFExtensionList@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFExtensionList'{$ENDIF}; +function FreeImage_GetFIFDescription(fif: FREE_IMAGE_FORMAT): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFDescription@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFDescription'{$ENDIF}; +function FreeImage_GetFIFRegExpr(fif: FREE_IMAGE_FORMAT): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFRegExpr@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFRegExpr'{$ENDIF}; +function FreeImage_GetFIFMimeType(fif: FREE_IMAGE_FORMAT): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFMimeType@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFMimeType'{$ENDIF}; +function FreeImage_GetFIFFromFilename(filename: PAnsiChar): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFFromFilename@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFFromFilename'{$ENDIF}; +function FreeImage_GetFIFFromFilenameU(filename: PWideChar): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFIFFromFilenameU@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFIFFromFilenameU'{$ENDIF}; +function FreeImage_FIFSupportsReading(fif: FREE_IMAGE_FORMAT): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FIFSupportsReading@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FIFSupportsReading'{$ENDIF}; +function FreeImage_FIFSupportsWriting(fif: FREE_IMAGE_FORMAT): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FIFSupportsWriting@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FIFSupportsWriting'{$ENDIF}; +function FreeImage_FIFSupportsExportBPP(fif: FREE_IMAGE_FORMAT; + bpp: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FIFSupportsExportBPP@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FIFSupportsExportBPP'{$ENDIF}; +function FreeImage_FIFSupportsExportType(fif: FREE_IMAGE_FORMAT; + _type: FREE_IMAGE_TYPE): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FIFSupportsExportType@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FIFSupportsExportType'{$ENDIF}; +function FreeImage_FIFSupportsICCProfiles(fif: FREE_IMAGE_FORMAT): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FIFSupportsICCProfiles@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FIFSupportsICCProfiles'{$ENDIF}; +function FreeImage_FIFSupportsNoPixels(fif: FREE_IMAGE_FORMAT): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FIFSupportsNoPixels@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FIFSupportsNoPixels'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Multipaging interface ---------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_OpenMultiBitmap(fif: FREE_IMAGE_FORMAT; filename: PAnsiChar; + create_new, read_only: LongBool; keep_cache_in_memory: LongBool = False; + flags: Integer = 0): PFIMULTIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_OpenMultiBitmap@24'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_OpenMultiBitmap'{$ENDIF}; +function FreeImage_OpenMultiBitmapFromHandle(fif: FREE_IMAGE_FORMAT; io: PFreeImageIO; + handle: fi_handle; flags: Integer = 0): PFIMULTIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_OpenMultiBitmapFromHandle@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_OpenMultiBitmapFromHandle'{$ENDIF}; +function FreeImage_SaveMultiBitmapToHandle(fif: FREE_IMAGE_FORMAT; bitmap: PFIMULTIBITMAP; + io: PFreeImageIO; handle: fi_handle; flags: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SaveMultiBitmapToHandle@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SaveMultiBitmapToHandle'{$ENDIF}; +function FreeImage_CloseMultiBitmap(bitmap: PFIMULTIBITMAP; + flags: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_CloseMultiBitmap@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_CloseMultiBitmap'{$ENDIF}; +function FreeImage_GetPageCount(bitmap: PFIMULTIBITMAP): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetPageCount@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetPageCount'{$ENDIF}; +procedure FreeImage_AppendPage(bitmap: PFIMULTIBITMAP; data: PFIBITMAP); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AppendPage@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AppendPage'{$ENDIF}; +procedure FreeImage_InsertPage(bitmap: PFIMULTIBITMAP; page: Integer; + data: PFIBITMAP); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_InsertPage@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_InsertPage'{$ENDIF}; +procedure FreeImage_DeletePage(bitmap: PFIMULTIBITMAP; page: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_DeletePage@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_DeletePage'{$ENDIF}; +function FreeImage_LockPage(bitmap: PFIMULTIBITMAP; page: Integer): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LockPage@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LockPage'{$ENDIF}; +procedure FreeImage_UnlockPage(bitmap: PFIMULTIBITMAP; data: PFIBITMAP; + changed: LongBool); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_UnlockPage@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_UnlockPage'{$ENDIF}; +function FreeImage_MovePage(bitmap: PFIMULTIBITMAP; target, source: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_MovePage@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_MovePage'{$ENDIF}; +function FreeImage_GetLockedPageNumbers(bitmap: PFIMULTIBITMAP; var pages: Integer; + var count: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetLockedPageNumbers@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetLockedPageNumbers'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Filetype request routines ------------------------------------------------ +// -------------------------------------------------------------------------- + +function FreeImage_GetFileType(filename: PAnsiChar; + size: Integer = 0): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFileType@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFileType'{$ENDIF}; +function FreeImage_GetFileTypeU(filename: PWideChar; + size: Integer = 0): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFileTypeU@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFileTypeU'{$ENDIF}; +function FreeImage_GetFileTypeFromHandle(io: PFreeImageIO; handle: FI_Handle; + size: Integer = 0): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFileTypeFromHandle@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFileTypeFromHandle'{$ENDIF}; +function FreeImage_GetFileTypeFromMemory(stream: PFIMEMORY; + size: Integer = 0): FREE_IMAGE_FORMAT; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetFileTypeFromMemory@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetFileTypeFromMemory'{$ENDIF}; + +// -------------------------------------------------------------------------- +// ImageType request routine ------------------------------------------------ +// -------------------------------------------------------------------------- + +function FreeImage_GetImageType(dib: PFIBITMAP): FREE_IMAGE_TYPE; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetImageType@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetImageType'{$ENDIF}; + +// -------------------------------------------------------------------------- +// FreeImage helper routines ------------------------------------------------ +// -------------------------------------------------------------------------- + +function FreeImage_IsLittleEndian: LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_IsLittleEndian@0'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_IsLittleEndian'{$ENDIF}; +function FreeImage_LookupX11Color(szColor: PAnsiChar; var nRed, nGreen, nBlue: Byte): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LookupX11Color@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LookupX11Color'{$ENDIF}; +function FreeImage_LookupSVGColor(szColor: PAnsiChar; var nRed, nGreen, nBlue: Byte): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_LookupSVGColor@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_LookupSVGColor'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Pixels access routines --------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_GetBits(dib: PFIBITMAP): PByte; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetBits@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetBits'{$ENDIF}; +function FreeImage_GetScanLine(dib: PFIBITMAP; scanline: Integer): PByte; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetScanLine@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetScanLine'{$ENDIF}; + +function FreeImage_GetPixelIndex(dib: PFIBITMAP; x, y: Cardinal; var value: Byte): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetPixelIndex@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetPixelIndex'{$ENDIF}; +function FreeImage_GetPixelColor(dib: PFIBITMAP; x, y: Cardinal; var value: RGBQUAD): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetPixelColor@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetPixelColor'{$ENDIF}; +function FreeImage_SetPixelIndex(dib: PFIBITMAP; x, y: Cardinal; var value: Byte): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetPixelIndex@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetPixelIndex'{$ENDIF}; +function FreeImage_SetPixelColor(dib: PFIBITMAP; x, y: Cardinal; var value: RGBQUAD): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetPixelColor@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetPixelColor'{$ENDIF}; + +// -------------------------------------------------------------------------- +// DIB info routines -------------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_GetColorsUsed(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetColorsUsed@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetColorsUsed'{$ENDIF}; +function FreeImage_GetBPP(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetBPP@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetBPP'{$ENDIF}; +function FreeImage_GetWidth(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetWidth@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetWidth'{$ENDIF}; +function FreeImage_GetHeight(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetHeight@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetHeight'{$ENDIF}; +function FreeImage_GetLine(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetLine@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetLine'{$ENDIF}; +function FreeImage_GetPitch(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetPitch@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetPitch'{$ENDIF}; +function FreeImage_GetDIBSize(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetDIBSize@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetDIBSize'{$ENDIF}; +function FreeImage_GetPalette(dib: PFIBITMAP): PRGBQuad; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetPalette@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetPalette'{$ENDIF}; + +function FreeImage_GetDotsPerMeterX(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetDotsPerMeterX@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetDotsPerMeterX'{$ENDIF}; +function FreeImage_GetDotsPerMeterY(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetDotsPerMeterY@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetDotsPerMeterY'{$ENDIF}; +procedure FreeImage_SetDotsPerMeterX(dib: PFIBITMAP; res: Cardinal); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetDotsPerMeterX@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetDotsPerMeterX'{$ENDIF}; +procedure FreeImage_SetDotsPerMeterY(dib: PFIBITMAP; res: Cardinal); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetDotsPerMeterY@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetDotsPerMeterY'{$ENDIF}; + +function FreeImage_GetInfoHeader(dib: PFIBITMAP): PBITMAPINFOHEADER; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetInfoHeader@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetInfoHeader'{$ENDIF}; +function FreeImage_GetInfo(dib: PFIBITMAP): PBITMAPINFO; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetInfo@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetInfo'{$ENDIF}; +function FreeImage_GetColorType(dib: PFIBITMAP): FREE_IMAGE_COLOR_TYPE; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetColorType@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetColorType'{$ENDIF}; + +function FreeImage_GetRedMask(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetRedMask@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetRedMask'{$ENDIF}; +function FreeImage_GetGreenMask(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetGreenMask@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetGreenMask'{$ENDIF}; +function FreeImage_GetBlueMask(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetBlueMask@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetBlueMask'{$ENDIF}; + +function FreeImage_GetTransparencyCount(dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTransparencyCount@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTransparencyCount'{$ENDIF}; +function FreeImage_GetTransparencyTable(dib: PFIBITMAP): PByte; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTransparencyTable@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTransparencyTable'{$ENDIF}; +procedure FreeImage_SetTransparent(dib: PFIBITMAP; enabled: LongBool); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTransparent@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTransparent'{$ENDIF}; +procedure FreeImage_SetTransparencyTable(dib: PFIBITMAP; table: PByte; + count: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTransparencyTable@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTransparencyTable'{$ENDIF}; +function FreeImage_IsTransparent(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_IsTransparent@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_IsTransparent'{$ENDIF}; +procedure FreeImage_SetTransparentIndex(dib: PFIBITMAP; index: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTransparentIndex@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTransparentIndex'{$ENDIF}; +function FreeImage_GetTransparentIndex(dib: PFIBITMAP): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTransparentIndex@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTransparentIndex'{$ENDIF}; + +function FreeImage_HasBackgroundColor(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_HasBackgroundColor@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_HasBackgroundColor'{$ENDIF}; +function FreeImage_GetBackgroundColor(dib: PFIBITMAP; var bkcolor: RGBQUAD): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetBackgroundColor@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetBackgroundColor'{$ENDIF}; +function FreeImage_SetBackgroundColor(dib: PFIBITMAP; bkcolor: PRGBQuad): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetBackgroundColor@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetBackgroundColor'{$ENDIF}; + +function FreeImage_GetThumbnail(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetThumbnail@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetThumbnail'{$ENDIF}; +function FreeImage_SetThumbnail(dib, thumbnail: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetThumbnail@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetThumbnail'{$ENDIF}; + +// -------------------------------------------------------------------------- +// ICC profile routines ----------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_GetICCProfile(dib: PFIBITMAP): PFIICCPROFILE; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetICCProfile@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetICCProfile'{$ENDIF}; +function FreeImage_CreateICCProfile(dib: PFIBITMAP; data: Pointer; + size: LongInt): PFIICCPROFILE; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name 'FreeImage_CreateICCProfile@12'{$ENDIF} + {$IFDEF MACOS}name 'FreeImage_CreateICCProfile'{$ENDIF}; +procedure FreeImage_DestroyICCProfile(dib: PFIBITMAP); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name 'FreeImage_DestroyICCProfile@4'{$ENDIF} + {$IFDEF MACOS}name 'FreeImage_DestroyICCProfile'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Line conversion routines ------------------------------------------------- +// -------------------------------------------------------------------------- + +procedure FreeImage_ConvertLine1To4(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine1To4@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine1To4'{$ENDIF}; +procedure FreeImage_ConvertLine8To4(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine8To4@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine8To4'{$ENDIF}; +procedure FreeImage_ConvertLine16To4_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To4_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To4_555'{$ENDIF}; +procedure FreeImage_ConvertLine16To4_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To4_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To4_565'{$ENDIF}; +procedure FreeImage_ConvertLine24To4(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine24To4@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine24To4'{$ENDIF}; +procedure FreeImage_ConvertLine32To4(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine32To4@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine32To4'{$ENDIF}; + +procedure FreeImage_ConvertLine1To8(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine1To8@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine1To8'{$ENDIF}; +procedure FreeImage_ConvertLine4To8(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine4To8@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine4To8'{$ENDIF}; +procedure FreeImage_ConvertLine16To8_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To8_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To8_555'{$ENDIF}; +procedure FreeImage_ConvertLine16To8_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To8_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To8_565'{$ENDIF}; +procedure FreeImage_ConvertLine24To8(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine24To8@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine24To8'{$ENDIF}; +procedure FreeImage_ConvertLine32To8(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine32To8@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine32To8'{$ENDIF}; + +procedure FreeImage_ConvertLine1To16_555(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine1To16_555@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine1To16_555'{$ENDIF}; +procedure FreeImage_ConvertLine4To16_555(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine4To16_555@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine4To16_555'{$ENDIF}; +procedure FreeImage_ConvertLine8To16_555(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine8To16_555@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine8To16_555'{$ENDIF}; +procedure FreeImage_ConvertLine16_565_To16_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16_565_To16_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16_565_To16_555'{$ENDIF}; +procedure FreeImage_ConvertLine24To16_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine24To16_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine24To16_555'{$ENDIF}; +procedure FreeImage_ConvertLine32To16_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine32To16_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine32To16_555'{$ENDIF}; + +procedure FreeImage_ConvertLine1To16_565(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine1To16_565@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine1To16_565'{$ENDIF}; +procedure FreeImage_ConvertLine4To16_565(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine4To16_565@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine4To16_565'{$ENDIF}; +procedure FreeImage_ConvertLine8To16_565(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine8To16_565@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine8To16_565'{$ENDIF}; +procedure FreeImage_ConvertLine16_555_To16_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16_555_To16_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16_555_To16_565'{$ENDIF}; +procedure FreeImage_ConvertLine24To16_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine24To16_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine24To16_565'{$ENDIF}; +procedure FreeImage_ConvertLine32To16_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine32To16_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine32To16_565'{$ENDIF}; + +procedure FreeImage_ConvertLine1To24(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine1To24@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine1To24'{$ENDIF}; +procedure FreeImage_ConvertLine4To24(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine4To24@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine4To24'{$ENDIF}; +procedure FreeImage_ConvertLine8To24(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine8To24@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine8To24'{$ENDIF}; +procedure FreeImage_ConvertLine16To24_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To24_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To24_555'{$ENDIF}; +procedure FreeImage_ConvertLine16To24_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To24_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To24_565'{$ENDIF}; +procedure FreeImage_ConvertLine32To24(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine32To24@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine32To24'{$ENDIF}; + +procedure FreeImage_ConvertLine1To32(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine1To32@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine1To32'{$ENDIF}; +procedure FreeImage_ConvertLine4To32(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine4To32@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine4To32'{$ENDIF}; +procedure FreeImage_ConvertLine8To32(target, source: PByte; width_in_pixels: Integer; + palette: PRGBQuad); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine8To32@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine8To32'{$ENDIF}; +procedure FreeImage_ConvertLine16To32_555(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To32_555@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To32_555'{$ENDIF}; +procedure FreeImage_ConvertLine16To32_565(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine16To32_565@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine16To32_565'{$ENDIF}; +procedure FreeImage_ConvertLine24To32(target, source: PByte; width_in_pixels: Integer); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertLine24To32@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertLine24To32'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Smart conversion routines ------------------------------------------------ +// -------------------------------------------------------------------------- + +function FreeImage_ConvertTo4Bits(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertTo4Bits@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertTo4Bits'{$ENDIF}; +function FreeImage_ConvertTo8Bits(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertTo8Bits@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertTo8Bits'{$ENDIF}; +function FreeImage_ConvertToGreyscale(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToGreyscale@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToGreyscale'{$ENDIF}; +function FreeImage_ConvertTo16Bits555(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertTo16Bits555@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertTo16Bits555'{$ENDIF}; +function FreeImage_ConvertTo16Bits565(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertTo16Bits565@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertTo16Bits565'{$ENDIF}; +function FreeImage_ConvertTo24Bits(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertTo24Bits@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertTo24Bits'{$ENDIF}; +function FreeImage_ConvertTo32Bits(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertTo32Bits@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertTo32Bits'{$ENDIF}; +function FreeImage_ColorQuantize(dib: PFIBITMAP; quantize: FREE_IMAGE_QUANTIZE): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ColorQuantize@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ColorQuantize'{$ENDIF}; +function FreeImage_ColorQuantizeEx(dib: PFIBITMAP; quantize: FREE_IMAGE_QUANTIZE = FIQ_WUQUANT; + PaletteSize: Integer = 256; ReserveSize: Integer = 0; + ReservePalette: PRGBQuad = nil): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ColorQuantizeEx@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ColorQuantizeEx'{$ENDIF}; +function FreeImage_Threshold(dib: PFIBITMAP; T: Byte): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Threshold@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Threshold'{$ENDIF}; +function FreeImage_Dither(dib: PFIBITMAP; algorithm: FREE_IMAGE_DITHER): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Dither@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Dither'{$ENDIF}; + +function FreeImage_ConvertFromRawBits(bits: PByte; width, height, pitch: Integer; + bpp, red_mask, green_mask, blue_mask: Cardinal; topdown: LongBool = False): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertFromRawBits@36'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertFromRawBits'{$ENDIF}; +function FreeImage_ConvertFromRawBitsEx(copySource: LongBool; bits: PByte; _type: FREE_IMAGE_TYPE; + width, height, pitch: Integer; bpp, red_mask, green_mask, blue_mask: Cardinal; + topdown: LongBool = False): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertFromRawBitsEx@44'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertFromRawBitsEx'{$ENDIF}; +procedure FreeImage_ConvertToRawBits(bits: PByte; dib: PFIBITMAP; pitch: Integer; + bpp, red_mask, green_mask, blue_mask: Cardinal; topdown: LongBool = False); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToRawBits@32'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToRawBits'{$ENDIF}; + +function FreeImage_ConvertToFloat(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToFloat@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToFloat'{$ENDIF}; +function FreeImage_ConvertToRGBF(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToRGBF@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToRGBF'{$ENDIF}; +function FreeImage_ConvertToUINT16(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToUINT16@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToUINT16'{$ENDIF}; +function FreeImage_ConvertToRGB16(dib: PFIBITMAP): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToRGB16@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToRGB16'{$ENDIF}; + +function FreeImage_ConvertToStandardType(src: PFIBITMAP; + scale_linear: LongBool = True): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToStandardType@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToStandardType'{$ENDIF}; +function FreeImage_ConvertToType(src: PFIBITMAP; dst_type: FREE_IMAGE_TYPE; + scale_linear: LongBool = True): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ConvertToType@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ConvertToType'{$ENDIF}; + +// Tone mapping operators --------------------------------------------------- +function FreeImage_ToneMapping(dib: PFIBITMAP; tmo: FREE_IMAGE_TMO; + first_param: Double = 0; second_param: Double = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ToneMapping@24'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ToneMapping'{$ENDIF}; +function FreeImage_TmoDrago03(src: PFIBITMAP; gamma: Double = 2.2; + exposure: Double = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_TmoDrago03@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_TmoDrago03'{$ENDIF}; +function FreeImage_TmoReinhard05(src: PFIBITMAP; intensity: Double = 0; + contrast: Double = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_TmoReinhard05@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_TmoReinhard05'{$ENDIF}; +function FreeImage_TmoReinhard05Ex(src: PFIBITMAP; intensity: Double = 0; + contrast: Double = 0; adaptation: Double = 1; color_correction: Double = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_TmoReinhard05Ex@36'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_TmoReinhard05Ex'{$ENDIF}; + +function FreeImage_TmoFattal02(src: PFIBITMAP; color_saturation: Double = 0.5; + attenuation: Double = 0.85): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_TmoFattal02@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_TmoFattal02'{$ENDIF}; + +// -------------------------------------------------------------------------- +// ZLib interface ----------------------------------------------------------- +// -------------------------------------------------------------------------- + +function FreeImage_ZLibCompress(target: PByte; target_size: DWORD; source: PByte; source_size: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ZLibCompress@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ZLibCompress'{$ENDIF}; +function FreeImage_ZLibUncompress(target: PByte; target_size: DWORD; source: PByte; source_size: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ZLibUncompress@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ZLibUncompress'{$ENDIF}; +function FreeImage_ZLibGZip(target: PByte; target_size: DWORD; source: PByte; source_size: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ZLibGZip@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ZLibGZip'{$ENDIF}; +function FreeImage_ZLibGUnzip(target: PByte; target_size: DWORD; source: PByte; source_size: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ZLibGUnzip@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ZLibGUnzip'{$ENDIF}; +function FreeImage_ZLibCRC32(crc: DWORD; source: PByte; source_size: DWORD): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ZLibCRC32@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ZLibCRC32'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Metadata routines +// -------------------------------------------------------------------------- + +// tag creation / destruction +function FreeImage_CreateTag: PFITAG; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_CreateTag@0'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_CreateTag'{$ENDIF}; +procedure FreeImage_DeleteTag(tag: PFITAG); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_DeleteTag@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_DeleteTag'{$ENDIF}; +function FreeImage_CloneTag(tag: PFITAG): PFITAG; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_CloneTag@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_CloneTag'{$ENDIF}; + +// tag getters and setters +function FreeImage_GetTagKey(tag: PFITAG): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagKey@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagKey'{$ENDIF}; +function FreeImage_GetTagDescription(tag: PFITAG): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagDescription@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagDescription'{$ENDIF}; +function FreeImage_GetTagID(tag: PFITAG): Word; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagID@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagID'{$ENDIF}; +function FreeImage_GetTagType(tag: PFITAG): FREE_IMAGE_MDTYPE; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagType@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagType'{$ENDIF}; +function FreeImage_GetTagCount(tag: PFITAG): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagCount@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagCount'{$ENDIF}; +function FreeImage_GetTagLength(tag: PFITAG): DWORD; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagLength@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagLength'{$ENDIF}; +function FreeImage_GetTagValue(tag: PFITAG): Pointer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagValue@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetTagValue'{$ENDIF}; + +function FreeImage_SetTagKey(tag: PFITAG; key: PAnsiChar): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagKey@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagKey'{$ENDIF}; +function FreeImage_SetTagDescription(tag: PFITAG; description: PAnsiChar): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagDescription@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagDescription'{$ENDIF}; +function FreeImage_SetTagID(tag: PFITAG; id: Word): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagID@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagID'{$ENDIF}; +function FreeImage_SetTagType(tag: PFITAG; _type: FREE_IMAGE_MDTYPE): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagType@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagType'{$ENDIF}; +function FreeImage_SetTagCount(tag: PFITAG; count: DWORD): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagCount@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagCount'{$ENDIF}; +function FreeImage_SetTagLength(tag: PFITAG; length: DWORD): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagLength@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagLength'{$ENDIF}; +function FreeImage_SetTagValue(tag: PFITAG; value: Pointer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetTagValue@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetTagValue'{$ENDIF}; + +// iterator +function FreeImage_FindFirstMetadata(model: FREE_IMAGE_MDMODEL; dib: PFIBITMAP; + var tag: PFITAG): PFIMETADATA; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FindFirstMetadata@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FindFirstMetadata'{$ENDIF}; +function FreeImage_FindNextMetadata(mdhandle: PFIMETADATA; var tag: PFITAG): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FindNextMetadata@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FindNextMetadata'{$ENDIF}; +procedure FreeImage_FindCloseMetadata(mdhandle: PFIMETADATA); {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FindCloseMetadata@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FindCloseMetadata'{$ENDIF}; + +// metadata setter and getter +function FreeImage_SetMetadata(model: FREE_IMAGE_MDMODEL; dib: PFIBITMAP; + key: PAnsiChar; tag: PFITAG): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetMetadata@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetMetadata'{$ENDIF}; +function FreeImage_GetMetadata(model: FREE_IMAGE_MDMODEL; dib: PFIBITMAP; + key: PAnsiChar; var tag: PFITAG): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetMetadata@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetMetadata'{$ENDIF}; + +// helpers +function FreeImage_GetMetadataCount(model: FREE_IMAGE_MDMODEL; dib: PFIBITMAP): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetMetadataCount@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetMetadataCount'{$ENDIF}; +function FreeImage_CloneMetadata(dst, src: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_CloneMetadata@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_CloneMetadata'{$ENDIF}; + +// tag to C string conversion +function FreeImage_TagToString(model: FREE_IMAGE_MDMODEL; tag: PFITAG; + Make: PAnsiChar = nil): PAnsiChar; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_TagToString@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_TagToString'{$ENDIF}; + +// -------------------------------------------------------------------------- +// JPEG lossless transformation routines +// -------------------------------------------------------------------------- + +function FreeImage_JPEGTransform(src_file, dst_file: PAnsiChar; operation: FREE_IMAGE_JPEG_OPERATION; + perfect: LongBool = False): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGTransform@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGTransform'{$ENDIF}; +function FreeImage_JPEGTransformU(src_file, dst_file: PWideChar; operation: FREE_IMAGE_JPEG_OPERATION; + perfect: LongBool = False): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGTransformU@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGTransformU'{$ENDIF}; +function FreeImage_JPEGCrop(src_file, dst_file: PAnsiChar; + left, top, right, bottom: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGCrop@24'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGCrop'{$ENDIF}; +function FreeImage_JPEGCropU(src_file, dst_file: PWideChar; + left, top, right, bottom: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGCropU@24'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGCropU'{$ENDIF}; +function FreeImage_JPEGTransformFromHandle(src_io: PFreeImageIO; src_handle: fi_handle; dst_io: PFreeImageIO; + dst_handle: fi_handle; operation: FREE_IMAGE_JPEG_OPERATION; var left, top, right, bottom: Integer; + perfect: LongBool = True): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGTransformFromHandle@40'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGTransformFromHandle'{$ENDIF}; +function FreeImage_JPEGTransformCombined(src_file, dst_file: PAnsiChar; operation: FREE_IMAGE_JPEG_OPERATION; + var left, top, right, bottom: Integer; perfect: LongBool = True): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGTransformCombined@32'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGTransformCombined'{$ENDIF}; +function FreeImage_JPEGTransformCombinedU(src_file, dst_file: PWideChar; operation: FREE_IMAGE_JPEG_OPERATION; + var left, top, right, bottom: Integer; perfect: LongBool = True): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGTransformCombinedU@32'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGTransformCombinedU'{$ENDIF}; +function FreeImage_JPEGTransformCombinedFromMemory(src_stream, dst_stream: PFIMEMORY; operation: FREE_IMAGE_JPEG_OPERATION; + var left, top, right, bottom: Integer; perfect: LongBool = True): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_JPEGTransformCombinedFromMemory@32'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_JPEGTransformCombinedFromMemory'{$ENDIF}; + +// -------------------------------------------------------------------------- +// Image manipulation toolkit +// -------------------------------------------------------------------------- + +// rotation and flipping +// modif JMB : FreeImage_RotateClassic : deprecated function, call to DeprecationManager in 64 bits crashes freeimage.dll +//function FreeImage_RotateClassic(dib: PFIBITMAP; angle: Double): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} +// external FIDLL {$IFDEF WIN32}name '_FreeImage_RotateClassic@12'{$ENDIF} +// {$IFDEF MACOS}name '_FreeImage_RotateClassic'{$ENDIF}; +function FreeImage_Rotate(dib: PFIBITMAP; angle: Double; bkcolor: Pointer = nil): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Rotate@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Rotate'{$ENDIF}; +function FreeImage_RotateEx(dib: PFIBITMAP; angle, x_shift, y_shift, x_origin, y_origin: Double; + use_mask: LongBool): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_RotateEx@48'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_RotateEx'{$ENDIF}; +function FreeImage_FlipHorizontal(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FlipHorizontal@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FlipHorizontal'{$ENDIF}; +function FreeImage_FlipVertical(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FlipVertical@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FlipVertical'{$ENDIF}; + +// upsampling / downsampling +function FreeImage_Rescale(dib: PFIBITMAP; dst_width, dst_height: Integer; + filter: FREE_IMAGE_FILTER = FILTER_CATMULLROM): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Rescale@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Rescale'{$ENDIF}; +function FreeImage_MakeThumbnail(dib: PFIBITMAP; max_pixel_size: Integer; convert: LongBool = True): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_MakeThumbnail@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_MakeThumbnail'{$ENDIF}; + +// color manipulation routines (point operations) +function FreeImage_AdjustCurve(dib: PFIBITMAP; LUT: PByte; + channel: FREE_IMAGE_COLOR_CHANNEL): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AdjustCurve@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AdjustCurve'{$ENDIF}; +function FreeImage_AdjustGamma(dib: PFIBITMAP; gamma: Double): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AdjustGamma@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AdjustGamma'{$ENDIF}; +function FreeImage_AdjustBrightness(dib: PFIBITMAP; percentage: Double): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AdjustBrightness@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AdjustBrightness'{$ENDIF}; +function FreeImage_AdjustContrast(dib: PFIBITMAP; percentage: Double): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AdjustContrast@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AdjustContrast'{$ENDIF}; +function FreeImage_Invert(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Invert@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Invert'{$ENDIF}; +function FreeImage_GetHistogram(dib: PFIBITMAP; histo: PDWORD; + channel: FREE_IMAGE_COLOR_CHANNEL = FICC_BLACK): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetHistogram@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetHistogram'{$ENDIF}; +function FreeImage_GetAdjustColorsLookupTable(LUT: PByte; brightness, contrast, gamma: Double; + invert: LongBool): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetAdjustColorsLookupTable@32'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetAdjustColorsLookupTable'{$ENDIF}; +function FreeImage_AdjustColors(dib: PFIBITMAP; brightness, contrast, gamma: Double; + invert: LongBool = False): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AdjustColors@32'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AdjustColors'{$ENDIF}; +function FreeImage_ApplyColorMapping(dib: PFIBITMAP; srccolors, dstcolors: PRGBQuad; + count: Cardinal; ignore_alpha, swap: LongBool): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ApplyColorMapping@24'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ApplyColorMapping'{$ENDIF}; +function FreeImage_SwapColors(dib: PFIBITMAP; color_a, color_b: PRGBQuad; + ignore_alpha: LongBool): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SwapColors@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SwapColors'{$ENDIF}; +function FreeImage_ApplyPaletteIndexMapping(dib: PFIBITMAP; srcindices, dstindices: PByte; + count: Cardinal; swap: LongBool): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_ApplyPaletteIndexMapping@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_ApplyPaletteIndexMapping'{$ENDIF}; +function FreeImage_SwapPaletteIndices(dib: PFIBITMAP; index_a, index_b: PByte): Cardinal; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SwapPaletteIndices@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SwapPaletteIndices'{$ENDIF}; + +// channel processing routines +function FreeImage_GetChannel(dib: PFIBITMAP; channel: FREE_IMAGE_COLOR_CHANNEL): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetChannel@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetChannel'{$ENDIF}; +function FreeImage_SetChannel(dst, src: PFIBITMAP; channel: FREE_IMAGE_COLOR_CHANNEL): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetChannel@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetChannel'{$ENDIF}; +function FreeImage_GetComplexChannel(src: PFIBITMAP; channel: FREE_IMAGE_COLOR_CHANNEL): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_GetComplexChannel@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_GetComplexChannel'{$ENDIF}; +function FreeImage_SetComplexChannel(dst, src: PFIBITMAP; channel: FREE_IMAGE_COLOR_CHANNEL): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_SetComplexChannel@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_SetComplexChannel'{$ENDIF}; + +// copy / paste / composite routines + +function FreeImage_Copy(dib: PFIBITMAP; left, top, right, bottom: Integer): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Copy@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Copy'{$ENDIF}; +function FreeImage_Paste(dst, src: PFIBITMAP; left, top, alpha: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Paste@20'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Paste'{$ENDIF}; +function FreeImage_Composite(fg: PFIBITMAP; useFileBkg: LongBool = False; + appBkColor: PRGBQuad = nil; bg: PFIBITMAP = nil): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_Composite@16'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_Composite'{$ENDIF}; +function FreeImage_PreMultiplyWithAlpha(dib: PFIBITMAP): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_PreMultiplyWithAlpha@4'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_PreMultiplyWithAlpha'{$ENDIF}; + +// background filling routines +function FreeImage_FillBackground(dib: PFIBITMAP; color: Pointer; + options: Integer = 0): LongBool; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_FillBackground@12'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_FillBackground'{$ENDIF}; +function FreeImage_EnlargeCanvas(src: PFIBITMAP; left, top, right, bottom: Integer; + color: Pointer; options: Integer = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_EnlargeCanvas@28'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_EnlargeCanvas'{$ENDIF}; +function FreeImage_AllocateEx(width, height, bpp: Integer; color: PRGBQuad; + options: Integer = 0; palette: PRGBQuad = nil; red_mask: Cardinal = 0; + green_mask: Cardinal = 0; blue_mask: Cardinal = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AllocateEx@36'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AllocateEx'{$ENDIF}; +function FreeImage_AllocateExT(_type: FREE_IMAGE_TYPE; width, height, bpp: Integer; + color: Pointer; options: Integer = 0; palette: PRGBQuad = nil; red_mask: Cardinal = 0; + green_mask: Cardinal = 0; blue_mask: Cardinal = 0): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_AllocateExT@40'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_AllocateExT'{$ENDIF}; + +// miscellaneous algorithms +function FreeImage_MultigridPoissonSolver(Laplacian: PFIBITMAP; + ncycle: Integer = 3): PFIBITMAP; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} + external FIDLL {$IFDEF WIN32}name '_FreeImage_MultigridPoissonSolver@8'{$ENDIF} + {$IFDEF MACOS}name '_FreeImage_MultigridPoissonSolver'{$ENDIF}; + + +implementation + +{$IFNDEF DELPHI6} +uses SysUtils; + +//we provide a wrapper since we haven't varargs in older versions of Delphi +procedure __FreeImage_OutputMessageProc; cdecl; + external FIDLL name 'FreeImage_OutputMessageProc'; + +procedure FreeImage_OutputMessageProc(fif: Integer; fmt: PAnsiChar; args: array of const); + function ArrayToBuffer(Args: array of const; + var Argv: Pointer; Buffer: Pointer; Size: Cardinal): Integer; + var + i: Integer; + temp: AnsiString; + parg: Pointer; + psrc, pbuf: PAnsiChar; + len: Cardinal; + begin + Result := High(Args) + 1; + if Result = 0 then + Exit; + //array of pointers to push on stack + GetMem(Argv, Result * SizeOf(Pointer)); + //pointer to current string in buffer + pbuf := Buffer; + //pointer to current arg + parg := Argv; + //for each const... + for i := 0 to Result - 1 do begin + case Args[i].VType of + vtInteger: begin + //integer + psrc := nil; + len := 0; + Integer(parg^) := Args[i].VInteger; + end; + vtString: begin + //short string + psrc := PAnsiChar(Cardinal(Args[i].VString) + SizeOf(Byte)); + len := PByte(Args[i].VString)^; + PAnsiChar(parg^) := pbuf; + end; + vtPChar: begin + //NULL terminated MBCS string + psrc := nil; + len := 0; + PAnsiChar(parg^) := Args[i].VPChar; + end; + vtPWideChar: begin + //NULL terminated Unicode string + temp := AnsiString(Args[i].VPWideChar); + psrc := PAnsiChar(temp); + len := Length(temp); + PAnsiChar(parg^) := pbuf; + end; + vtAnsiString: begin + //ANSI string + psrc := PAnsiChar(Args[i].VAnsiString); + len := StrLen(psrc); + PAnsiChar(parg^) := pbuf; + end; + vtWideString: begin + //Wide string (OLE) + temp := AnsiString(PWideChar(Args[i].VWideString)); + psrc := PAnsiChar(temp); + len := Length(temp); + PAnsiChar(parg^) := pbuf; + end; + else raise Exception.Create('Unsupported argument type'); + end; + if (psrc <> nil) and (len <> 0) then begin + //enough space to hold string? + if Size < (len + 1) then + raise Exception.Create('Buffer overflow'); + //copy string + Move(psrc^, pbuf^, len); + //NULL terminator + PAnsiChar(Cardinal(pbuf) + len)^ := #0; + //shift pointer... + Inc(pbuf, len + 1); + //...and decrease space left + Dec(Size, len + 1); + end; + Cardinal(parg) := Cardinal(parg) + SizeOf(Pointer); + end; + end; + + procedure DoVarargsCall(fif: Integer; fmt: PAnsiChar; Argv: Pointer; Argc: Integer); + { + fif -> EAX + fmt -> EDX + Argv -> ECX + Argc -> [EBP+$08] + } + asm + PUSH EAX //remember fif + PUSH ECX //make room for ESP backup + + MOV DWORD PTR [EBP-$08], ESP //backup stack pointer + + MOV EAX, DWORD PTR [EBP+$08] //store Argc + + TEST EAX, EAX //Argc <= 0? + JLE @Call + + @Loop: + PUSH DWORD PTR [ECX+EAX*$04-$04] //push Argv in right to left order + DEC EAX + JNZ @Loop + + @Call: + PUSH EDX //push fmt + PUSH DWORD PTR [EBP-$04] //push fif + CALL __FreeImage_OutputMessageProc + + MOV ESP, DWORD PTR [EBP-$08] //restore stack pointer + + POP ECX //clean stack + POP EAX + end; +var + Argc: Integer; + Argv: Pointer; + //buffer to hold strings - FreeImage allocates 512 bytes, we needn't more... + Buffer: array[1..512] of Byte; +begin + Argv := nil; + //build array of pointers from array of const + Argc := ArrayToBuffer(args, Argv, @Buffer, SizeOf(Buffer)); + try + //mimic cdecl call with varargs + DoVarargsCall(fif, fmt, Argv, Argc); + finally + //cleanup + FreeMem(Argv); + end; +end; +{$ENDIF} + +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeUtils.pas b/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeUtils.pas new file mode 100644 index 0000000..9665dca --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/src/FreeUtils.pas @@ -0,0 +1,186 @@ +unit FreeUtils; + +// ========================================================== +// +// Delphi wrapper for FreeImage 3 +// +// Design and implementation by +// - Anatoliy Pulyaevskiy (xvel84@rambler.ru) +// +// Contributors: +// - Enzo Costantini (enzocostantini@libero.it) +// - Armindo (tech1.yxendis@wanadoo.fr) +// - Lorenzo Monti (LM) lomo74@gmail.com +// +// Revision history +// When Who What +// ----------- ----- ----------------------------------------------------------- +// 2010-07-14 LM made RAD2010 compliant (unicode) +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// +// ========================================================== + +interface + +{$I 'Version.inc'} + +uses + {$IFDEF DELPHI2010}AnsiStrings,{$ENDIF} SysUtils, Classes, FreeImage; + +function FIU_GetFIFType(filename: AnsiString): FREE_IMAGE_FORMAT; + +// returns FIF (plugin) description string +function FIU_GetFIFDescription(fif: FREE_IMAGE_FORMAT): AnsiString; + +procedure FIU_GetAllDescriptions(var Descriptions: TStringList); + +// returns file extentions for FIF (e.g. '*.tif;*.tiff) +function FIU_GetFIFExtList(fif: FREE_IMAGE_FORMAT): AnsiString; + +// returns file extentions for all plugins +function FIU_GetFullExtList: AnsiString; + +// returns "Description + | + ExtList" for specified FIF +function FIU_GetFIFFilter(fif: FREE_IMAGE_FORMAT): AnsiString; + +// All supported formats + Full filter list for FIFs +function FIU_GetAllFilters: AnsiString; + +//Filter for OpenDialogs +function FIU_GetAllOpenFilters: AnsiString; + +//Filter for SaveDialogs +function FIU_GetAllSaveFilters: AnsiString; + +implementation + +const + FIF_START = FIF_UNKNOWN; + FIF_END = FIF_XPM; + +function FIU_GetFIFType(filename: AnsiString): FREE_IMAGE_FORMAT; +begin + Result := FreeImage_GetFileType(PAnsiChar(filename), 0); +end; + +function FIU_GetFIFDescription(fif: FREE_IMAGE_FORMAT): AnsiString; +begin + Result := FreeImage_GetFIFDescription(fif) +end; + +procedure FIU_GetAllDescriptions(var Descriptions: TStringList); +var + fif: FREE_IMAGE_FORMAT; +begin + Descriptions.Clear; + for fif := FIF_START to FIF_END do + Descriptions.Add(string(FreeImage_GetFIFDescription(fif)) + ' (' + + string(FIu_GetFIFExtList(fif)) + ')'); +end; + +function FIU_GetFIFExtList(fif: FREE_IMAGE_FORMAT): AnsiString; +var + ExtList: AnsiString; + I: Smallint; + C: AnsiChar; +begin + Result := '*.'; + ExtList := FreeImage_GetFIFExtensionList(fif); + for I := 1 to Length(ExtList) do + begin + C := ExtList[i]; + if C <> ',' then + Result := Result + C + else + Result := Result + ';*.'; + end +end; + +function FIU_GetFullExtList: AnsiString; +var + fif: FREE_IMAGE_FORMAT; +begin + Result := FIU_GetFIFExtList(FIF_START); + for fif := FIF_START to FIF_END do + Result := Result + ';' + FIU_GetFIFExtList(fif) +end; + +function FIU_GetFIFFilter(fif: FREE_IMAGE_FORMAT): AnsiString; +var + Text, ExtList: AnsiString; +begin + Result := ''; + if fif <> FIF_UNKNOWN then + begin + Text := {$IFDEF DELPHI2010}AnsiStrings.{$ENDIF}Trim(FreeImage_GetFIFDescription(fif)); + ExtList := FIU_GetFIFExtList(fif); + Result := Text + '(' + ExtList + ')' + '|' + ExtList + end +end; + +function FIU_GetAllFilters: AnsiString; +var + fif: FREE_IMAGE_FORMAT; +begin + Result := 'All supported formats|' + FIU_GetFullExtList; + for fif := FIF_START to FIF_END do + begin + Result := Result + '|' + FIU_GetFIFFilter(fif) + end; +end; + +function FIU_GetAllOpenFilters: AnsiString; +var + fif: FREE_IMAGE_FORMAT; +begin + Result := 'All supported formats|' + FIU_GetFullExtList; + for fif := FIF_START to FIF_END do + if FreeImage_FIFSupportsReading(fif) then + begin + Result := Result + '|' + FIU_GetFIFFilter(fif) + end; +end; + +function FIU_GetAllSaveFilters: AnsiString; +var + ExtList: AnsiString; + I: Smallint; + C: AnsiChar; + fif: FREE_IMAGE_FORMAT; + s: AnsiString; +begin + result := ''; + for fif := FIF_START to FIF_END do + if FreeImage_FIFSupportsWriting(fif) then + begin + ExtList := FreeImage_GetFIFExtensionList(fif); + s := ''; + for I := 1 to Length(ExtList) do + begin + C := ExtList[i]; + if C <> ',' then + S := S + C + else + begin + result := Result + FreeImage_GetFIFDescription(fif) + ' (' + UpperCase(s) + ')|*.' + s + '|'; + s := ''; + end; + end; + result := Result + FreeImage_GetFIFDescription(fif) + ' (' + UpperCase(s) + ')|*.' + s + '|'; + end; +end; + +end. diff --git a/#ThirdParty/FreeImage/Wrapper/Delphi/src/Version.inc b/#ThirdParty/FreeImage/Wrapper/Delphi/src/Version.inc new file mode 100644 index 0000000..f72863d --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/Delphi/src/Version.inc @@ -0,0 +1,305 @@ +// ========================================================== +// Delphi wrapper for FreeImage 3 +// +// Design and implementation by +// - Simon Beavis +// - Peter Byström +// - Anatoliy Pulyaevskiy (xvel84@rambler.ru) +// +// Contributors: +// - Lorenzo Monti (LM) lomo74@gmail.com +// +// Revision history +// When Who What +// ----------- ----- ----------------------------------------------------------- +// 2010-07-29 LM Added Free Pascal / Lazarus 32 bit support +// 2010-11-12 LM Added Delphi XE support +// 2011-03-04 JMB Added 64 bit compiler support +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +//some older Delphi version will define WIN32 but not MSWINDOWS +{$IFNDEF MSWINDOWS} + {$IFDEF WIN32} + {$DEFINE MSWINDOWS} + {$ENDIF} +{$ENDIF} + +//test for compiler +{$IFDEF FPC} + //Free pascal + {$IFNDEF CPU32} + //{$ERROR "64 bit platforms not tested yet. Remove this line if you feel brave."} + {$ENDIF} + {$IFNDEF ENDIAN_LITTLE} + {$ERROR "Big endian CPUs not tested yet. Remove this line if you feel brave."} + {$ENDIF} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} +{$ELSE} + //Delphi + {$IFDEF VER80} + {$DEFINE DELPHI1} + {$ENDIF} + + {$IFDEF VER90} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$ENDIF} + + {$IFDEF VER100} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$ENDIF} + + {$IFDEF VER120} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$ENDIF} + + {$IFDEF VER130} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$ENDIF} + + {$IFDEF VER140} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$ENDIF} + + {$IFDEF VER150} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$ENDIF} + + {$IFDEF VER160} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$ENDIF} + + {$IFDEF VER170} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$ENDIF} + + {$IFDEF VER180} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$ENDIF} + + {$IFDEF VER185} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$ENDIF} + + {$IFDEF VER200} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$ENDIF} + + {$IFDEF VER210} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$ENDIF} + + {$IFDEF VER220} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$DEFINE DELPHIXE} + {$ENDIF} + + {$IFDEF VER230} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$DEFINE DELPHIXE} + {$DEFINE DELPHIXE2} + {$ENDIF} + + {$IFDEF VER240} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$DEFINE DELPHIXE} + {$DEFINE DELPHIXE2} + {$DEFINE DELPHIXE3} + {$ENDIF} + + {$IFDEF VER250} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$DEFINE DELPHIXE} + {$DEFINE DELPHIXE2} + {$DEFINE DELPHIXE3} + {$DEFINE DELPHIXE4} + {$ENDIF} + + {$IFDEF VER260} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$DEFINE DELPHIXE} + {$DEFINE DELPHIXE2} + {$DEFINE DELPHIXE3} + {$DEFINE DELPHIXE4} + {$DEFINE DELPHIXE5} + {$ENDIF} + + {$IFDEF VER270} + {$DEFINE DELPHI1} + {$DEFINE DELPHI2} + {$DEFINE DELPHI3} + {$DEFINE DELPHI4} + {$DEFINE DELPHI5} + {$DEFINE DELPHI6} + {$DEFINE DELPHI7} + {$DEFINE DELPHI8} + {$DEFINE DELPHI2005} + {$DEFINE DELPHI2006} + {$DEFINE DELPHI2007} + {$DEFINE DELPHI2009} + {$DEFINE DELPHI2010} + {$DEFINE DELPHIXE} + {$DEFINE DELPHIXE2} + {$DEFINE DELPHIXE3} + {$DEFINE DELPHIXE4} + {$DEFINE DELPHIXE5} + {$DEFINE DELPHIXE6} + {$ENDIF} +{$ENDIF} diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/AssemblyInfo.cpp b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/AssemblyInfo.cpp new file mode 100644 index 0000000..2c401db --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/AssemblyInfo.cpp @@ -0,0 +1,58 @@ +#include "stdafx.h" + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("")]; +[assembly:AssemblyCopyrightAttribute("")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project directory. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly:AssemblyDelaySignAttribute(false)]; +[assembly:AssemblyKeyFileAttribute("")]; +[assembly:AssemblyKeyNameAttribute("")]; + diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.cpp b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.cpp new file mode 100644 index 0000000..cbc88b7 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.cpp @@ -0,0 +1,69 @@ +// ========================================================== +// FreeImageIO.Net +// +// Design and implementation by +// - Marcos Pernambuco Motta (marcos.pernambuco@gmail.com) +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +#include "stdafx.h" +#include "FreeImageIO.Net.h" + + +extern "C" static unsigned __stdcall ReadProc (void *buffer, unsigned size, unsigned count, fi_handle handle) +{ + int total_read = 0; + struct UNMANAGED_HANDLER* puh = (struct UNMANAGED_HANDLER*)handle; + gcroot mbuffer = new unsigned char __gc[size]; + try + { + total_read = puh->_stream->Read(mbuffer,0,size); + Marshal::Copy(mbuffer,0,buffer,total_read); + } __finally { + mbuffer=NULL; + } + return (unsigned)total_read; +} + +extern "C" static unsigned __stdcall WriteProc (void *buffer, unsigned size, unsigned count, fi_handle handle) +{ + struct UNMANAGED_HANDLER* puh = (struct UNMANAGED_HANDLER*)handle; + gcroot mbuffer = new unsigned char __gc[size*count]; + try + { + + unsigned char __pin* pbuffer = &mbuffer[0]; + memcpy(pbuffer,buffer,size*count); + puh->_stream->Write(mbuffer,0,size); + } __finally { + mbuffer=NULL; + } + return count; +} + +extern "C" static int __stdcall SeekProc (fi_handle handle, long offset, int origin) +{ + struct UNMANAGED_HANDLER* puh = (struct UNMANAGED_HANDLER*)handle; + return (int)puh->_stream->Seek(offset,(SeekOrigin) origin); + +} + +extern "C" static long __stdcall TellProc(fi_handle handle) +{ + struct UNMANAGED_HANDLER* puh = (struct UNMANAGED_HANDLER*)handle; + return (long)puh->_stream->Position; +} + diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.h b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.h new file mode 100644 index 0000000..358e871 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.h @@ -0,0 +1,83 @@ +// ========================================================== +// FreeImageIO.Net +// +// Design and implementation by +// - Marcos Pernambuco Motta (marcos.pernambuco@gmail.com) +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +#pragma once +#include +#include "FreeImage.h" + +using namespace System; +using namespace System::IO; +using namespace System::Runtime::InteropServices; + +extern "C" { + // forward decls + unsigned __stdcall ReadProc (void *buffer, unsigned size, unsigned count, fi_handle handle); + unsigned __stdcall WriteProc (void *buffer, unsigned size, unsigned count, fi_handle handle); + int __stdcall SeekProc (fi_handle handle, long offset, int origin); + long __stdcall TellProc(fi_handle handle); + + #pragma pack(push, 1) + __nogc struct UNMANAGED_HANDLER { + UNMANAGED_HANDLER() { + read_proc = &ReadProc; + write_proc = WriteProc; + seek_proc = SeekProc; + tell_proc = TellProc; + } + FI_ReadProc read_proc; // pointer to the function used to read data + FI_WriteProc write_proc; // pointer to the function used to write data + FI_SeekProc seek_proc; // pointer to the function used to seek + FI_TellProc tell_proc; // pointer to the function used to aquire the current position + gcroot _stream; + }; + #pragma pack(pop) +} + +#define FREEIMAGE_DLL "freeimaged.dll" + +namespace FreeImageIODotNet +{ + __gc public class FreeImageStream + { + private: + struct UNMANAGED_HANDLER* _pUnmanaged; + public: + FreeImageStream(System::IO::Stream* stream) + { + FreeImage_SaveToHandle((FREE_IMAGE_FORMAT) 1,0,0,0,0); + _pUnmanaged = new struct UNMANAGED_HANDLER; + _pUnmanaged->_stream = stream; + } + ~FreeImageStream() + { + _pUnmanaged->_stream = NULL; + delete _pUnmanaged; + } + + bool SaveImage(FREE_IMAGE_FORMAT fif, unsigned int dib, int flags) { + return (bool)FreeImage_SaveToHandle(fif,(FIBITMAP*) dib,(FreeImageIO*)_pUnmanaged,(fi_handle)_pUnmanaged,flags); + } + + unsigned int LoadImage(FREE_IMAGE_FORMAT fif, int flags) { + return (unsigned int)FreeImage_LoadFromHandle(fif,(FreeImageIO*)_pUnmanaged,(fi_handle)_pUnmanaged,flags); + } + }; +} diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.vcproj b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.vcproj new file mode 100644 index 0000000..ddb942f --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.Net.vcproj @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.sln b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.sln new file mode 100644 index 0000000..93bf45d --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/FreeImageIO.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeImageIO.Net", "FreeImageIO.Net.vcproj", "{E87923FF-1FBD-450D-9287-539A90DE9776}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E87923FF-1FBD-450D-9287-539A90DE9776}.Debug.ActiveCfg = Debug|Win32 + {E87923FF-1FBD-450D-9287-539A90DE9776}.Debug.Build.0 = Debug|Win32 + {E87923FF-1FBD-450D-9287-539A90DE9776}.Release.ActiveCfg = Release|Win32 + {E87923FF-1FBD-450D-9287-539A90DE9776}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/ReadMe.txt b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/ReadMe.txt new file mode 100644 index 0000000..8412e57 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/ReadMe.txt @@ -0,0 +1,27 @@ +======================================================================== +FreeImageIO.Net + +Author: Marcos Pernambuco Motta (marcos.pernambuco@gmail.com) +======================================================================== + +This library allows programs that use FreeImage.Net to save images to or +to load images from .Net Streams. + +The class FreeImageStream implements a FreeImageIO handler and routes +IO calls (read,write,tell and seek) to a wrapped System.IO.Stream. + +Example: + +using FreeImageAPI; +using FreeImageIODotNet; + +uint dib = FreeImageAPI.FreeImage.Allocate(width,height,32,0,0,0); + +// ... Image handling code goes here + +System.IO.FileStream stream = new System.IO.FileStream(@"c:\sample.png",System.IO.FileMode.Create); +FreeImageStream imageStream = new FreeImageStream(stream); +imageStream.SaveImage((int)FREE_IMAGE_FORMAT.FIF_PNG,dib,0); +stream.Close(); + +Compile with VS2003. diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/Stdafx.cpp b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/Stdafx.cpp new file mode 100644 index 0000000..4f8b8cf --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/Stdafx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// FreeImageIO.Net.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/Stdafx.h b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/Stdafx.h new file mode 100644 index 0000000..07ec3fb --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/Stdafx.h @@ -0,0 +1,6 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/app.ico b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/app.ico new file mode 100644 index 0000000..3a5525f Binary files /dev/null and b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/app.ico differ diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/app.rc b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/app.rc new file mode 100644 index 0000000..b488dbd --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/app.rc @@ -0,0 +1,52 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/resource.h b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/resource.h new file mode 100644 index 0000000..d5ac7c4 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cpp/FreeImageIO/resource.h @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Bin/delete.me b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Bin/delete.me new file mode 100644 index 0000000..ee53b98 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Bin/delete.me @@ -0,0 +1 @@ +You may safely delete this file. diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Content.txt b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Content.txt new file mode 100644 index 0000000..9d17916 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Content.txt @@ -0,0 +1,43 @@ + +This file gives you a short description of the .NET wrapper's folders +and what's located in them. + + +"Doc" +Sandcastle Help File Builder project file for creating a Microsoft Help API +documentation (CHM file). +FreeImage.NET uses Eric Woodruff's Sandcastle Help File Builder GUI to +generate the API documentation. See http://www.codeplex.com/SHFB + +"Library" +Source code of the C# .NET wrapper. Builds the FreeImageNET.dll. + +"Samples" +Example projects showing how to use the wrapper. + +"SourceFileMerger" +Program to merge all the wrapper's source files into a single source file +for easy integration into your projects on source code basis. + +"UnitTest" +NUnit-based test project for the .NET wrapper. NUnit needs to be installed +for this project to work. + +"UnitTestData" (not in CVS) +Several images in each available color depth used by "UnitTest". + +"clear.bat" +Batch file to clear the whole project, removing all temporary files. + +"FreeImage.chm" (not in CVS) +The .NET wrapper's API documentation. Build with Microsoft's Sandcastle +project from C# source code documentation. + +"FreeImage.NET.nunit" +NUnit project file. NUnit needs to be installed for this project to work. + +"FreeImage.NET.sln" +The Microsoft Visual Studio 2005 solution file. + +"Whats_New.NET.txt" +The changelog. \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.11.0/FreeImage.NET.shfbproj b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.11.0/FreeImage.NET.shfbproj new file mode 100644 index 0000000..1e4da12 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.11.0/FreeImage.NET.shfbproj @@ -0,0 +1,41 @@ + + + + Debug + AnyCPU + 2.0 + {d68736d0-a80d-453c-a921-6ada865504b5} + 1.8.0.0 + + Documentation + Documentation + Documentation + + .\Out\ + FreeImage.NET + HtmlHelp1x + False + FreeImage - The productivity booster. FreeImage is licensed under the GNU General Public License %28GPL%29 and the FreeImage Public License %28FIPL%29. + FreeImage .NET Documentation + HashedMemberName + Msdn + AutoDocumentCtors + InheritedMembers, Protected + + + + + + + + + + + + + + \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.12.0/FreeImage.NET.shfbproj b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.12.0/FreeImage.NET.shfbproj new file mode 100644 index 0000000..1e4da12 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.12.0/FreeImage.NET.shfbproj @@ -0,0 +1,41 @@ + + + + Debug + AnyCPU + 2.0 + {d68736d0-a80d-453c-a921-6ada865504b5} + 1.8.0.0 + + Documentation + Documentation + Documentation + + .\Out\ + FreeImage.NET + HtmlHelp1x + False + FreeImage - The productivity booster. FreeImage is licensed under the GNU General Public License %28GPL%29 and the FreeImage Public License %28FIPL%29. + FreeImage .NET Documentation + HashedMemberName + Msdn + AutoDocumentCtors + InheritedMembers, Protected + + + + + + + + + + + + + + \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.13.0/FreeImage.NET.shfbproj b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.13.0/FreeImage.NET.shfbproj new file mode 100644 index 0000000..1e4da12 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/3.13.0/FreeImage.NET.shfbproj @@ -0,0 +1,41 @@ + + + + Debug + AnyCPU + 2.0 + {d68736d0-a80d-453c-a921-6ada865504b5} + 1.8.0.0 + + Documentation + Documentation + Documentation + + .\Out\ + FreeImage.NET + HtmlHelp1x + False + FreeImage - The productivity booster. FreeImage is licensed under the GNU General Public License %28GPL%29 and the FreeImage Public License %28FIPL%29. + FreeImage .NET Documentation + HashedMemberName + Msdn + AutoDocumentCtors + InheritedMembers, Protected + + + + + + + + + + + + + + \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/FreeImage.NET.shfbproj b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/FreeImage.NET.shfbproj new file mode 100644 index 0000000..fd76c1a --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/FreeImage.NET.shfbproj @@ -0,0 +1,52 @@ + + + + Debug + AnyCPU + 2.0 + {d68736d0-a80d-453c-a921-6ada865504b5} + 1.8.0.0 + + Documentation + Documentation + Documentation + + .\Out\ + FreeImage.NET + HtmlHelp1x + False + FreeImage - The productivity booster. FreeImage is licensed under the GNU General Public License %28GPL%29 and the FreeImage Public License %28FIPL%29. + FreeImage .NET Documentation + HashedMemberName + Msdn + AutoDocumentCtors + InheritedMembers, Protected + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/SHFB.txt b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/SHFB.txt new file mode 100644 index 0000000..fae9b3f --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Doc/SHFB.txt @@ -0,0 +1,9 @@ +Eric Woodruff's Sandcastle Help File Builder 1.6.x.x (SHFB) is needed for FreeImage.NET wrapper +help file creation. It can be downloaded from http://www.codeplex.com/SHFB + +As of FreeImage.NET version 1.08, version 1.8.01 of Sandcastle Help File Builder is used by FreeImage.NET +and thus needed for FreeImage.NET wrapper help file creation. It can still be downloaded +from http://www.codeplex.com/SHFB + +Microsoft's Sandcaste is also needed for SHFB to run correctly. It can be downloaded from +http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.2005.sln b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.2005.sln new file mode 100644 index 0000000..c86757e --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.2005.sln @@ -0,0 +1,214 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Library", "Library\Library.2005.csproj", "{6598A7CD-8F27-4D3F-A675-5AE63113A7C3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFileMerger", "SourceFileMerger\SourceFileMerger.2005.csproj", "{2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTest", "UnitTest\UnitTest.2005.csproj", "{FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 01 - Loading and saving", "Samples\Sample 01 - Loading and saving\Sample 01 - Loading and saving.2005.csproj", "{0D294AB6-FAD4-4364-AAB6-43C1796116A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 02 - Multipaged bitmaps", "Samples\Sample 02 - Multipaged bitmaps\Sample 02 - Multipaged bitmaps.2005.csproj", "{AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 03 - Allocating", "Samples\Sample 03 - Allocating\Sample 03 - Allocating.2005.csproj", "{A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 04 - Getting bitmap informations", "Samples\Sample 04 - Getting bitmap informations\Sample 04 - Getting bitmap informations.2005.csproj", "{1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 05 - Working with pixels", "Samples\Sample 05 - Working with pixels\Sample 05 - Working with pixels.2005.csproj", "{A501F134-8FB6-460B-AFE9-884A696C1C07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 06 - Converting", "Samples\Sample 06 - Converting\Sample 06 - Converting.2005.csproj", "{E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 07 - ICC Profiles", "Samples\Sample 07 - ICC Profiles\Sample 07 - ICC Profiles.2005.csproj", "{3B1BB976-64A7-41FD-B7E2-59104161AF7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 08 - Creating a plugin", "Samples\Sample 08 - Creating a plugin\Sample 08 - Creating a plugin.2005.csproj", "{491042DB-495B-420C-A3BE-5D13019707C5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 09 - Working with streams", "Samples\Sample 09 - Working with streams\Sample 09 - Working with streams.2005.csproj", "{92A454B2-67EF-4B70-99C9-F22B83B6FBFF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 10 - Metadata", "Samples\Sample 10 - Metadata\Sample 10 - Metadata.2005.csproj", "{55DCC37A-E56C-44D9-9C44-8DAB10CD3003}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 11 - Using the FreeImageBitmap class", "Samples\Sample 11 - Using the FreeImageBitmap class\Sample 11 - Using the FreeImageBitmap class.2005.csproj", "{996068CD-D07A-42E0-856F-ACC71E8565EF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x64.ActiveCfg = Debug|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x64.Build.0 = Debug|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x86.ActiveCfg = Debug|x86 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x86.Build.0 = Debug|x86 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|Any CPU.Build.0 = Release|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x64.ActiveCfg = Release|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x64.Build.0 = Release|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x86.ActiveCfg = Release|x86 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x86.Build.0 = Release|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x64.ActiveCfg = Debug|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x64.Build.0 = Debug|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x86.ActiveCfg = Debug|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x86.Build.0 = Debug|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|Any CPU.Build.0 = Release|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x64.ActiveCfg = Release|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x64.Build.0 = Release|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x86.ActiveCfg = Release|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x86.Build.0 = Release|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x64.ActiveCfg = Debug|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x64.Build.0 = Debug|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x86.ActiveCfg = Debug|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x86.Build.0 = Debug|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|Any CPU.Build.0 = Release|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x64.ActiveCfg = Release|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x64.Build.0 = Release|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x86.ActiveCfg = Release|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x86.Build.0 = Release|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x64.ActiveCfg = Debug|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x64.Build.0 = Debug|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x86.ActiveCfg = Debug|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x86.Build.0 = Debug|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|Any CPU.Build.0 = Release|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x64.ActiveCfg = Release|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x64.Build.0 = Release|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x86.ActiveCfg = Release|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x86.Build.0 = Release|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x64.ActiveCfg = Debug|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x64.Build.0 = Debug|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x86.ActiveCfg = Debug|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x86.Build.0 = Debug|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|Any CPU.Build.0 = Release|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x64.ActiveCfg = Release|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x64.Build.0 = Release|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x86.ActiveCfg = Release|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x86.Build.0 = Release|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x64.ActiveCfg = Debug|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x64.Build.0 = Debug|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x86.ActiveCfg = Debug|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x86.Build.0 = Debug|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|Any CPU.Build.0 = Release|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x64.ActiveCfg = Release|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x64.Build.0 = Release|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x86.ActiveCfg = Release|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x86.Build.0 = Release|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x64.ActiveCfg = Debug|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x64.Build.0 = Debug|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x86.ActiveCfg = Debug|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x86.Build.0 = Debug|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|Any CPU.Build.0 = Release|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x64.ActiveCfg = Release|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x64.Build.0 = Release|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x86.ActiveCfg = Release|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x86.Build.0 = Release|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x64.ActiveCfg = Debug|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x64.Build.0 = Debug|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x86.ActiveCfg = Debug|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x86.Build.0 = Debug|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|Any CPU.Build.0 = Release|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x64.ActiveCfg = Release|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x64.Build.0 = Release|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x86.ActiveCfg = Release|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x86.Build.0 = Release|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x64.ActiveCfg = Debug|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x64.Build.0 = Debug|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x86.ActiveCfg = Debug|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x86.Build.0 = Debug|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|Any CPU.Build.0 = Release|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x64.ActiveCfg = Release|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x64.Build.0 = Release|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x86.ActiveCfg = Release|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x86.Build.0 = Release|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x64.ActiveCfg = Debug|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x64.Build.0 = Debug|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x86.ActiveCfg = Debug|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x86.Build.0 = Debug|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|Any CPU.Build.0 = Release|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x64.ActiveCfg = Release|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x64.Build.0 = Release|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x86.ActiveCfg = Release|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x86.Build.0 = Release|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x64.ActiveCfg = Debug|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x64.Build.0 = Debug|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x86.ActiveCfg = Debug|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x86.Build.0 = Debug|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|Any CPU.Build.0 = Release|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x64.ActiveCfg = Release|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x64.Build.0 = Release|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x86.ActiveCfg = Release|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x86.Build.0 = Release|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x64.ActiveCfg = Debug|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x64.Build.0 = Debug|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x86.ActiveCfg = Debug|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x86.Build.0 = Debug|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|Any CPU.Build.0 = Release|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x64.ActiveCfg = Release|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x64.Build.0 = Release|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x86.ActiveCfg = Release|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x86.Build.0 = Release|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x64.ActiveCfg = Debug|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x64.Build.0 = Debug|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x86.ActiveCfg = Debug|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x86.Build.0 = Debug|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|Any CPU.Build.0 = Release|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x64.ActiveCfg = Release|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x64.Build.0 = Release|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x86.ActiveCfg = Release|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x86.Build.0 = Release|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x64.ActiveCfg = Debug|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x64.Build.0 = Debug|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x86.ActiveCfg = Debug|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x86.Build.0 = Debug|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|Any CPU.Build.0 = Release|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x64.ActiveCfg = Release|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x64.Build.0 = Release|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x86.ActiveCfg = Release|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.nunit b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.nunit new file mode 100644 index 0000000..c1da949 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.nunit @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.sln b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.sln new file mode 100644 index 0000000..e2df94d --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/FreeImage.NET.sln @@ -0,0 +1,214 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Library", "Library\Library.csproj", "{6598A7CD-8F27-4D3F-A675-5AE63113A7C3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceFileMerger", "SourceFileMerger\SourceFileMerger.csproj", "{2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTest", "UnitTest\UnitTest.csproj", "{FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 01 - Loading and saving", "Samples\Sample 01 - Loading and saving\Sample 01 - Loading and saving.csproj", "{0D294AB6-FAD4-4364-AAB6-43C1796116A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 02 - Multipaged bitmaps", "Samples\Sample 02 - Multipaged bitmaps\Sample 02 - Multipaged bitmaps.csproj", "{AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 03 - Allocating", "Samples\Sample 03 - Allocating\Sample 03 - Allocating.csproj", "{A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 04 - Getting bitmap informations", "Samples\Sample 04 - Getting bitmap informations\Sample 04 - Getting bitmap informations.csproj", "{1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 05 - Working with pixels", "Samples\Sample 05 - Working with pixels\Sample 05 - Working with pixels.csproj", "{A501F134-8FB6-460B-AFE9-884A696C1C07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 06 - Converting", "Samples\Sample 06 - Converting\Sample 06 - Converting.csproj", "{E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 07 - ICC Profiles", "Samples\Sample 07 - ICC Profiles\Sample 07 - ICC Profiles.csproj", "{3B1BB976-64A7-41FD-B7E2-59104161AF7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 08 - Creating a plugin", "Samples\Sample 08 - Creating a plugin\Sample 08 - Creating a plugin.csproj", "{491042DB-495B-420C-A3BE-5D13019707C5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 09 - Working with streams", "Samples\Sample 09 - Working with streams\Sample 09 - Working with streams.csproj", "{92A454B2-67EF-4B70-99C9-F22B83B6FBFF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 10 - Metadata", "Samples\Sample 10 - Metadata\Sample 10 - Metadata.csproj", "{55DCC37A-E56C-44D9-9C44-8DAB10CD3003}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample 11 - Using the FreeImageBitmap class", "Samples\Sample 11 - Using the FreeImageBitmap class\Sample 11 - Using the FreeImageBitmap class.csproj", "{996068CD-D07A-42E0-856F-ACC71E8565EF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x64.ActiveCfg = Debug|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x64.Build.0 = Debug|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x86.ActiveCfg = Debug|x86 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Debug|x86.Build.0 = Debug|x86 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|Any CPU.Build.0 = Release|Any CPU + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x64.ActiveCfg = Release|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x64.Build.0 = Release|x64 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x86.ActiveCfg = Release|x86 + {6598A7CD-8F27-4D3F-A675-5AE63113A7C3}.Release|x86.Build.0 = Release|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x64.ActiveCfg = Debug|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x64.Build.0 = Debug|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x86.ActiveCfg = Debug|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Debug|x86.Build.0 = Debug|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|Any CPU.Build.0 = Release|Any CPU + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x64.ActiveCfg = Release|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x64.Build.0 = Release|x64 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x86.ActiveCfg = Release|x86 + {2AD35641-C1EA-492C-B081-F4AA5AAE8FA1}.Release|x86.Build.0 = Release|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x64.ActiveCfg = Debug|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x64.Build.0 = Debug|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x86.ActiveCfg = Debug|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Debug|x86.Build.0 = Debug|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|Any CPU.Build.0 = Release|Any CPU + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x64.ActiveCfg = Release|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x64.Build.0 = Release|x64 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x86.ActiveCfg = Release|x86 + {FC7B3A04-FACE-4F07-9CFD-8C6ED06E3CDC}.Release|x86.Build.0 = Release|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x64.ActiveCfg = Debug|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x64.Build.0 = Debug|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x86.ActiveCfg = Debug|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Debug|x86.Build.0 = Debug|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|Any CPU.Build.0 = Release|Any CPU + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x64.ActiveCfg = Release|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x64.Build.0 = Release|x64 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x86.ActiveCfg = Release|x86 + {0D294AB6-FAD4-4364-AAB6-43C1796116A9}.Release|x86.Build.0 = Release|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x64.ActiveCfg = Debug|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x64.Build.0 = Debug|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x86.ActiveCfg = Debug|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Debug|x86.Build.0 = Debug|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|Any CPU.Build.0 = Release|Any CPU + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x64.ActiveCfg = Release|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x64.Build.0 = Release|x64 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x86.ActiveCfg = Release|x86 + {AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}.Release|x86.Build.0 = Release|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x64.ActiveCfg = Debug|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x64.Build.0 = Debug|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x86.ActiveCfg = Debug|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Debug|x86.Build.0 = Debug|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|Any CPU.Build.0 = Release|Any CPU + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x64.ActiveCfg = Release|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x64.Build.0 = Release|x64 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x86.ActiveCfg = Release|x86 + {A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}.Release|x86.Build.0 = Release|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x64.ActiveCfg = Debug|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x64.Build.0 = Debug|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x86.ActiveCfg = Debug|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Debug|x86.Build.0 = Debug|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|Any CPU.Build.0 = Release|Any CPU + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x64.ActiveCfg = Release|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x64.Build.0 = Release|x64 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x86.ActiveCfg = Release|x86 + {1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}.Release|x86.Build.0 = Release|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x64.ActiveCfg = Debug|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x64.Build.0 = Debug|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x86.ActiveCfg = Debug|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Debug|x86.Build.0 = Debug|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|Any CPU.Build.0 = Release|Any CPU + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x64.ActiveCfg = Release|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x64.Build.0 = Release|x64 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x86.ActiveCfg = Release|x86 + {A501F134-8FB6-460B-AFE9-884A696C1C07}.Release|x86.Build.0 = Release|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x64.ActiveCfg = Debug|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x64.Build.0 = Debug|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x86.ActiveCfg = Debug|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Debug|x86.Build.0 = Debug|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|Any CPU.Build.0 = Release|Any CPU + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x64.ActiveCfg = Release|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x64.Build.0 = Release|x64 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x86.ActiveCfg = Release|x86 + {E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}.Release|x86.Build.0 = Release|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x64.ActiveCfg = Debug|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x64.Build.0 = Debug|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x86.ActiveCfg = Debug|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Debug|x86.Build.0 = Debug|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|Any CPU.Build.0 = Release|Any CPU + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x64.ActiveCfg = Release|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x64.Build.0 = Release|x64 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x86.ActiveCfg = Release|x86 + {3B1BB976-64A7-41FD-B7E2-59104161AF7E}.Release|x86.Build.0 = Release|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x64.ActiveCfg = Debug|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x64.Build.0 = Debug|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x86.ActiveCfg = Debug|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Debug|x86.Build.0 = Debug|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|Any CPU.Build.0 = Release|Any CPU + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x64.ActiveCfg = Release|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x64.Build.0 = Release|x64 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x86.ActiveCfg = Release|x86 + {491042DB-495B-420C-A3BE-5D13019707C5}.Release|x86.Build.0 = Release|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x64.ActiveCfg = Debug|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x64.Build.0 = Debug|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x86.ActiveCfg = Debug|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Debug|x86.Build.0 = Debug|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|Any CPU.Build.0 = Release|Any CPU + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x64.ActiveCfg = Release|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x64.Build.0 = Release|x64 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x86.ActiveCfg = Release|x86 + {92A454B2-67EF-4B70-99C9-F22B83B6FBFF}.Release|x86.Build.0 = Release|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x64.ActiveCfg = Debug|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x64.Build.0 = Debug|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x86.ActiveCfg = Debug|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Debug|x86.Build.0 = Debug|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|Any CPU.Build.0 = Release|Any CPU + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x64.ActiveCfg = Release|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x64.Build.0 = Release|x64 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x86.ActiveCfg = Release|x86 + {55DCC37A-E56C-44D9-9C44-8DAB10CD3003}.Release|x86.Build.0 = Release|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x64.ActiveCfg = Debug|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x64.Build.0 = Debug|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x86.ActiveCfg = Debug|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Debug|x86.Build.0 = Debug|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|Any CPU.Build.0 = Release|Any CPU + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x64.ActiveCfg = Release|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x64.Build.0 = Release|x64 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x86.ActiveCfg = Release|x86 + {996068CD-D07A-42E0-856F-ACC71E8565EF}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageBitmap.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageBitmap.cs new file mode 100644 index 0000000..f22d396 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageBitmap.cs @@ -0,0 +1,4378 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.12 $ +// $Date: 2011/12/22 14:54:22 $ +// $Id: FreeImageBitmap.cs,v 1.12 2011/12/22 14:54:22 drolon Exp $ +// ========================================================== + +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Runtime.InteropServices; +using System.Runtime.Serialization; +using System.Collections; +using System.Collections.Generic; +using FreeImageAPI.Metadata; +using System.Diagnostics; + +namespace FreeImageAPI +{ + /// + /// Encapsulates a FreeImage-bitmap. + /// + [Serializable, Guid("64a4c935-b757-499c-ab8c-6110316a9e51")] + public class FreeImageBitmap : MarshalByRefObject, ICloneable, IDisposable, IEnumerable, ISerializable + { + #region Fields + + /// + /// Indicates whether this instance is disposed. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private bool disposed; + + /// + /// Tab object. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private object tag; + + /// + /// Object used to syncronize lock methods. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private object lockObject = new object(); + + /// + /// Holds information used by SaveAdd() methods. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private SaveInformation saveInformation = new SaveInformation(); + + /// + /// The stream that this instance was loaded from or + /// null if it has been cloned or deserialized. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private Stream stream; + + /// + /// True if the stream must be disposed with this + /// instance. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private bool disposeStream; + + /// + /// The number of frames contained by a mutlipage bitmap. + /// Default value is 1 and only changed if needed. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private int frameCount = 1; + + /// + /// The index of the loaded frame. + /// Default value is 0 and only changed if needed. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private int frameIndex = 0; + + /// + /// Format of the sourceimage. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private FREE_IMAGE_FORMAT originalFormat = FREE_IMAGE_FORMAT.FIF_UNKNOWN; + + /// + /// Handle to the encapsulated FreeImage-bitmap. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private FIBITMAP dib; + + private const string ErrorLoadingBitmap = "Unable to load bitmap."; + private const string ErrorLoadingFrame = "Unable to load frame."; + private const string ErrorCreatingBitmap = "Unable to create bitmap."; + private const string ErrorUnloadBitmap = "Unable to unload bitmap."; + + #endregion + + #region Constructors and Destructor + + /// + /// Initializes a new instance of the class. + /// + protected FreeImageBitmap() + { + } + + /// + /// Initializes a new instance of the class. + /// For internal use only. + /// + /// The operation failed. + internal protected FreeImageBitmap(FIBITMAP dib) + { + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + this.dib = dib; + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image. + /// + /// The original to clone from. + /// The operation failed. + /// is a null reference. + public FreeImageBitmap(FreeImageBitmap original) + { + if (original == null) + { + throw new ArgumentNullException("original"); + } + original.EnsureNotDisposed(); + dib = FreeImage.Clone(original.dib); + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + originalFormat = original.originalFormat; + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image with the specified size. + /// + /// The original to clone from. + /// The Size structure that represent the + /// size of the new . + /// The operation failed. + /// is a null reference. + /// + /// or are less or equal zero. + /// + public FreeImageBitmap(FreeImageBitmap original, Size newSize) + : this(original, newSize.Width, newSize.Height) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image with the specified size. + /// + /// The original to clone from. + /// Width of the new . + /// Height of the new . + /// The operation failed. + /// is a null reference. + /// + /// or are less or equal zero. + public FreeImageBitmap(FreeImageBitmap original, int width, int height) + { + if (original == null) + { + throw new ArgumentNullException("original"); + } + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + original.EnsureNotDisposed(); + dib = FreeImage.Rescale(original.dib, width, height, FREE_IMAGE_FILTER.FILTER_BICUBIC); + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + originalFormat = original.originalFormat; + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image. + /// + /// The original to clone from. + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + public FreeImageBitmap(Image original) + : this(original as Bitmap) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image with the specified size. + /// + /// The original to clone from. + /// The Size structure that represent the + /// size of the new . + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is a null reference. + /// + /// or are less or equal zero. + /// + public FreeImageBitmap(Image original, Size newSize) + : this(original as Bitmap, newSize.Width, newSize.Height) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image with the specified size. + /// + /// The original to clone from. + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is a null reference. + /// + /// or are less or equal zero. + public FreeImageBitmap(Image original, int width, int height) + : this(original as Bitmap, width, height) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image. + /// + /// The original to clone from. + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// is a null reference. + /// The operation failed. + public FreeImageBitmap(Bitmap original) + { + if (original == null) + { + throw new ArgumentNullException("original"); + } + dib = FreeImage.CreateFromBitmap(original, true); + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + originalFormat = FreeImage.GetFormat(original.RawFormat); + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image with the specified size. + /// + /// The original to clone from. + /// The Size structure that represent the + /// size of the new . + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is a null reference. + /// + /// or are less or equal zero. + /// + public FreeImageBitmap(Bitmap original, Size newSize) + : this(original, newSize.Width, newSize.Height) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified image with the specified size. + /// + /// The original to clone from. + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is a null reference. + /// + /// or are less or equal zero. + public FreeImageBitmap(Bitmap original, int width, int height) + { + if (original == null) + { + throw new ArgumentNullException("original"); + } + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + FIBITMAP temp = FreeImage.CreateFromBitmap(original, true); + if (temp.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + dib = FreeImage.Rescale(temp, width, height, FREE_IMAGE_FILTER.FILTER_BICUBIC); + FreeImage.Unload(temp); + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + originalFormat = FreeImage.GetFormat(original.RawFormat); + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class + /// bases on the specified stream. + /// + /// Stream to read from. + /// Ignored. + /// The operation failed. + /// is a null reference. + /// + /// You must keep the stream open for the lifetime of the . + /// + public FreeImageBitmap(Stream stream, bool useIcm) + : this(stream) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified stream. + /// + /// Stream to read from. + /// The operation failed. + /// is a null reference. + /// + /// You must keep the stream open for the lifetime of the . + /// + public FreeImageBitmap(Stream stream) + : this(stream, FREE_IMAGE_FORMAT.FIF_UNKNOWN, FREE_IMAGE_LOAD_FLAGS.DEFAULT) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified stream in the specified format. + /// + /// Stream to read from. + /// Format of the image. + /// The operation failed. + /// is a null reference. + /// + /// You must keep the stream open for the lifetime of the . + /// + public FreeImageBitmap(Stream stream, FREE_IMAGE_FORMAT format) + : this(stream, format, FREE_IMAGE_LOAD_FLAGS.DEFAULT) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified stream with the specified loading flags. + /// + /// Stream to read from. + /// Flags to enable or disable plugin-features. + /// The operation failed. + /// is a null reference. + /// + /// You must keep the stream open for the lifetime of the . + /// + public FreeImageBitmap(Stream stream, FREE_IMAGE_LOAD_FLAGS flags) + : this(stream, FREE_IMAGE_FORMAT.FIF_UNKNOWN, flags) + { + } + + /// + /// Initializes a new instance of the class + /// bases on the specified stream in the specified format + /// with the specified loading flags. + /// + /// Stream to read from. + /// Format of the image. + /// Flags to enable or disable plugin-features. + /// The operation failed. + /// is a null reference. + /// + /// You must keep the stream open for the lifetime of the . + /// + public FreeImageBitmap(Stream stream, FREE_IMAGE_FORMAT format, FREE_IMAGE_LOAD_FLAGS flags) + { + if (stream == null) + { + throw new ArgumentNullException("stream"); + } + this.stream = stream; + disposeStream = false; + LoadFromStream(stream, format, flags); + } + + /// + /// Initializes a new instance of the class bases on the specified file. + /// + /// The complete name of the file to load. + /// The operation failed. + /// is a null reference. + /// does not exist. + public FreeImageBitmap(string filename) + : this(filename, FREE_IMAGE_LOAD_FLAGS.DEFAULT) + { + } + + /// + /// Initializes a new instance of the class bases on the specified file. + /// + /// The complete name of the file to load. + /// Ignored. + /// The operation failed. + /// is a null reference. + /// does not exist. + public FreeImageBitmap(string filename, bool useIcm) + : this(filename) + { + } + + /// + /// Initializes a new instance of the class bases on the specified file + /// with the specified loading flags. + /// + /// The complete name of the file to load. + /// Flags to enable or disable plugin-features. + /// The operation failed. + /// is a null reference. + /// does not exist. + public FreeImageBitmap(string filename, FREE_IMAGE_LOAD_FLAGS flags) + : this(filename, FREE_IMAGE_FORMAT.FIF_UNKNOWN, flags) + { + } + + /// + /// Initializes a new instance of the class bases on the specified file + /// in the specified format. + /// + /// The complete name of the file to load. + /// Format of the image. + /// The operation failed. + /// is a null reference. + /// does not exist. + public FreeImageBitmap(string filename, FREE_IMAGE_FORMAT format) + : this(filename, format, FREE_IMAGE_LOAD_FLAGS.DEFAULT) + { + } + + /// + /// Initializes a new instance of the class bases on the specified file + /// in the specified format with the specified loading flags. + /// + /// The complete name of the file to load. + /// Format of the image. + /// Flags to enable or disable plugin-features. + /// The operation failed. + /// is a null reference. + /// does not exist. + public FreeImageBitmap(string filename, FREE_IMAGE_FORMAT format, FREE_IMAGE_LOAD_FLAGS flags) + { + if (filename == null) + { + throw new ArgumentNullException("filename"); + } + if (!File.Exists(filename)) + { + throw new FileNotFoundException("filename"); + } + + saveInformation.filename = filename; + stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); + disposeStream = true; + LoadFromStream(stream, format, flags); + } + + /// + /// Initializes a new instance of the class + /// bases on the specified size. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// The operation failed. + public FreeImageBitmap(int width, int height) + { + dib = FreeImage.Allocate( + width, + height, + 24, + FreeImage.FI_RGBA_RED_MASK, + FreeImage.FI_RGBA_GREEN_MASK, + FreeImage.FI_RGBA_BLUE_MASK); + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class bases on the specified resource. + /// + /// The class used to extract the resource. + /// The name of the resource. + /// The operation failed. + public FreeImageBitmap(Type type, string resource) + : this(type.Module.Assembly.GetManifestResourceStream(type, resource)) + { + } + + /// + /// Initializes a new instance of the class bases on the specified size + /// and with the resolution of the specified object. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// The Graphics object that specifies the resolution for the new . + /// The operation failed. + /// is a null reference. + public FreeImageBitmap(int width, int height, Graphics g) + : this(width, height) + { + FreeImage.SetResolutionX(dib, (uint)g.DpiX); + FreeImage.SetResolutionY(dib, (uint)g.DpiY); + } + + /// + /// Initializes a new instance of the class bases on the specified size and format. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// The PixelFormat enumeration for the new . + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is invalid. + /// + /// or are less or equal zero. + public FreeImageBitmap(int width, int height, PixelFormat format) + { + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + uint bpp, redMask, greenMask, blueMask; + FREE_IMAGE_TYPE type; + if (!FreeImage.GetFormatParameters(format, out type, out bpp, out redMask, out greenMask, out blueMask)) + { + throw new ArgumentException("format is invalid"); + } + dib = FreeImage.AllocateT(type, width, height, (int)bpp, redMask, greenMask, blueMask); + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class bases on the specified size and type. + /// Only non standard bitmaps are supported. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// The type of the bitmap. + /// The operation failed. + /// + /// is FIT_BITMAP or FIT_UNKNOWN. + /// is invalid. + /// + /// or are less or equal zero. + public FreeImageBitmap(int width, int height, FREE_IMAGE_TYPE type) + { + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + if ((type == FREE_IMAGE_TYPE.FIT_BITMAP) || (type == FREE_IMAGE_TYPE.FIT_UNKNOWN)) + { + throw new ArgumentException("type is invalid."); + } + dib = FreeImage.AllocateT(type, width, height, 0, 0u, 0u, 0u); + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class bases on the specified size, + /// pixel format and pixel data. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// Integer that specifies the byte offset between the beginning + /// of one scan line and the next. This is usually (but not necessarily) + /// the number of bytes in the pixel format (for example, 2 for 16 bits per pixel) + /// multiplied by the width of the bitmap. The value passed to this parameter must + /// be a multiple of four.. + /// The PixelFormat enumeration for the new . + /// Pointer to an array of bytes that contains the pixel data. + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is invalid. + /// + /// or are less or equal zero. + public FreeImageBitmap(int width, int height, int stride, PixelFormat format, IntPtr scan0) + { + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + uint bpp, redMask, greenMask, blueMask; + FREE_IMAGE_TYPE type; + bool topDown = (stride > 0); + stride = (stride > 0) ? stride : (stride * -1); + + if (!FreeImage.GetFormatParameters(format, out type, out bpp, out redMask, out greenMask, out blueMask)) + { + throw new ArgumentException("format is invalid."); + } + + dib = FreeImage.ConvertFromRawBits( + scan0, type, width, height, stride, bpp, redMask, greenMask, blueMask, topDown); + + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class bases on the specified size, + /// pixel format and pixel data. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// Integer that specifies the byte offset between the beginning + /// of one scan line and the next. This is usually (but not necessarily) + /// the number of bytes in the pixel format (for example, 2 for 16 bits per pixel) + /// multiplied by the width of the bitmap. The value passed to this parameter must + /// be a multiple of four.. + /// The PixelFormat enumeration for the new . + /// Array of bytes containing the bitmap data. + /// + /// Although this constructor supports creating images in both formats + /// + /// and , bitmaps + /// created in these formats are treated like any normal 32-bit RGBA and 64-bit RGBA + /// images respectively. Currently, there is no support for automatic premultiplying images in + /// . + /// + /// The operation failed. + /// is invalid. + /// + /// or are less or equal zero. + /// is null + public FreeImageBitmap(int width, int height, int stride, PixelFormat format, byte[] bits) + { + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + if (bits == null) + { + throw new ArgumentNullException("bits"); + } + uint bpp, redMask, greenMask, blueMask; + FREE_IMAGE_TYPE type; + bool topDown = (stride > 0); + stride = (stride > 0) ? stride : (stride * -1); + + if (!FreeImage.GetFormatParameters(format, out type, out bpp, out redMask, out greenMask, out blueMask)) + { + throw new ArgumentException("format is invalid."); + } + + dib = FreeImage.ConvertFromRawBits( + bits, type, width, height, stride, bpp, redMask, greenMask, blueMask, topDown); + + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class bases on the specified size, + /// pixel format and pixel data. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// Integer that specifies the byte offset between the beginning + /// of one scan line and the next. This is usually (but not necessarily) + /// the number of bytes in the pixel format (for example, 2 for 16 bits per pixel) + /// multiplied by the width of the bitmap. The value passed to this parameter must + /// be a multiple of four.. + /// The color depth of the new + /// The type for the new . + /// Pointer to an array of bytes that contains the pixel data. + /// The operation failed. + /// is invalid. + /// + /// or are less or equal zero. + public FreeImageBitmap(int width, int height, int stride, int bpp, FREE_IMAGE_TYPE type, IntPtr scan0) + { + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + uint redMask, greenMask, blueMask; + bool topDown = (stride > 0); + stride = (stride > 0) ? stride : (stride * -1); + + if (!FreeImage.GetTypeParameters(type, bpp, out redMask, out greenMask, out blueMask)) + { + throw new ArgumentException("bpp and type are invalid or not supported."); + } + + dib = FreeImage.ConvertFromRawBits( + scan0, type, width, height, stride, (uint)bpp, redMask, greenMask, blueMask, topDown); + + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class bases on the specified size, + /// pixel format and pixel data. + /// + /// The width, in pixels, of the new . + /// The height, in pixels, of the new . + /// Integer that specifies the byte offset between the beginning + /// of one scan line and the next. This is usually (but not necessarily) + /// the number of bytes in the pixel format (for example, 2 for 16 bits per pixel) + /// multiplied by the width of the bitmap. The value passed to this parameter must + /// be a multiple of four.. + /// The color depth of the new + /// The type for the new . + /// Array of bytes containing the bitmap data. + /// The operation failed. + /// is invalid. + /// + /// or are less or equal zero. + /// is null + public FreeImageBitmap(int width, int height, int stride, int bpp, FREE_IMAGE_TYPE type, byte[] bits) + { + if (width <= 0) + { + throw new ArgumentOutOfRangeException("width"); + } + if (height <= 0) + { + throw new ArgumentOutOfRangeException("height"); + } + if (bits == null) + { + throw new ArgumentNullException("bits"); + } + uint redMask, greenMask, blueMask; + bool topDown = (stride > 0); + stride = (stride > 0) ? stride : (stride * -1); + + if (!FreeImage.GetTypeParameters(type, bpp, out redMask, out greenMask, out blueMask)) + { + throw new ArgumentException("bpp and type are invalid or not supported."); + } + + dib = FreeImage.ConvertFromRawBits( + bits, type, width, height, stride, (uint)bpp, redMask, greenMask, blueMask, topDown); + + if (dib.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + AddMemoryPressure(); + } + + /// + /// Initializes a new instance of the class. + /// + /// The operation failed. + /// The operation failed. + public FreeImageBitmap(SerializationInfo info, StreamingContext context) + { + try + { + byte[] data = (byte[])info.GetValue("Bitmap Data", typeof(byte[])); + if ((data != null) && (data.Length > 0)) + { + MemoryStream memory = new MemoryStream(data); + FREE_IMAGE_FORMAT format = FREE_IMAGE_FORMAT.FIF_TIFF; + dib = FreeImage.LoadFromStream(memory, ref format); + + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + + AddMemoryPressure(); + } + } + catch (Exception ex) + { + throw new SerializationException("Deserialization failed.", ex); + } + } + + /// + /// Frees all managed and unmanaged ressources. + /// + ~FreeImageBitmap() + { + Dispose(false); + } + + #endregion + + #region Operators + + /// + /// Converts a instance to a instance. + /// + /// A instance. + /// A new instance of initialized to . + /// + /// The explicit conversion from into Bitmap + /// allows to create an instance on the fly and use it as if + /// was a Bitmap. This way it can be directly used with a + /// PixtureBox for example without having to call any + /// conversion operations. + /// + public static explicit operator Bitmap(FreeImageBitmap value) + { + return value.ToBitmap(); + } + + /// + /// Converts a instance to a instance. + /// + /// A instance. + /// A new instance of initialized to . + /// + /// The explicit conversion from into + /// allows to create an instance on the fly to perform + /// image processing operations and converting it back. + /// + public static explicit operator FreeImageBitmap(Bitmap value) + { + return new FreeImageBitmap(value); + } + + /// + /// Determines whether two specified objects have the same value. + /// + /// A or a null reference (Nothing in Visual Basic). + /// A or a null reference (Nothing in Visual Basic). + /// + /// true if the value of left is the same as the value of right; otherwise, false. + /// + public static bool operator ==(FreeImageBitmap left, FreeImageBitmap right) + { + if (object.ReferenceEquals(left, right)) + { + return true; + } + else if (object.ReferenceEquals(left, null) || object.ReferenceEquals(right, null)) + { + return false; + } + else + { + left.EnsureNotDisposed(); + right.EnsureNotDisposed(); + return FreeImage.Compare(left.dib, right.dib, FREE_IMAGE_COMPARE_FLAGS.COMPLETE); + } + } + + /// + /// Determines whether two specified objects have different values. + /// + /// A or a null reference (Nothing in Visual Basic). + /// A or a null reference (Nothing in Visual Basic). + /// + /// true if the value of left is different from the value of right; otherwise, false. + /// + public static bool operator !=(FreeImageBitmap left, FreeImageBitmap right) + { + return (!(left == right)); + } + + #endregion + + #region Properties + + /// + /// Type of the bitmap. + /// + public FREE_IMAGE_TYPE ImageType + { + get + { + EnsureNotDisposed(); + return FreeImage.GetImageType(dib); + } + } + + /// + /// Number of palette entries. + /// + public int ColorsUsed + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetColorsUsed(dib); + } + } + + /// + /// The number of unique colors actually used by the bitmap. This might be different from + /// what ColorsUsed returns, which actually returns the palette size for palletised images. + /// Works for FIT_BITMAP type bitmaps only. + /// + public int UniqueColors + { + get + { + EnsureNotDisposed(); + return FreeImage.GetUniqueColors(dib); + } + } + + /// + /// The size of one pixel in the bitmap in bits. + /// + public int ColorDepth + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetBPP(dib); + } + } + + /// + /// Width of the bitmap in pixel units. + /// + public int Width + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetWidth(dib); + } + } + + /// + /// Height of the bitmap in pixel units. + /// + public int Height + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetHeight(dib); + } + } + + /// + /// Returns the width of the bitmap in bytes, rounded to the next 32-bit boundary. + /// + public int Pitch + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetPitch(dib); + } + } + + /// + /// Size of the bitmap in memory. + /// + public int DataSize + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetDIBSize(dib); + } + } + + /// + /// Returns a structure that represents the palette of a FreeImage bitmap. + /// + /// is false. + public Palette Palette + { + get + { + EnsureNotDisposed(); + if (HasPalette) + { + return new Palette(dib); + } + throw new InvalidOperationException("This bitmap does not have a palette."); + } + } + + /// + /// Gets whether the bitmap is RGB 555. + /// + public bool IsRGB555 + { + get + { + EnsureNotDisposed(); + return FreeImage.IsRGB555(dib); + } + } + + /// + /// Gets whether the bitmap is RGB 565. + /// + public bool IsRGB565 + { + get + { + EnsureNotDisposed(); + return FreeImage.IsRGB565(dib); + } + } + + /// + /// Gets the horizontal resolution, in pixels per inch, of this . + /// + public float HorizontalResolution + { + get + { + EnsureNotDisposed(); + return (float)FreeImage.GetResolutionX(dib); + } + private set + { + EnsureNotDisposed(); + FreeImage.SetResolutionX(dib, (uint)value); + } + } + + /// + /// Gets the vertical resolution, in pixels per inch, of this . + /// + public float VerticalResolution + { + get + { + EnsureNotDisposed(); + return (float)FreeImage.GetResolutionY(dib); + } + private set + { + EnsureNotDisposed(); + FreeImage.SetResolutionY(dib, (uint)value); + } + } + + /// + /// Returns the structure of this . + /// + public BITMAPINFOHEADER InfoHeader + { + get + { + EnsureNotDisposed(); + return FreeImage.GetInfoHeaderEx(dib); + } + } + + /// + /// Returns the structure of a this . + /// + public BITMAPINFO Info + { + get + { + EnsureNotDisposed(); + return FreeImage.GetInfoEx(dib); + } + } + + /// + /// Investigates the color type of this + /// by reading the bitmaps pixel bits and analysing them. + /// + public FREE_IMAGE_COLOR_TYPE ColorType + { + get + { + EnsureNotDisposed(); + return FreeImage.GetColorType(dib); + } + } + + /// + /// Bit pattern describing the red color component of a pixel in this . + /// + public uint RedMask + { + get + { + EnsureNotDisposed(); + return FreeImage.GetRedMask(dib); + } + } + + /// + /// Bit pattern describing the green color component of a pixel in this . + /// + public uint GreenMask + { + get + { + EnsureNotDisposed(); + return FreeImage.GetGreenMask(dib); + } + } + + /// + /// Bit pattern describing the blue color component of a pixel in this . + /// + public uint BlueMask + { + get + { + EnsureNotDisposed(); + return FreeImage.GetBlueMask(dib); + } + } + + /// + /// Number of transparent colors in a palletised . + /// + public int TransparencyCount + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetTransparencyCount(dib); + } + } + + /// + /// Get or sets transparency table of this . + /// + public byte[] TransparencyTable + { + get + { + EnsureNotDisposed(); + return FreeImage.GetTransparencyTableEx(dib); + } + set + { + EnsureNotDisposed(); + FreeImage.SetTransparencyTable(dib, value); + } + } + + /// + /// Gets or sets whether this is transparent. + /// + public bool IsTransparent + { + get + { + EnsureNotDisposed(); + return FreeImage.IsTransparent(dib); + } + set + { + EnsureNotDisposed(); + FreeImage.SetTransparent(dib, value); + } + } + + /// + /// Gets whether this has a file background color. + /// + public bool HasBackgroundColor + { + get + { + EnsureNotDisposed(); + return FreeImage.HasBackgroundColor(dib); + } + } + + /// + /// Gets or sets the background color of this . + /// In case the value is null, the background color is removed. + /// + /// Get: There is no background color available. + /// Set: Setting background color failed. + public Color? BackgroundColor + { + get + { + EnsureNotDisposed(); + if (!FreeImage.HasBackgroundColor(dib)) + { + throw new InvalidOperationException("No background color available."); + } + RGBQUAD rgbq; + FreeImage.GetBackgroundColor(dib, out rgbq); + return rgbq.Color; + } + set + { + EnsureNotDisposed(); + if (!FreeImage.SetBackgroundColor(dib, (value.HasValue ? new RGBQUAD[] { value.Value } : null))) + { + throw new Exception("Setting background color failed."); + } + } + } + + /// + /// Pointer to the data-bits of this . + /// + public IntPtr Bits + { + get + { + EnsureNotDisposed(); + return FreeImage.GetBits(dib); + } + } + + /// + /// Width, in bytes, of this . + /// + public int Line + { + get + { + EnsureNotDisposed(); + return (int)FreeImage.GetLine(dib); + } + } + + /// + /// Pointer to the scanline of the top most pixel row of this . + /// + public IntPtr Scan0 + { + get + { + EnsureNotDisposed(); + return FreeImage.GetScanLine(dib, (int)(FreeImage.GetHeight(dib) - 1)); + } + } + + /// + /// Width, in bytes, of this . + /// In case this is top down Stride will be positive, else negative. + /// + public int Stride + { + get + { + return -Line; + } + } + + /// + /// Gets attribute flags for the pixel data of this . + /// + public unsafe int Flags + { + get + { + EnsureNotDisposed(); + int result = 0; + byte alpha; + int cd = ColorDepth; + + if ((cd == 32) || (FreeImage.GetTransparencyCount(dib) != 0)) + { + result += (int)ImageFlags.HasAlpha; + } + + if (cd == 32) + { + uint width = FreeImage.GetWidth(dib); + uint height = FreeImage.GetHeight(dib); + for (int y = 0; y < height; y++) + { + RGBQUAD* scanline = (RGBQUAD*)FreeImage.GetScanLine(dib, y); + for (int x = 0; x < width; x++) + { + alpha = scanline[x].Color.A; + if (alpha != byte.MinValue && alpha != byte.MaxValue) + { + result += (int)ImageFlags.HasTranslucent; + y = (int)height; + break; + } + } + } + } + else if (FreeImage.GetTransparencyCount(dib) != 0) + { + byte[] transTable = FreeImage.GetTransparencyTableEx(dib); + for (int i = 0; i < transTable.Length; i++) + { + if (transTable[i] != byte.MinValue && transTable[i] != byte.MaxValue) + { + result += (int)ImageFlags.HasTranslucent; + break; + } + } + } + + if (FreeImage.GetICCProfileEx(dib).IsCMYK) + { + result += (int)ImageFlags.ColorSpaceCmyk; + } + else + { + result += (int)ImageFlags.ColorSpaceRgb; + } + + if (FreeImage.GetColorType(dib) == FREE_IMAGE_COLOR_TYPE.FIC_MINISBLACK || + FreeImage.GetColorType(dib) == FREE_IMAGE_COLOR_TYPE.FIC_MINISWHITE) + { + result += (int)ImageFlags.ColorSpaceGray; + } + + if (originalFormat == FREE_IMAGE_FORMAT.FIF_BMP || + originalFormat == FREE_IMAGE_FORMAT.FIF_FAXG3 || + originalFormat == FREE_IMAGE_FORMAT.FIF_ICO || + originalFormat == FREE_IMAGE_FORMAT.FIF_JPEG || + originalFormat == FREE_IMAGE_FORMAT.FIF_PCX || + originalFormat == FREE_IMAGE_FORMAT.FIF_PNG || + originalFormat == FREE_IMAGE_FORMAT.FIF_PSD || + originalFormat == FREE_IMAGE_FORMAT.FIF_TIFF) + { + result += (int)ImageFlags.HasRealDpi; + } + + return result; + } + } + + /// + /// Gets the width and height of this . + /// + public SizeF PhysicalDimension + { + get + { + EnsureNotDisposed(); + return new SizeF((float)FreeImage.GetWidth(dib), (float)FreeImage.GetHeight(dib)); + } + } + + /// + /// Gets the pixel format for this . + /// + public PixelFormat PixelFormat + { + get + { + EnsureNotDisposed(); + return FreeImage.GetPixelFormat(dib); + } + } + + /// + /// Gets IDs of the property items stored in this . + /// + public int[] PropertyIdList + { + get + { + EnsureNotDisposed(); + List list = new List(); + ImageMetadata metaData = new ImageMetadata(dib, true); + + foreach (MetadataModel metadataModel in metaData) + { + foreach (MetadataTag metadataTag in metadataModel) + { + list.Add(metadataTag.ID); + } + } + + return list.ToArray(); + } + } + + /// + /// Gets all the property items (pieces of metadata) stored in this . + /// + public PropertyItem[] PropertyItems + { + get + { + EnsureNotDisposed(); + List list = new List(); + ImageMetadata metaData = new ImageMetadata(dib, true); + + foreach (MetadataModel metadataModel in metaData) + { + foreach (MetadataTag metadataTag in metadataModel) + { + list.Add(metadataTag.GetPropertyItem()); + } + } + + return list.ToArray(); + } + } + + /// + /// Gets the format of this . + /// + public ImageFormat RawFormat + { + get + { + EnsureNotDisposed(); + Attribute guidAttribute = + Attribute.GetCustomAttribute( + typeof(FreeImageBitmap), typeof(System.Runtime.InteropServices.GuidAttribute) + ); + return (guidAttribute == null) ? + null : + new ImageFormat(new Guid(((GuidAttribute)guidAttribute).Value)); + } + } + + /// + /// Gets the width and height, in pixels, of this . + /// + public Size Size + { + get + { + EnsureNotDisposed(); + return new Size(Width, Height); + } + } + + /// + /// Gets or sets an object that provides additional data about the . + /// + public Object Tag + { + get + { + EnsureNotDisposed(); + return tag; + } + set + { + EnsureNotDisposed(); + tag = value; + } + } + + /// + /// Gets whether this has been disposed. + /// + public bool IsDisposed + { + get + { + return disposed; + } + } + + /// + /// Gets a new instance of a metadata representing class. + /// + public ImageMetadata Metadata + { + get + { + EnsureNotDisposed(); + return new ImageMetadata(dib, true); + } + } + + /// + /// Gets or sets the comment of this . + /// Supported formats are JPEG, PNG and GIF. + /// + public string Comment + { + get + { + EnsureNotDisposed(); + return FreeImage.GetImageComment(dib); + } + set + { + EnsureNotDisposed(); + FreeImage.SetImageComment(dib, value); + } + } + + /// + /// Returns whether this has a palette. + /// + public bool HasPalette + { + get + { + EnsureNotDisposed(); + return (FreeImage.GetPalette(dib) != IntPtr.Zero); + } + } + + /// + /// Gets or sets the entry used as transparent color in this . + /// Only works for 1-, 4- and 8-bpp. + /// + public int TransparentIndex + { + get + { + EnsureNotDisposed(); + return FreeImage.GetTransparentIndex(dib); + } + set + { + EnsureNotDisposed(); + FreeImage.SetTransparentIndex(dib, value); + } + } + + /// + /// Gets the number of frames in this . + /// + public int FrameCount + { + get + { + EnsureNotDisposed(); + return frameCount; + } + } + + /// + /// Gets the ICCProfile structure of this . + /// + public FIICCPROFILE ICCProfile + { + get + { + EnsureNotDisposed(); + return FreeImage.GetICCProfileEx(dib); + } + } + + /// + /// Gets the format of the original image in case + /// this was loaded from a file or stream. + /// + public FREE_IMAGE_FORMAT ImageFormat + { + get + { + EnsureNotDisposed(); + return originalFormat; + } + } + + /// + /// Gets the encapsulated FIBITMAP. + /// + internal FIBITMAP Dib + { + get { EnsureNotDisposed(); return dib; } + } + + #endregion + + #region Methods + + /// + /// Gets the bounds of this in the specified unit. + /// + /// One of the values indicating + /// the unit of measure for the bounding rectangle. + /// The that represents the bounds of this + /// , in the specified unit. + public RectangleF GetBounds(ref GraphicsUnit pageUnit) + { + EnsureNotDisposed(); + pageUnit = GraphicsUnit.Pixel; + return new RectangleF( + 0f, + 0f, + (float)FreeImage.GetWidth(dib), + (float)FreeImage.GetHeight(dib)); + } + + /// + /// Gets the specified property item from this . + /// + /// The ID of the property item to get. + /// The this method gets. + public PropertyItem GetPropertyItem(int propid) + { + EnsureNotDisposed(); + ImageMetadata metadata = new ImageMetadata(dib, true); + foreach (MetadataModel metadataModel in metadata) + { + foreach (MetadataTag tag in metadataModel) + { + if (tag.ID == propid) + { + return tag.GetPropertyItem(); + } + } + } + return null; + } + + /// + /// Returns a thumbnail for this . + /// + /// The width, in pixels, of the requested thumbnail image. + /// The height, in pixels, of the requested thumbnail image. + /// Ignored. + /// Ignored. + /// A that represents the thumbnail. + public FreeImageBitmap GetThumbnailImage(int thumbWidth, int thumbHeight, + Image.GetThumbnailImageAbort callback, IntPtr callBackData) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.Rescale( + dib, thumbWidth, thumbHeight, FREE_IMAGE_FILTER.FILTER_BICUBIC); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Returns a thumbnail for this , keeping aspect ratio. + /// defines the maximum width or height + /// of the thumbnail. + /// + /// Thumbnail square size. + /// When true HDR images are transperantly + /// converted to standard images. + /// The thumbnail in a new instance. + public FreeImageBitmap GetThumbnailImage(int maxPixelSize, bool convert) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.MakeThumbnail(dib, maxPixelSize, convert); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Converts this instance to a instance. + /// + /// A new instance of initialized this instance. + public Bitmap ToBitmap() + { + EnsureNotDisposed(); + return FreeImage.GetBitmap(dib, true); + } + + /// + /// Returns an instance of , representing the scanline + /// specified by of this . + /// Since FreeImage bitmaps are always bottum up aligned, keep in mind that scanline 0 is the + /// bottom-most line of the image. + /// + /// Number of the scanline to retrieve. + /// An instance of representing the + /// th scanline. + /// + /// List of return-types of T: + /// + /// Color Depth / TypeResult Type + /// 1 () + /// 4 () + /// 8 () + /// 16 () + /// 16 - 555 () + /// 16 - 565 () + /// 24 () + /// 32 () + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// FreeImageBitmap bitmap = new FreeImageBitmap(@"C:\Pictures\picture.bmp"); + /// if (bitmap.ColorDepth == 32) + /// { + /// Scanline<RGBQUAD> scanline = bitmap.GetScanline<RGBQUAD>(0); + /// foreach (RGBQUAD pixel in scanline) + /// { + /// Console.WriteLine(pixel); + /// } + /// } + /// + /// + /// + /// The bitmap's type or color depth are not supported. + /// + /// + /// is no valid value. + /// + public Scanline GetScanline(int scanline) where T : struct + { + EnsureNotDisposed(); + return new Scanline(dib, scanline); + } + + /// + /// Returns an instance of , representing the scanline + /// specified by of this . + /// Since FreeImage bitmaps are always bottum up aligned, keep in mind that scanline 0 is the + /// bottom-most line of the image. + /// + /// Number of the scanline to retrieve. + /// An instance of representing the + /// th scanline. + /// + /// List of return-types of T: + /// + /// Color Depth / TypeResult Type + /// 1 () + /// 4 () + /// 8 () + /// 16 () + /// 16 - 555 () + /// 16 - 565 () + /// 24 () + /// 32 () + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// FreeImageBitmap bitmap = new FreeImageBitmap(@"C:\Pictures\picture.bmp"); + /// if (bitmap.ColorDepth == 32) + /// { + /// Scanline<RGBQUAD> scanline = (Scanline<RGBQUAD>)bitmap.GetScanline(0); + /// foreach (RGBQUAD pixel in scanline) + /// { + /// Console.WriteLine(pixel); + /// } + /// } + /// + /// + /// + /// The type of the bitmap or color depth are not supported. + /// + /// + /// is no valid value. + /// + public object GetScanline(int scanline) + { + EnsureNotDisposed(); + object result = null; + int width = (int)FreeImage.GetWidth(dib); + + switch (FreeImage.GetImageType(dib)) + { + case FREE_IMAGE_TYPE.FIT_BITMAP: + + switch (FreeImage.GetBPP(dib)) + { + case 1u: result = new Scanline(dib, scanline, width); break; + case 4u: result = new Scanline(dib, scanline, width); break; + case 8u: result = new Scanline(dib, scanline, width); break; + case 16u: + if ((RedMask == FreeImage.FI16_555_RED_MASK) && + (GreenMask == FreeImage.FI16_555_GREEN_MASK) && + (BlueMask == FreeImage.FI16_555_BLUE_MASK)) + { + result = new Scanline(dib, scanline, width); + } + else if ((RedMask == FreeImage.FI16_565_RED_MASK) && + (GreenMask == FreeImage.FI16_565_GREEN_MASK) && + (BlueMask == FreeImage.FI16_565_BLUE_MASK)) + { + result = new Scanline(dib, scanline, width); + } + else + { + result = new Scanline(dib, scanline, width); + } + break; + case 24u: result = new Scanline(dib, scanline, width); break; + case 32u: result = new Scanline(dib, scanline, width); break; + default: throw new ArgumentException("Color depth is not supported."); + } + break; + + case FREE_IMAGE_TYPE.FIT_COMPLEX: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_DOUBLE: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_FLOAT: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_INT16: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_INT32: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_RGB16: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_RGBA16: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_RGBAF: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_RGBF: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_UINT16: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_UINT32: result = new Scanline(dib, scanline, width); break; + case FREE_IMAGE_TYPE.FIT_UNKNOWN: + default: throw new ArgumentException("Type is not supported."); + } + + return result; + } + + /// + /// Returns a pointer to the specified scanline. + /// Due to FreeImage bitmaps are bottum up, + /// scanline 0 is the most bottom line of the image. + /// + /// Number of the scanline. + /// Pointer to the scanline. + public IntPtr GetScanlinePointer(int scanline) + { + EnsureNotDisposed(); + return FreeImage.GetScanLine(dib, scanline); + } + + /// + /// Returns a list of structures, representing the scanlines of this . + /// Due to FreeImage bitmaps are bottum up, scanline 0 is the + /// bottom-most line of the image. + /// Each color depth has a different representing structure due to different memory layouts. + /// + /// + /// List of return-types of T: + /// + /// Color Depth / TypeResult Type of IEnmuerable<Scanline<T>> + /// 1 () + /// 4 () + /// 8 () + /// 16 () + /// 16 - 555 () + /// 16 - 565 () + /// 24 () + /// 32 () + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public IList GetScanlines() + { + EnsureNotDisposed(); + + int height = (int)FreeImage.GetHeight(dib); + IList list; + + switch (FreeImage.GetImageType(dib)) + { + case FREE_IMAGE_TYPE.FIT_BITMAP: + + switch (FreeImage.GetBPP(dib)) + { + case 1u: list = new List>(height); break; + case 4u: list = new List>(height); break; + case 8u: list = new List>(height); break; + case 16u: + if (FreeImage.IsRGB555(dib)) + { + list = new List>(height); + } + else if (FreeImage.IsRGB565(dib)) + { + list = new List>(height); + } + else + { + list = new List>(height); + } + break; + case 24u: list = new List>(height); break; + case 32u: list = new List>(height); break; + default: throw new ArgumentException("Color depth is not supported."); + } + break; + + case FREE_IMAGE_TYPE.FIT_COMPLEX: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_DOUBLE: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_FLOAT: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_INT16: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_INT32: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_RGB16: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_RGBA16: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_RGBAF: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_RGBF: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_UINT16: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_UINT32: list = new List>(height); break; + case FREE_IMAGE_TYPE.FIT_UNKNOWN: + default: throw new ArgumentException("Type is not supported."); + } + + for (int i = 0; i < height; i++) + { + list.Add(GetScanline(i)); + } + + return list; + } + + /// + /// Removes the specified property item from this . + /// + /// The ID of the property item to remove. + public void RemovePropertyItem(int propid) + { + EnsureNotDisposed(); + ImageMetadata mdata = new ImageMetadata(dib, true); + foreach (MetadataModel model in mdata) + { + foreach (MetadataTag tag in model) + { + if (tag.ID == propid) + { + model.RemoveTag(tag.Key); + return; + } + } + } + } + + /// + /// This method rotates, flips, or rotates and flips this . + /// + /// A RotateFlipType member + /// that specifies the type of rotation and flip to apply to this . + public void RotateFlip(RotateFlipType rotateFlipType) + { + EnsureNotDisposed(); + + FIBITMAP newDib = new FIBITMAP(); + uint bpp = FreeImage.GetBPP(dib); + + switch (rotateFlipType) + { + case RotateFlipType.RotateNoneFlipX: + + FreeImage.FlipHorizontal(dib); + break; + + case RotateFlipType.RotateNoneFlipY: + + FreeImage.FlipVertical(dib); + break; + + case RotateFlipType.RotateNoneFlipXY: + + FreeImage.FlipHorizontal(dib); + FreeImage.FlipVertical(dib); + break; + + case RotateFlipType.Rotate90FlipNone: + + newDib = (bpp == 4u) ? FreeImage.Rotate4bit(dib, 90d) : FreeImage.Rotate(dib, 90d); + break; + + case RotateFlipType.Rotate90FlipX: + + newDib = (bpp == 4u) ? FreeImage.Rotate4bit(dib, 90d) : FreeImage.Rotate(dib, 90d); + FreeImage.FlipHorizontal(newDib); + break; + + case RotateFlipType.Rotate90FlipY: + + newDib = (bpp == 4u) ? FreeImage.Rotate4bit(dib, 90d) : FreeImage.Rotate(dib, 90d); + FreeImage.FlipVertical(newDib); + break; + + case RotateFlipType.Rotate90FlipXY: + + newDib = (bpp == 4u) ? FreeImage.Rotate4bit(dib, 90d) : FreeImage.Rotate(dib, 90d); + FreeImage.FlipHorizontal(newDib); + FreeImage.FlipVertical(newDib); + break; + + case RotateFlipType.Rotate180FlipXY: + newDib = FreeImage.Clone(dib); + break; + } + ReplaceDib(newDib); + } + + /// + /// Copies the metadata from another . + /// + /// The bitmap to read the metadata from. + /// + /// is a null reference. + /// + public void CloneMetadataFrom(FreeImageBitmap bitmap) + { + if (bitmap == null) + { + throw new ArgumentNullException("bitmap"); + } + EnsureNotDisposed(); + bitmap.EnsureNotDisposed(); + FreeImage.CloneMetadata(dib, bitmap.dib); + } + + /// + /// Copies the metadata from another using + /// the provided options. + /// + /// The bitmap to read the metadata from. + /// Specifies the way the metadata is copied. + /// + /// is a null reference. + /// + public void CloneMetadataFrom(FreeImageBitmap bitmap, FREE_IMAGE_METADATA_COPY flags) + { + if (bitmap == null) + { + throw new ArgumentNullException("bitmap"); + } + EnsureNotDisposed(); + bitmap.EnsureNotDisposed(); + FreeImage.CloneMetadataEx(bitmap.dib, dib, flags); + } + + /// + /// Saves this to the specified file. + /// + /// A string that contains the name of the file to which + /// to save this . + /// is null or empty. + /// Saving the image failed. + public void Save(string filename) + { + Save(filename, FREE_IMAGE_FORMAT.FIF_UNKNOWN, FREE_IMAGE_SAVE_FLAGS.DEFAULT); + } + + /// + /// Saves this to the specified file in the specified format. + /// + /// A string that contains the name of the file to which + /// to save this . + /// An that specifies the format of the saved image. + /// is null or empty. + /// Saving the image failed. + public void Save(string filename, FREE_IMAGE_FORMAT format) + { + Save(filename, format, FREE_IMAGE_SAVE_FLAGS.DEFAULT); + } + + /// + /// Saves this to the specified file in the specified format + /// using the specified saving flags. + /// + /// A string that contains the name of the file to which + /// to save this . + /// An that specifies the format of the saved image. + /// Flags to enable or disable plugin-features. + /// is null or empty. + /// Saving the image failed. + public void Save(string filename, FREE_IMAGE_FORMAT format, FREE_IMAGE_SAVE_FLAGS flags) + { + EnsureNotDisposed(); + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentException("filename"); + } + if (!FreeImage.SaveEx(dib, filename, format, flags)) + { + throw new Exception("Unable to save bitmap"); + } + + saveInformation.filename = filename; + saveInformation.format = format; + saveInformation.saveFlags = flags; + } + + /// + /// Saves this to the specified stream in the specified format. + /// + /// The stream where this will be saved. + /// An that specifies the format of the saved image. + /// is a null reference. + /// Saving the image failed. + public void Save(Stream stream, FREE_IMAGE_FORMAT format) + { + Save(stream, format, FREE_IMAGE_SAVE_FLAGS.DEFAULT); + } + + /// + /// Saves this to the specified stream in the specified format + /// using the specified saving flags. + /// + /// The stream where this will be saved. + /// An that specifies the format of the saved image. + /// Flags to enable or disable plugin-features. + /// is a null reference. + /// Saving the image failed. + public void Save(Stream stream, FREE_IMAGE_FORMAT format, FREE_IMAGE_SAVE_FLAGS flags) + { + EnsureNotDisposed(); + if (stream == null) + { + throw new ArgumentNullException("stream"); + } + if (!FreeImage.SaveToStream(dib, stream, format, flags)) + { + throw new Exception("Unable to save bitmap"); + } + + saveInformation.filename = null; + } + + /// + /// Adds a frame to the file specified in a previous call to the + /// method. + /// + /// + /// This instance has not been saved to a file using Save(...) before. + public void SaveAdd() + { + SaveAdd(this); + } + + /// + /// Adds a frame to the file specified in a previous call to the method. + /// + /// The position at which the frame should be inserted. + /// + /// This instance has not yet been saved to a file using the Save(...) method. + /// is out of range. + public void SaveAdd(int insertPosition) + { + SaveAdd(this, insertPosition); + } + + /// + /// Adds a frame to the file specified in a previous call to the method. + /// + /// A that contains the frame to add. + /// + /// This instance has not yet been saved to a file using the Save(...) method. + public void SaveAdd(FreeImageBitmap bitmap) + { + if (saveInformation.filename == null) + { + throw new InvalidOperationException("This operation requires a previous call of Save()."); + } + + SaveAdd( + saveInformation.filename, + bitmap, + saveInformation.format, + saveInformation.loadFlags, + saveInformation.saveFlags); + } + + /// + /// Adds a frame to the file specified in a previous call to the method. + /// + /// A that contains the frame to add. + /// The position at which the frame should be inserted. + /// + /// This instance has not yet been saved to a file using the Save(...) method. + /// is out of range. + public void SaveAdd(FreeImageBitmap bitmap, int insertPosition) + { + if (saveInformation.filename == null) + { + throw new InvalidOperationException("This operation requires a previous call of Save()."); + } + + SaveAdd( + saveInformation.filename, + bitmap, + insertPosition, + saveInformation.format, + saveInformation.loadFlags, + saveInformation.saveFlags); + } + + /// + /// Adds a frame to the file specified. + /// + /// File to add this frame to. + /// is a null reference. + /// does not exist. + /// Saving the image has failed. + public void SaveAdd(string filename) + { + SaveAdd( + filename, + this, + FREE_IMAGE_FORMAT.FIF_UNKNOWN, + FREE_IMAGE_LOAD_FLAGS.DEFAULT, + FREE_IMAGE_SAVE_FLAGS.DEFAULT); + } + + /// + /// Adds a frame to the file specified. + /// + /// File to add this frame to. + /// The position at which the frame should be inserted. + /// is a null reference. + /// does not exist. + /// Saving the image has failed. + /// is out of range. + public void SaveAdd(string filename, int insertPosition) + { + SaveAdd( + filename, + this, + insertPosition, + FREE_IMAGE_FORMAT.FIF_UNKNOWN, + FREE_IMAGE_LOAD_FLAGS.DEFAULT, + FREE_IMAGE_SAVE_FLAGS.DEFAULT); + } + + /// + /// Adds a frame to the file specified using the specified parameters. + /// + /// File to add this frame to. + /// Format of the image. + /// Flags to enable or disable plugin-features. + /// Flags to enable or disable plugin-features. + /// is a null reference. + /// does not exist. + /// Saving the image has failed. + public void SaveAdd( + string filename, + FREE_IMAGE_FORMAT format, + FREE_IMAGE_LOAD_FLAGS loadFlags, + FREE_IMAGE_SAVE_FLAGS saveFlags) + { + SaveAdd( + filename, + this, + format, + loadFlags, + saveFlags); + } + + /// + /// Adds a frame to the file specified using the specified parameters. + /// + /// File to add this frame to. + /// The position at which the frame should be inserted. + /// Format of the image. + /// Flags to enable or disable plugin-features. + /// Flags to enable or disable plugin-features. + /// is a null reference. + /// does not exist. + /// Saving the image has failed. + /// is out of range. + public void SaveAdd( + string filename, + int insertPosition, + FREE_IMAGE_FORMAT format, + FREE_IMAGE_LOAD_FLAGS loadFlags, + FREE_IMAGE_SAVE_FLAGS saveFlags) + { + SaveAdd( + filename, + this, + insertPosition, + format, + loadFlags, + saveFlags); + } + + /// + /// Selects the frame specified by the index. + /// + /// The index of the active frame. + /// + /// is out of range. + /// The operation failed. + /// The source of the bitmap is not available. + /// + public void SelectActiveFrame(int frameIndex) + { + EnsureNotDisposed(); + if ((frameIndex < 0) || (frameIndex >= frameCount)) + { + throw new ArgumentOutOfRangeException("frameIndex"); + } + + if (frameIndex != this.frameIndex) + { + if (stream == null) + { + throw new InvalidOperationException("No source available."); + } + + FREE_IMAGE_FORMAT format = originalFormat; + FIMULTIBITMAP mdib = FreeImage.OpenMultiBitmapFromStream(stream, ref format, saveInformation.loadFlags); + if (mdib.IsNull) + throw new Exception(ErrorLoadingBitmap); + + try + { + if (frameIndex >= FreeImage.GetPageCount(mdib)) + { + throw new ArgumentOutOfRangeException("frameIndex"); + } + + FIBITMAP newDib = FreeImage.LockPage(mdib, frameIndex); + if (newDib.IsNull) + { + throw new Exception(ErrorLoadingFrame); + } + + try + { + FIBITMAP clone = FreeImage.Clone(newDib); + if (clone.IsNull) + { + throw new Exception(ErrorCreatingBitmap); + } + ReplaceDib(clone); + } + finally + { + if (!newDib.IsNull) + { + FreeImage.UnlockPage(mdib, newDib, false); + } + } + } + finally + { + if (!FreeImage.CloseMultiBitmapEx(ref mdib)) + { + throw new Exception(ErrorUnloadBitmap); + } + } + + this.frameIndex = frameIndex; + } + } + + /// + /// Creates a GDI bitmap object from this . + /// + /// A handle to the GDI bitmap object that this method creates. + public IntPtr GetHbitmap() + { + EnsureNotDisposed(); + return FreeImage.GetHbitmap(dib, IntPtr.Zero, false); + } + + /// + /// Creates a GDI bitmap object from this . + /// + /// A structure that specifies the background color. + /// This parameter is ignored if the bitmap is totally opaque. + /// A handle to the GDI bitmap object that this method creates. + public IntPtr GetHbitmap(Color background) + { + EnsureNotDisposed(); + using (FreeImageBitmap temp = new FreeImageBitmap(this)) + { + temp.BackgroundColor = background; + return temp.GetHbitmap(); + } + } + + /// + /// Returns the handle to an icon. + /// + /// A Windows handle to an icon with the same image as this . + public IntPtr GetHicon() + { + EnsureNotDisposed(); + using (Bitmap bitmap = FreeImage.GetBitmap(dib, true)) + { + return bitmap.GetHicon(); + } + } + + /// + /// Creates a GDI bitmap object from this with the same + /// color depth as the primary device. + /// + /// A handle to the GDI bitmap object that this method creates. + public IntPtr GetHbitmapForDevice() + { + EnsureNotDisposed(); + return FreeImage.GetBitmapForDevice(dib, IntPtr.Zero, false); + } + + /// + /// Gets the of the specified pixel in this . + /// + /// The x-coordinate of the pixel to retrieve. + /// The y-coordinate of the pixel to retrieve. + /// A structure that represents the color of the specified pixel. + /// The operation failed. + /// The type of this bitmap is not supported. + public unsafe Color GetPixel(int x, int y) + { + EnsureNotDisposed(); + if (FreeImage.GetImageType(dib) == FREE_IMAGE_TYPE.FIT_BITMAP) + { + if (ColorDepth == 16 || ColorDepth == 24 || ColorDepth == 32) + { + RGBQUAD rgbq; + if (!FreeImage.GetPixelColor(dib, (uint)x, (uint)y, out rgbq)) + { + throw new Exception("FreeImage.GetPixelColor() failed"); + } + return rgbq.Color; + } + else if (ColorDepth == 1 || ColorDepth == 4 || ColorDepth == 8) + { + byte index; + if (!FreeImage.GetPixelIndex(dib, (uint)x, (uint)y, out index)) + { + throw new Exception("FreeImage.GetPixelIndex() failed"); + } + RGBQUAD* palette = (RGBQUAD*)FreeImage.GetPalette(dib); + return palette[index].Color; + } + } + throw new NotSupportedException("The type of the image is not supported"); + } + + /// + /// Makes the default transparent color transparent for this . + /// + public void MakeTransparent() + { + EnsureNotDisposed(); + MakeTransparent(Color.Transparent); + } + + /// + /// Makes the specified color transparent for this . + /// + /// The structure that represents + /// the color to make transparent. + /// + /// This method is not implemented. + public void MakeTransparent(Color transparentColor) + { + EnsureNotDisposed(); + throw new System.NotImplementedException(); + } + + /// + /// Sets the of the specified pixel in this . + /// + /// The x-coordinate of the pixel to set. + /// The y-coordinate of the pixel to set. + /// A structure that represents the color + /// to assign to the specified pixel. + /// The operation failed. + /// The type of this bitmap is not supported. + public unsafe void SetPixel(int x, int y, Color color) + { + EnsureNotDisposed(); + if (FreeImage.GetImageType(dib) == FREE_IMAGE_TYPE.FIT_BITMAP) + { + if (ColorDepth == 16 || ColorDepth == 24 || ColorDepth == 32) + { + RGBQUAD rgbq = color; + if (!FreeImage.SetPixelColor(dib, (uint)x, (uint)y, ref rgbq)) + { + throw new Exception("FreeImage.SetPixelColor() failed"); + } + return; + } + else if (ColorDepth == 1 || ColorDepth == 4 || ColorDepth == 8) + { + uint colorsUsed = FreeImage.GetColorsUsed(dib); + RGBQUAD* palette = (RGBQUAD*)FreeImage.GetPalette(dib); + for (int i = 0; i < colorsUsed; i++) + { + if (palette[i].Color == color) + { + byte index = (byte)i; + if (!FreeImage.SetPixelIndex(dib, (uint)x, (uint)y, ref index)) + { + throw new Exception("FreeImage.SetPixelIndex() failed"); + } + return; + } + } + throw new ArgumentOutOfRangeException("color"); + } + } + throw new NotSupportedException("The type of the image is not supported"); + } + + /// + /// Sets the resolution for this . + /// + /// The horizontal resolution, in dots per inch, of this . + /// The vertical resolution, in dots per inch, of this . + public void SetResolution(float xDpi, float yDpi) + { + EnsureNotDisposed(); + FreeImage.SetResolutionX(dib, (uint)xDpi); + FreeImage.SetResolutionY(dib, (uint)yDpi); + } + + /// + /// This function is not yet implemented. + /// + /// + /// This method is not implemented. + public BitmapData LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format) + { + throw new NotImplementedException(); + } + + /// + /// This function is not yet implemented. + /// + /// + /// This method is not implemented. + public BitmapData LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData) + { + throw new NotImplementedException(); + } + + /// + /// This function is not yet implemented. + /// + /// + /// This method is not implemented. + public void UnlockBits(BitmapData bitmapdata) + { + throw new NotImplementedException(); + } + + /// + /// Converts this into a different color depth. + /// The parameter specifies color depth, greyscale conversion + /// and palette reorder. + /// Adding the flag + /// will first perform a convesion to greyscale. This can be done with any target + /// color depth. + /// Adding the flag + /// will allow the algorithm to reorder the palette. This operation will not be performed to + /// non-greyscale images to prevent data loss by mistake. + /// + /// A bitfield containing information about the conversion + /// to perform. + /// Returns true on success, false on failure. + public bool ConvertColorDepth(FREE_IMAGE_COLOR_DEPTH bpp) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.ConvertColorDepth(dib, bpp, false)); + } + + /// + /// Converts this to + /// initializing a new instance. + /// In case source and destination type are the same, the operation fails. + /// An error message can be catched using the 'Message' event. + /// + /// Destination type. + /// True to scale linear, else false. + /// Returns true on success, false on failure. + public bool ConvertType(FREE_IMAGE_TYPE type, bool scaleLinear) + { + EnsureNotDisposed(); + return (ImageType == type) ? false : ReplaceDib(FreeImage.ConvertToType(dib, type, scaleLinear)); + } + + /// + /// Converts this to . + /// In case source and destination type are the same, the operation fails. + /// An error message can be catched using the 'Message' event. + /// + /// Destination type. + /// True to scale linear, else false. + /// The converted instance. + public FreeImageBitmap GetTypeConvertedInstance(FREE_IMAGE_TYPE type, bool scaleLinear) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + if (ImageType != type) + { + FIBITMAP newDib = FreeImage.ConvertToType(dib, type, scaleLinear); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + } + return result; + } + + /// + /// Converts this into a different color depth initializing + /// a new instance. + /// The parameter specifies color depth, greyscale conversion + /// and palette reorder. + /// Adding the flag will + /// first perform a convesion to greyscale. This can be done with any target color depth. + /// Adding the flag will + /// allow the algorithm to reorder the palette. This operation will not be performed to + /// non-greyscale images to prevent data loss by mistake. + /// + /// A bitfield containing information about the conversion + /// to perform. + /// The converted instance. + public FreeImageBitmap GetColorConvertedInstance(FREE_IMAGE_COLOR_DEPTH bpp) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.ConvertColorDepth(dib, bpp, false); + if (newDib == dib) + { + newDib = FreeImage.Clone(dib); + } + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Rescales this to the specified size using the + /// specified filter. + /// + /// The Size structure that represent the + /// size of the new . + /// Filter to use for resizing. + /// Returns true on success, false on failure. + public bool Rescale(Size newSize, FREE_IMAGE_FILTER filter) + { + return Rescale(newSize.Width, newSize.Height, filter); + } + + /// + /// Rescales this to the specified size using the + /// specified filter. + /// + /// Width of the new . + /// Height of the new . + /// Filter to use for resizing. + /// Returns true on success, false on failure. + public bool Rescale(int width, int height, FREE_IMAGE_FILTER filter) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.Rescale(dib, width, height, filter)); + } + + /// + /// Rescales this to the specified size using the + /// specified filter initializing a new instance. + /// + /// The Size structure that represent the + /// size of the new . + /// Filter to use for resizing. + /// The rescaled instance. + public FreeImageBitmap GetScaledInstance(Size newSize, FREE_IMAGE_FILTER filter) + { + return GetScaledInstance(newSize.Width, newSize.Height, filter); + } + + /// + /// Rescales this to the specified size using the + /// specified filter initializing a new instance. + /// + /// Width of the new . + /// Height of the new . + /// Filter to use for resizing. + /// The rescaled instance. + public FreeImageBitmap GetScaledInstance(int width, int height, FREE_IMAGE_FILTER filter) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.Rescale(dib, width, height, filter); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Enlarges or shrinks this selectively per side and fills + /// newly added areas with the specified background color. + /// See for further details. + /// + /// The type of the specified color. + /// The number of pixels, the image should be enlarged on its left side. + /// Negative values shrink the image on its left side. + /// The number of pixels, the image should be enlarged on its top side. + /// Negative values shrink the image on its top side. + /// The number of pixels, the image should be enlarged on its right side. + /// Negative values shrink the image on its right side. + /// The number of pixels, the image should be enlarged on its bottom side. + /// Negative values shrink the image on its bottom side. + /// The color, the enlarged sides of the image should be filled with. + /// true on success, false on failure. + public bool EnlargeCanvas(int left, int top, int right, int bottom, T? color) where T : struct + { + return EnlargeCanvas(left, top, right, bottom, color, FREE_IMAGE_COLOR_OPTIONS.FICO_DEFAULT); + } + + /// + /// Enlarges or shrinks this selectively per side and fills + /// newly added areas with the specified background color. + /// See for further details. + /// + /// The type of the specified color. + /// The number of pixels, the image should be enlarged on its left side. + /// Negative values shrink the image on its left side. + /// The number of pixels, the image should be enlarged on its top side. + /// Negative values shrink the image on its top side. + /// The number of pixels, the image should be enlarged on its right side. + /// Negative values shrink the image on its right side. + /// The number of pixels, the image should be enlarged on its bottom side. + /// Negative values shrink the image on its bottom side. + /// The color, the enlarged sides of the image should be filled with. + /// Options that affect the color search process for palletized images. + /// true on success, false on failure. + public bool EnlargeCanvas(int left, int top, int right, int bottom, + T? color, FREE_IMAGE_COLOR_OPTIONS options) where T : struct + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.EnlargeCanvas(dib, left, top, right, bottom, color, options)); + } + + /// + /// Enlarges or shrinks this selectively per side and fills + /// newly added areas with the specified background color returning a new instance. + /// See for further details. + /// + /// The type of the specified color. + /// The number of pixels, the image should be enlarged on its left side. + /// Negative values shrink the image on its left side. + /// The number of pixels, the image should be enlarged on its top side. + /// Negative values shrink the image on its top side. + /// The number of pixels, the image should be enlarged on its right side. + /// Negative values shrink the image on its right side. + /// The number of pixels, the image should be enlarged on its bottom side. + /// Negative values shrink the image on its bottom side. + /// The color, the enlarged sides of the image should be filled with. + /// The enlarged instance. + public FreeImageBitmap GetEnlargedInstance(int left, int top, int right, int bottom, + T? color) where T : struct + { + return GetEnlargedInstance(left, top, right, bottom, color, FREE_IMAGE_COLOR_OPTIONS.FICO_DEFAULT); + } + + /// + /// Enlarges or shrinks this selectively per side and fills + /// newly added areas with the specified background color returning a new instance. + /// See for further details. + /// + /// The type of the specified color. + /// The number of pixels, the image should be enlarged on its left side. + /// Negative values shrink the image on its left side. + /// The number of pixels, the image should be enlarged on its top side. + /// Negative values shrink the image on its top side. + /// The number of pixels, the image should be enlarged on its right side. + /// Negative values shrink the image on its right side. + /// The number of pixels, the image should be enlarged on its bottom side. + /// Negative values shrink the image on its bottom side. + /// The color, the enlarged sides of the image should be filled with. + /// Options that affect the color search process for palletized images. + /// The enlarged instance. + public FreeImageBitmap GetEnlargedInstance(int left, int top, int right, int bottom, + T? color, FREE_IMAGE_COLOR_OPTIONS options) where T : struct + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.EnlargeCanvas(dib, left, top, right, bottom, color, options); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Quantizes this from 24 bit to 8bit creating a new + /// palette with the specified using the specified + /// . + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// Returns true on success, false on failure. + public bool Quantize(FREE_IMAGE_QUANTIZE algorithm, int paletteSize) + { + return Quantize(algorithm, paletteSize, 0, (RGBQUAD[])null); + } + + /// + /// Quantizes this from 24 bit to 8bit creating a new + /// palette with the specified using the specified + /// and the specified + /// palette up to the + /// specified length. + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// The provided palette. + /// Returns true on success, false on failure. + public bool Quantize(FREE_IMAGE_QUANTIZE algorithm, int paletteSize, Palette reservePalette) + { + return Quantize(algorithm, paletteSize, reservePalette.Length, reservePalette.Data); + } + + /// + /// Quantizes this from 24 bit to 8bit creating a new + /// palette with the specified using the specified + /// and the specified + /// palette up to the + /// specified length. + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// Size of the provided palette of ReservePalette. + /// The provided palette. + /// Returns true on success, false on failure. + public bool Quantize(FREE_IMAGE_QUANTIZE algorithm, int paletteSize, int reserveSize, Palette reservePalette) + { + return Quantize(algorithm, paletteSize, reserveSize, reservePalette.Data); + } + + /// + /// Quantizes this from 24 bit to 8bit creating a new + /// palette with the specified using the specified + /// and the specified + /// palette up to the + /// specified length. + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// Size of the provided palette of ReservePalette. + /// The provided palette. + /// Returns true on success, false on failure. + public bool Quantize(FREE_IMAGE_QUANTIZE algorithm, int paletteSize, int reserveSize, RGBQUAD[] reservePalette) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.ColorQuantizeEx(dib, algorithm, paletteSize, reserveSize, reservePalette)); + } + + /// + /// Quantizes this from 24 bit, using the specified + /// initializing a new 8 bit instance with the + /// specified . + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// The quantized instance. + public FreeImageBitmap GetQuantizedInstance(FREE_IMAGE_QUANTIZE algorithm, int paletteSize) + { + return GetQuantizedInstance(algorithm, paletteSize, 0, (RGBQUAD[])null); + } + + /// + /// Quantizes this from 24 bit, using the specified + /// and palette + /// initializing a new 8 bit instance with the specified . + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// The provided palette. + /// The quantized instance. + public FreeImageBitmap GetQuantizedInstance(FREE_IMAGE_QUANTIZE algorithm, int paletteSize, Palette reservePalette) + { + return GetQuantizedInstance(algorithm, paletteSize, reservePalette.Length, reservePalette); + } + + /// + /// Quantizes this from 24 bit, using the specified + /// and up to + /// entries from palette initializing + /// a new 8 bit instance with the specified . + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// Size of the provided palette. + /// The provided palette. + /// The quantized instance. + public FreeImageBitmap GetQuantizedInstance(FREE_IMAGE_QUANTIZE algorithm, int paletteSize, int reserveSize, Palette reservePalette) + { + return GetQuantizedInstance(algorithm, paletteSize, reserveSize, reservePalette.Data); + } + + /// + /// Quantizes this from 24 bit, using the specified + /// and up to + /// entries from palette initializing + /// a new 8 bit instance with the specified . + /// + /// The color reduction algorithm to be used. + /// Size of the desired output palette. + /// Size of the provided palette. + /// The provided palette. + /// The quantized instance. + public FreeImageBitmap GetQuantizedInstance(FREE_IMAGE_QUANTIZE algorithm, int paletteSize, int reserveSize, RGBQUAD[] reservePalette) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.ColorQuantizeEx(dib, algorithm, paletteSize, reserveSize, reservePalette); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Converts a High Dynamic Range image to a 24-bit RGB image using a global + /// operator based on logarithmic compression of luminance values, imitating + /// the human response to light. + /// + /// A gamma correction that is applied after the tone mapping. + /// A value of 1 means no correction. + /// Scale factor allowing to adjust the brightness of the output image. + /// Returns true on success, false on failure. + public bool TmoDrago03(double gamma, double exposure) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.TmoDrago03(dib, gamma, exposure)); + } + + /// + /// Converts a High Dynamic Range image to a 24-bit RGB image using a global operator inspired + /// by photoreceptor physiology of the human visual system. + /// + /// Controls the overall image intensity in the range [-8, 8]. + /// Controls the overall image contrast in the range [0.3, 1.0[. + /// Returns true on success, false on failure. + public bool TmoReinhard05(double intensity, double contrast) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.TmoReinhard05(dib, intensity, contrast)); + } + + /// + /// Apply the Gradient Domain High Dynamic Range Compression to a RGBF image and convert to 24-bit RGB. + /// + /// Color saturation (s parameter in the paper) in [0.4..0.6] + /// Atenuation factor (beta parameter in the paper) in [0.8..0.9] + /// Returns true on success, false on failure. + public bool TmoFattal02(double color_saturation, double attenuation) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.TmoFattal02(dib, color_saturation, attenuation)); + } + + /// + /// This method rotates a 1-, 4-, 8-bit greyscale or a 24-, 32-bit color image by means of 3 shears. + /// For 1- and 4-bit images, rotation is limited to angles whose value is an integer + /// multiple of 90. + /// + /// The angle of rotation. + /// Returns true on success, false on failure. + public bool Rotate(double angle) + { + EnsureNotDisposed(); + bool result = false; + if (ColorDepth == 4) + { + result = ReplaceDib(FreeImage.Rotate4bit(dib, angle)); + } + else + { + result = ReplaceDib(FreeImage.Rotate(dib, angle)); + } + return result; + } + + /// + /// This method rotates a 1-, 4-, 8-bit greyscale or a 24-, 32-bit color image by means of 3 shears. + /// For 1- and 4-bit images, rotation is limited to angles whose value is an integer + /// multiple of 90. + /// + /// The type of the color to use as background. + /// The angle of rotation. + /// The color used used to fill the bitmap's background. + /// Returns true on success, false on failure. + public bool Rotate(double angle, T? backgroundColor) where T : struct + { + EnsureNotDisposed(); + bool result = false; + if (ColorDepth == 4) + { + result = ReplaceDib(FreeImage.Rotate4bit(dib, angle)); + } + else + { + result = ReplaceDib(FreeImage.Rotate(dib, angle, backgroundColor)); + } + return result; + } + + /// + /// Rotates this by the specified angle initializing a new instance. + /// For 1- and 4-bit images, rotation is limited to angles whose value is an integer + /// multiple of 90. + /// + /// The type of the color to use as background. + /// The angle of rotation. + /// The color used used to fill the bitmap's background. + /// The rotated instance. + public FreeImageBitmap GetRotatedInstance(double angle, T? backgroundColor) where T : struct + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib; + if (ColorDepth == 4) + { + newDib = FreeImage.Rotate4bit(dib, angle); + } + else + { + newDib = FreeImage.Rotate(dib, angle, backgroundColor); + } + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Rotates this by the specified angle initializing a new instance. + /// For 1- and 4-bit images, rotation is limited to angles whose value is an integer + /// multiple of 90. + /// + /// The angle of rotation. + /// The rotated instance. + public FreeImageBitmap GetRotatedInstance(double angle) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib; + if (ColorDepth == 4) + { + newDib = FreeImage.Rotate4bit(dib, angle); + } + else + { + newDib = FreeImage.Rotate(dib, angle); + } + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// This method performs a rotation and / or translation of an 8-bit greyscale, + /// 24- or 32-bit image, using a 3rd order (cubic) B-Spline. + /// + /// The angle of rotation. + /// Horizontal image translation. + /// Vertical image translation. + /// Rotation center x-coordinate. + /// Rotation center y-coordinate. + /// When true the irrelevant part of the image is set to a black color, + /// otherwise, a mirroring technique is used to fill irrelevant pixels. + /// Returns true on success, false on failure. + public bool Rotate(double angle, double xShift, double yShift, + double xOrigin, double yOrigin, bool useMask) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.RotateEx(dib, angle, xShift, yShift, xOrigin, yOrigin, useMask)); + } + + /// + /// This method performs a rotation and / or translation of an 8-bit greyscale, + /// 24- or 32-bit image, using a 3rd order (cubic) B-Spline initializing a new instance. + /// + /// The angle of rotation. + /// Horizontal image translation. + /// Vertical image translation. + /// Rotation center x-coordinate. + /// Rotation center y-coordinate. + /// When true the irrelevant part of the image is set to a black color, + /// otherwise, a mirroring technique is used to fill irrelevant pixels. + /// The rotated instance. + public FreeImageBitmap GetRotatedInstance(double angle, double xShift, double yShift, + double xOrigin, double yOrigin, bool useMask) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.RotateEx( + dib, angle, xShift, yShift, xOrigin, yOrigin, useMask); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Perfoms an histogram transformation on a 8-, 24- or 32-bit image. + /// + /// The lookup table (LUT). + /// It's size is assumed to be 256 in length. + /// The color channel to be transformed. + /// Returns true on success, false on failure. + public bool AdjustCurve(byte[] lookUpTable, FREE_IMAGE_COLOR_CHANNEL channel) + { + EnsureNotDisposed(); + return FreeImage.AdjustCurve(dib, lookUpTable, channel); + } + + /// + /// Performs gamma correction on a 8-, 24- or 32-bit image. + /// + /// The parameter represents the gamma value to use (gamma > 0). + /// A value of 1.0 leaves the image alone, less than one darkens it, and greater than one lightens it. + /// Returns true on success, false on failure. + public bool AdjustGamma(double gamma) + { + EnsureNotDisposed(); + return FreeImage.AdjustGamma(dib, gamma); + } + + /// + /// Adjusts the brightness of a 8-, 24- or 32-bit image by a certain amount. + /// + /// A value 0 means no change, + /// less than 0 will make the image darker and greater than 0 will make the image brighter. + /// Returns true on success, false on failure. + public bool AdjustBrightness(double percentage) + { + EnsureNotDisposed(); + return FreeImage.AdjustBrightness(dib, percentage); + } + + /// + /// Adjusts the contrast of a 8-, 24- or 32-bit image by a certain amount. + /// + /// A value 0 means no change, + /// less than 0 will decrease the contrast and greater than 0 will increase the contrast of the image. + /// Returns true on success, false on failure. + public bool AdjustContrast(double percentage) + { + EnsureNotDisposed(); + return FreeImage.AdjustContrast(dib, percentage); + } + + /// + /// Inverts each pixel data. + /// + /// Returns true on success, false on failure. + public bool Invert() + { + EnsureNotDisposed(); + return FreeImage.Invert(dib); + } + + /// + /// Computes the image histogram. + /// + /// Channel to compute from. + /// Array of integers containing the histogram. + /// Returns true on success, false on failure. + public bool GetHistogram(FREE_IMAGE_COLOR_CHANNEL channel, out int[] histogram) + { + EnsureNotDisposed(); + histogram = new int[256]; + return FreeImage.GetHistogram(dib, histogram, channel); + } + + /// + /// Retrieves the red, green, blue or alpha channel of a 24- or 32-bit image. + /// + /// The color channel to extract. + /// The color channel in a new instance. + public FreeImageBitmap GetChannel(FREE_IMAGE_COLOR_CHANNEL channel) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.GetChannel(dib, channel); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Insert a 8-bit dib into a 24- or 32-bit image. + /// Both images must have to same width and height. + /// + /// The to insert. + /// The color channel to replace. + /// Returns true on success, false on failure. + public bool SetChannel(FreeImageBitmap bitmap, FREE_IMAGE_COLOR_CHANNEL channel) + { + EnsureNotDisposed(); + bitmap.EnsureNotDisposed(); + return FreeImage.SetChannel(dib, bitmap.dib, channel); + } + + /// + /// Retrieves the real part, imaginary part, magnitude or phase of a complex image. + /// + /// The color channel to extract. + /// The color channel in a new instance. + public FreeImageBitmap GetComplexChannel(FREE_IMAGE_COLOR_CHANNEL channel) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.GetComplexChannel(dib, channel); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Set the real or imaginary part of a complex image. + /// Both images must have to same width and height. + /// + /// The to insert. + /// The color channel to replace. + /// Returns true on success, false on failure. + public bool SetComplexChannel(FreeImageBitmap bitmap, FREE_IMAGE_COLOR_CHANNEL channel) + { + EnsureNotDisposed(); + bitmap.EnsureNotDisposed(); + return FreeImage.SetComplexChannel(dib, bitmap.dib, channel); + } + + /// + /// Copy a sub part of this . + /// + /// The subpart to copy. + /// The sub part in a new instance. + public FreeImageBitmap Copy(Rectangle rect) + { + EnsureNotDisposed(); + return Copy(rect.Left, rect.Top, rect.Right, rect.Bottom); + } + + /// + /// Copy a sub part of this . + /// + /// Specifies the left position of the cropped rectangle. + /// Specifies the top position of the cropped rectangle. + /// Specifies the right position of the cropped rectangle. + /// Specifies the bottom position of the cropped rectangle. + /// The sub part in a new instance. + public FreeImageBitmap Copy(int left, int top, int right, int bottom) + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.Copy(dib, left, top, right, bottom); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Alpha blend or combine a sub part image with this . + /// The bit depth of must be greater than or equal to the bit depth this instance. + /// + /// The to paste into this instance. + /// Specifies the left position of the sub image. + /// Specifies the top position of the sub image. + /// alpha blend factor. + /// The source and destination images are alpha blended if alpha=0..255. + /// If alpha > 255, then the source image is combined to the destination image. + /// Returns true on success, false on failure. + public bool Paste(FreeImageBitmap bitmap, int left, int top, int alpha) + { + EnsureNotDisposed(); + bitmap.EnsureNotDisposed(); + return FreeImage.Paste(dib, bitmap.dib, left, top, alpha); + } + + /// + /// Alpha blend or combine a sub part image with tthis . + /// The bit depth of must be greater than or equal to the bit depth this instance. + /// + /// The to paste into this instance. + /// Specifies the position of the sub image. + /// alpha blend factor. + /// The source and destination images are alpha blended if alpha=0..255. + /// If alpha > 255, then the source image is combined to the destination image. + /// Returns true on success, false on failure. + public bool Paste(FreeImageBitmap bitmap, Point point, int alpha) + { + EnsureNotDisposed(); + return Paste(bitmap, point.X, point.Y, alpha); + } + + /// + /// This method composite a transparent foreground image against a single background color or + /// against a background image. + /// In case is false and + /// and + /// are null, a checkerboard will be used as background. + /// + /// When true the background of this instance is used + /// if it contains one. + /// Backgroundcolor used in case is false + /// and is not null. + /// Background used in case + /// is false and is a null reference. + /// Returns true on success, false on failure. + public bool Composite(bool useBitmapBackground, Color? applicationBackground, FreeImageBitmap bitmapBackGround) + { + EnsureNotDisposed(); + bitmapBackGround.EnsureNotDisposed(); + RGBQUAD? rgb = applicationBackground; + return ReplaceDib( + FreeImage.Composite( + dib, + useBitmapBackground, + rgb.HasValue ? new RGBQUAD[] { rgb.Value } : null, + bitmapBackGround.dib)); + } + + /// + /// Applies the alpha value of each pixel to its color components. + /// The aplha value stays unchanged. + /// Only works with 32-bits color depth. + /// + /// Returns true on success, false on failure. + public bool PreMultiplyWithAlpha() + { + EnsureNotDisposed(); + return FreeImage.PreMultiplyWithAlpha(dib); + } + + /// + /// Solves a Poisson equation, remap result pixels to [0..1] and returns the solution. + /// + /// Number of cycles in the multigrid algorithm (usually 2 or 3) + /// Returns true on success, false on failure. + public bool MultigridPoissonSolver(int ncycle) + { + EnsureNotDisposed(); + return ReplaceDib(FreeImage.MultigridPoissonSolver(dib, ncycle)); + } + + /// + /// Adjusts an image's brightness, contrast and gamma as well as it may + /// optionally invert the image within a single operation. + /// + /// Percentage brightness value where -100 <= brightness <= 100. + /// A value of 0 means no change, less than 0 will make the image darker and greater + /// than 0 will make the image brighter. + /// Percentage contrast value where -100 <= contrast <= 100. + /// A value of 0 means no change, less than 0 will decrease the contrast + /// and greater than 0 will increase the contrast of the image. + /// Gamma value to be used for gamma correction. + /// A value of 1.0 leaves the image alone, less than one darkens it, + /// and greater than one lightens it. + /// This parameter must not be zero or smaller than zero. + /// If so, it will be ignored and no gamma correction will be performed on the image. + /// If set to true, the image will be inverted. + /// Returns true on success, false on failure. + public bool AdjustColors(double brightness, double contrast, double gamma, bool invert) + { + EnsureNotDisposed(); + return FreeImage.AdjustColors(dib, brightness, contrast, gamma, invert); + } + + /// + /// Applies color mapping for one or several colors on a 1-, 4- or 8-bit + /// palletized or a 16-, 24- or 32-bit high color image. + /// + /// Array of colors to be used as the mapping source. + /// Array of colors to be used as the mapping destination. + /// If true, 32-bit images and colors are treated as 24-bit. + /// If true, source and destination colors are swapped, that is, + /// each destination color is also mapped to the corresponding source color. + /// The total number of pixels changed. + /// + /// or is a null reference. + /// + /// + /// has a different length than . + /// + public uint ApplyColorMapping(RGBQUAD[] srccolors, RGBQUAD[] dstcolors, bool ignore_alpha, bool swap) + { + EnsureNotDisposed(); + if (srccolors == null) + { + throw new ArgumentNullException("srccolors"); + } + if (dstcolors == null) + { + throw new ArgumentNullException("dstcolors"); + } + if (srccolors.Length != dstcolors.Length) + { + throw new ArgumentException("srccolors and dstcolors must have the same length."); + } + return FreeImage.ApplyColorMapping(dib, srccolors, dstcolors, (uint)srccolors.Length, ignore_alpha, swap); + } + + /// + /// Swaps two specified colors on a 1-, 4- or 8-bit palletized + /// or a 16-, 24- or 32-bit high color image. + /// + /// One of the two colors to be swapped. + /// The other of the two colors to be swapped. + /// If true, 32-bit images and colors are treated as 24-bit. + /// The total number of pixels changed. + public uint SwapColors(RGBQUAD color_a, RGBQUAD color_b, bool ignore_alpha) + { + EnsureNotDisposed(); + return FreeImage.SwapColors(dib, ref color_a, ref color_b, ignore_alpha); + } + + /// + /// Applies palette index mapping for one or several indices + /// on a 1-, 4- or 8-bit palletized image. + /// + /// Array of palette indices to be used as the mapping source. + /// Array of palette indices to be used as the mapping destination. + /// The number of palette indices to be mapped. This is the size of both + /// srcindices and dstindices + /// If true, source and destination palette indices are swapped, that is, + /// each destination index is also mapped to the corresponding source index. + /// The total number of pixels changed. + /// + /// or is a null reference. + /// + /// + /// has a different length than . + /// + public uint ApplyPaletteIndexMapping(byte[] srcindices, byte[] dstindices, uint count, bool swap) + { + EnsureNotDisposed(); + if (srcindices == null) + { + throw new ArgumentNullException("srcindices"); + } + if (dstindices == null) + { + throw new ArgumentNullException("dstindices"); + } + if (srcindices.Length != dstindices.Length) + { + throw new ArgumentException("srcindices and dstindices must have the same length."); + } + return FreeImage.ApplyPaletteIndexMapping(dib, srcindices, dstindices, (uint)srcindices.Length, swap); + } + + /// + /// Swaps two specified palette indices on a 1-, 4- or 8-bit palletized image. + /// + /// One of the two palette indices to be swapped. + /// The other of the two palette indices to be swapped. + /// The total number of pixels changed. + public uint SwapPaletteIndices(byte index_a, byte index_b) + { + EnsureNotDisposed(); + return FreeImage.SwapPaletteIndices(dib, ref index_a, ref index_b); + } + + /// + /// Sets all pixels of this to the specified color. + /// See for further details. + /// + /// The type of the specified color. + /// The color to fill this with. + /// true on success, false on failure. + public bool FillBackground(T color) where T : struct + { + return FillBackground(color, FREE_IMAGE_COLOR_OPTIONS.FICO_DEFAULT); + } + + /// + /// Sets all pixels of this to the specified color. + /// See for further details. + /// + /// The type of the specified color. + /// The color to fill this with. + /// Options that affect the color search process for palletized images. + /// true on success, false on failure. + public bool FillBackground(T color, FREE_IMAGE_COLOR_OPTIONS options) where T : struct + { + EnsureNotDisposed(); + return FreeImage.FillBackground(dib, color, options); + } + + /// + /// Creates a new ICC-Profile. + /// + /// The data of the new ICC-Profile. + /// The new ICC-Profile of the bitmap. + /// is a null reference. + public FIICCPROFILE CreateICCProfile(byte[] data) + { + if (data == null) + { + throw new ArgumentNullException("data"); + } + return CreateICCProfile(data, data.Length); + } + + /// + /// Creates a new ICC-Profile. + /// + /// The data of the new ICC-Profile. + /// The number of bytes of to use. + /// The new ICC-Profile of the bitmap. + /// is null. + public FIICCPROFILE CreateICCProfile(byte[] data, int size) + { + EnsureNotDisposed(); + if (data == null) + { + throw new ArgumentNullException("data"); + } + return FreeImage.CreateICCProfileEx(dib, data, size); + } + + /// + /// Determines whether this and the specified instances are the same. + /// + /// The object to test. + /// true if this instance is the same + /// or if both are null references; otherwise, false. + public override bool Equals(object obj) + { + return ReferenceEquals(this, obj); + } + + /// + /// Returns a hash code for this structure. + /// + /// An integer value that specifies the hash code for this . + public override int GetHashCode() + { + return dib.GetHashCode(); + } + + #endregion + + #region Static functions + + /// + /// Returns a value that indicates whether the pixel format for this contains alpha information. + /// + /// The to test. + /// true if pixfmt contains alpha information; otherwise, false. + public static bool IsAlphaPixelFormat(PixelFormat pixfmt) + { + return Bitmap.IsAlphaPixelFormat(pixfmt); + } + + /// + /// Returns a value that indicates whether the pixel format is 32 bits per pixel. + /// + /// The to test. + /// true if pixfmt is canonical; otherwise, false. + public static bool IsCanonicalPixelFormat(PixelFormat pixfmt) + { + return Bitmap.IsCanonicalPixelFormat(pixfmt); + } + + /// + /// Returns a value that indicates whether the pixel format is 64 bits per pixel. + /// + /// The enumeration to test. + /// true if pixfmt is extended; otherwise, false. + public static bool IsExtendedPixelFormat(PixelFormat pixfmt) + { + return Bitmap.IsExtendedPixelFormat(pixfmt); + } + + /// + /// Creates a from a Windows handle to an icon. + /// + /// A handle to an icon. + /// The that this method creates. + public static FreeImageBitmap FromHicon(IntPtr hicon) + { + using (Bitmap bitmap = Bitmap.FromHicon(hicon)) + { + return new FreeImageBitmap(bitmap); + } + } + + /// + /// Creates a from the specified Windows resource. + /// + /// A handle to an instance of the executable + /// file that contains the resource. + /// A string containing the name of the resource bitmap. + /// The that this method creates. + public static FreeImageBitmap FromResource(IntPtr hinstance, string bitmapName) + { + using (Bitmap bitmap = Bitmap.FromResource(hinstance, bitmapName)) + { + return new FreeImageBitmap(bitmap); + } + } + + /// + /// Creates a from the specified file. + /// + /// A string that contains the name of the file + /// from which to create the . + /// The this method creates. + public static FreeImageBitmap FromFile(string filename) + { + return new FreeImageBitmap(filename); + } + + /// + /// Creates a from the specified file + /// using embedded color management information in that file. + /// + /// A string that contains the + /// name of the file from which to create the . + /// Ignored. + /// The this method creates. + public static FreeImageBitmap FromFile(string filename, bool useEmbeddedColorManagement) + { + return new FreeImageBitmap(filename); + } + + /// + /// Creates a from a handle to a GDI bitmap. + /// + /// The GDI bitmap handle from which to create the . + /// The this method creates. + public static FreeImageBitmap FromHbitmap(IntPtr hbitmap) + { + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.CreateFromHbitmap(hbitmap, IntPtr.Zero); + if (!newDib.IsNull) + { + result = new FreeImageBitmap(newDib); + } + return result; + } + + /// + /// Creates a from a handle to a GDI bitmap and a handle to a GDI palette. + /// + /// The GDI bitmap handle from which to create the . + /// Ignored. + /// The this method creates. + public static FreeImageBitmap FromHbitmap(IntPtr hbitmap, IntPtr hpalette) + { + return FromHbitmap(hbitmap); + } + + /// + /// Frees a bitmap handle. + /// + /// Handle to a bitmap. + /// true on success, false on failure. + public static bool FreeHbitmap(IntPtr hbitmap) + { + return FreeImage.FreeHbitmap(hbitmap); + } + + /// + /// Creates a from the specified data stream. + /// + /// A that contains the data for this . + /// The this method creates. + public static FreeImageBitmap FromStream(Stream stream) + { + return new FreeImageBitmap(stream); + } + + /// + /// Creates a from the specified data stream. + /// + /// A that contains the data for this . + /// Ignored. + /// The this method creates. + public static FreeImageBitmap FromStream(Stream stream, bool useEmbeddedColorManagement) + { + return new FreeImageBitmap(stream); + } + + /// + /// Creates a from the specified data stream. + /// + /// A that contains the data for this . + /// Ignored. + /// Ignored. + /// The this method creates. + public static FreeImageBitmap FromStream(Stream stream, bool useEmbeddedColorManagement, bool validateImageData) + { + return new FreeImageBitmap(stream); + } + + /// + /// Returns the color depth, in number of bits per pixel, + /// of the specified pixel format. + /// + /// The member that specifies + /// the format for which to find the size. + /// The color depth of the specified pixel format. + public static int GetPixelFormatSize(PixelFormat pixfmt) + { + return Bitmap.GetPixelFormatSize(pixfmt); + } + + /// + /// Performs a lossless rotation or flipping on a JPEG file. + /// + /// Source file. + /// Destination file; can be the source file; will be overwritten. + /// The operation to apply. + /// To avoid lossy transformation, you can set the perfect parameter to true. + /// Returns true on success, false on failure. + public static bool JPEGTransform(string source, string destination, FREE_IMAGE_JPEG_OPERATION operation, bool perfect) + { + return FreeImage.JPEGTransform(source, destination, operation, perfect); + } + + /// + /// Performs a lossless crop on a JPEG file. + /// + /// Source filename. + /// Destination filename. + /// Specifies the cropped rectangle. + /// Returns true on success, false on failure. + /// + /// or is null. + /// + /// + /// does not exist. + /// + public static bool JPEGCrop(string source, string destination, Rectangle rect) + { + if (source == null) + { + throw new ArgumentNullException("source"); + } + if (!File.Exists(source)) + { + throw new FileNotFoundException("source"); + } + if (destination == null) + { + throw new ArgumentNullException("destination"); + } + return JPEGCrop(source, destination, rect.Left, rect.Top, rect.Right, rect.Bottom); + } + + /// + /// Performs a lossless crop on a JPEG file. + /// + /// Source filename. + /// Destination filename. + /// Specifies the left position of the cropped rectangle. + /// Specifies the top position of the cropped rectangle. + /// Specifies the right position of the cropped rectangle. + /// Specifies the bottom position of the cropped rectangle. + /// Returns true on success, false on failure. + /// + /// or is null. + /// + /// + /// does not exist. + /// + public static bool JPEGCrop(string source, string destination, int left, int top, int right, int bottom) + { + if (source == null) + { + throw new ArgumentNullException("source"); + } + if (!File.Exists(source)) + { + throw new FileNotFoundException("source"); + } + if (destination == null) + { + throw new ArgumentNullException("destination"); + } + return FreeImage.JPEGCrop(source, destination, left, top, right, bottom); + } + + /// + /// Converts a X11 color name into a corresponding RGB value. + /// + /// Name of the color to convert. + /// Red component. + /// Green component. + /// Blue component. + /// Returns true on success, false on failure. + /// is null. + public static bool LookupX11Color(string color, out byte red, out byte green, out byte blue) + { + if (color == null) + { + throw new ArgumentNullException("color"); + } + return FreeImage.LookupX11Color(color, out red, out green, out blue); + } + + /// + /// Converts a SVG color name into a corresponding RGB value. + /// + /// Name of the color to convert. + /// Red component. + /// Green component. + /// Blue component. + /// Returns true on success, false on failure. + /// is null. + public static bool LookupSVGColor(string color, out byte red, out byte green, out byte blue) + { + if (color == null) + { + throw new ArgumentNullException("color"); + } + return FreeImage.LookupSVGColor(color, out red, out green, out blue); + } + + /// + /// Creates a lookup table to be used with AdjustCurve() which + /// may adjusts brightness and contrast, correct gamma and invert the image with a + /// single call to AdjustCurve(). + /// + /// Output lookup table to be used with AdjustCurve(). + /// The size of is assumed to be 256. + /// Percentage brightness value where -100 <= brightness <= 100. + /// A value of 0 means no change, less than 0 will make the image darker and greater + /// than 0 will make the image brighter. + /// Percentage contrast value where -100 <= contrast <= 100. + /// A value of 0 means no change, less than 0 will decrease the contrast + /// and greater than 0 will increase the contrast of the image. + /// Gamma value to be used for gamma correction. + /// A value of 1.0 leaves the image alone, less than one darkens it, + /// and greater than one lightens it. + /// If set to true, the image will be inverted. + /// The number of adjustments applied to the resulting lookup table + /// compared to a blind lookup table. + /// is null. + /// is not 256. + public static int GetAdjustColorsLookupTable(byte[] lookUpTable, double brightness, double contrast, double gamma, bool invert) + { + if (lookUpTable == null) + { + throw new ArgumentNullException("lookUpTable"); + } + if (lookUpTable.Length != 256) + { + throw new ArgumentException("lookUpTable"); + } + return FreeImage.GetAdjustColorsLookupTable(lookUpTable, brightness, contrast, gamma, invert); + } + + /// + /// Adds a specified frame to the file specified using the specified parameters. + /// Use this method to save selected frames from an to a multiple-frame image. + /// + /// File to add this frame to. + /// A that contains the frame to add. + /// Format of the image. + /// Flags to enable or disable plugin-features. + /// Flags to enable or disable plugin-features. + /// + /// or is null. + /// + /// does not exist. + /// Saving the image failed. + public static void SaveAdd( + string filename, + FreeImageBitmap bitmap, + FREE_IMAGE_FORMAT format, + FREE_IMAGE_LOAD_FLAGS loadFlags, + FREE_IMAGE_SAVE_FLAGS saveFlags) + { + if (filename == null) + { + throw new ArgumentNullException("filename"); + } + if (!File.Exists(filename)) + { + throw new FileNotFoundException("filename"); + } + if (bitmap == null) + { + throw new ArgumentNullException("bitmap"); + } + bitmap.EnsureNotDisposed(); + + FIBITMAP dib = bitmap.dib; + if (dib.IsNull) + throw new ArgumentNullException("bitmap"); + + FIMULTIBITMAP mpBitmap = + FreeImage.OpenMultiBitmapEx(filename, ref format, loadFlags, false, false, true); + + if (mpBitmap.IsNull) + throw new Exception(ErrorLoadingBitmap); + + FreeImage.AppendPage(mpBitmap, bitmap.dib); + + if (!FreeImage.CloseMultiBitmap(mpBitmap, saveFlags)) + throw new Exception(ErrorUnloadBitmap); + } + + /// + /// Adds a specified frame to the file specified using the specified parameters. + /// Use this method to save selected frames from an image to a multiple-frame image. + /// + /// File to add this frame to. + /// A that contains the frame to add. + /// The position of the inserted frame. + /// Format of the image. + /// Flags to enable or disable plugin-features. + /// Flags to enable or disable plugin-features. + /// + /// or is null. + /// + /// does not exist. + /// Saving the image failed. + /// is out of range. + public static void SaveAdd( + string filename, + FreeImageBitmap bitmap, + int insertPosition, + FREE_IMAGE_FORMAT format, + FREE_IMAGE_LOAD_FLAGS loadFlags, + FREE_IMAGE_SAVE_FLAGS saveFlags) + { + if (filename == null) + { + throw new ArgumentNullException("filename"); + } + if (!File.Exists(filename)) + { + throw new FileNotFoundException("filename"); + } + if (bitmap == null) + { + throw new ArgumentNullException("bitmap"); + } + if (insertPosition < 0) + { + throw new ArgumentOutOfRangeException("insertPosition"); + } + bitmap.EnsureNotDisposed(); + + FIBITMAP dib = bitmap.dib; + if (dib.IsNull) + throw new ArgumentNullException("bitmap"); + + FIMULTIBITMAP mpBitmap = + FreeImage.OpenMultiBitmapEx(filename, ref format, loadFlags, false, false, true); + + if (mpBitmap.IsNull) + throw new Exception(ErrorLoadingBitmap); + + int pageCount = FreeImage.GetPageCount(mpBitmap); + + if (insertPosition > pageCount) + throw new ArgumentOutOfRangeException("insertPosition"); + + if (insertPosition == pageCount) + FreeImage.AppendPage(mpBitmap, bitmap.dib); + else + FreeImage.InsertPage(mpBitmap, insertPosition, bitmap.dib); + + if (!FreeImage.CloseMultiBitmap(mpBitmap, saveFlags)) + throw new Exception(ErrorUnloadBitmap); + } + + /// + /// Returns a new instance of the class which + /// has no public accessible constructor. + /// + /// A new instace of . + public static PropertyItem CreateNewPropertyItem() + { + return FreeImage.CreatePropertyItem(); + } + + #endregion + + #region Helper functions + + /// + /// Throws an exception in case the instance has already been disposed. + /// + private void EnsureNotDisposed() + { + lock (lockObject) + { + if (!this.disposed) + { + return; + } + } + throw new ObjectDisposedException(ToString()); + } + + /// + /// Tries to replace the wrapped with a new one. + /// In case the new dib is null or the same as the already + /// wrapped one, nothing will be changed and the result will + /// be false. + /// Otherwise the wrapped will be unloaded and replaced. + /// + /// The new dib. + /// Returns true on success, false on failure. + private bool ReplaceDib(FIBITMAP newDib) + { + bool result = false; + if ((dib != newDib) && (!newDib.IsNull)) + { + UnloadDib(); + dib = newDib; + AddMemoryPressure(); + result = true; + } + return result; + } + + /// + /// Unloads currently wrapped or unlocks the locked page + /// in case it came from a multipaged bitmap. + /// + private void UnloadDib() + { + if (!dib.IsNull) + { + long size = FreeImage.GetDIBSize(dib); + FreeImage.UnloadEx(ref dib); + if (size > 0L) + GC.RemoveMemoryPressure(size); + } + } + + /// + /// Informs the runtime about unmanaged allocoted memory. + /// + private void AddMemoryPressure() + { + long dataSize; + if ((dataSize = DataSize) > 0L) + GC.AddMemoryPressure(dataSize); + } + + /// + /// Opens the stream and reads the number of available pages. + /// Then loads the first page to this instance. + /// + private void LoadFromStream(Stream stream, FREE_IMAGE_FORMAT format, FREE_IMAGE_LOAD_FLAGS flags) + { + FIMULTIBITMAP mdib = FreeImage.OpenMultiBitmapFromStream(stream, ref format, flags); + if (mdib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + try + { + frameCount = FreeImage.GetPageCount(mdib); + } + finally + { + if (!FreeImage.CloseMultiBitmapEx(ref mdib)) + { + throw new Exception(ErrorUnloadBitmap); + } + } + + dib = FreeImage.LoadFromStream(stream, flags, ref format); + if (dib.IsNull) + { + throw new Exception(ErrorLoadingBitmap); + } + + saveInformation.loadFlags = flags; + originalFormat = format; + AddMemoryPressure(); + } + + #endregion + + #region Interfaces + + /// + /// Helper class to store informations for . + /// + private sealed class SaveInformation : ICloneable + { + public string filename; + public FREE_IMAGE_FORMAT format = FREE_IMAGE_FORMAT.FIF_UNKNOWN; + public FREE_IMAGE_LOAD_FLAGS loadFlags = FREE_IMAGE_LOAD_FLAGS.DEFAULT; + public FREE_IMAGE_SAVE_FLAGS saveFlags = FREE_IMAGE_SAVE_FLAGS.DEFAULT; + + public object Clone() + { + return base.MemberwiseClone(); + } + } + + /// + /// Creates a deep copy of this . + /// + /// A deep copy of this . + public object Clone() + { + EnsureNotDisposed(); + FreeImageBitmap result = null; + FIBITMAP newDib = FreeImage.Clone(dib); + if (!dib.IsNull) + { + result = new FreeImageBitmap(newDib); + result.saveInformation = (SaveInformation)saveInformation.Clone(); + result.tag = tag; + result.originalFormat = originalFormat; + } + return result; + } + + /// + /// Performs application-defined tasks associated with freeing, + /// releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Performs application-defined tasks associated with freeing, + /// releasing, or resetting unmanaged resources. + /// + /// If true managed ressources are released. + protected virtual void Dispose(bool disposing) + { + // Only clean up once + lock (lockObject) + { + if (disposed) + { + return; + } + disposed = true; + } + + // Clean up managed resources + if (disposing) + { + if (stream != null) + { + if (disposeStream) + { + stream.Dispose(); + } + stream = null; + } + } + + tag = null; + saveInformation = null; + + // Clean up unmanaged resources + UnloadDib(); + } + + /// + /// Retrieves an object that can iterate through the individual scanlines in this . + /// + /// An for the . + /// The bitmaps's type is not supported. + IEnumerator IEnumerable.GetEnumerator() + { + return GetScanlines().GetEnumerator(); + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + EnsureNotDisposed(); + using (MemoryStream memory = new MemoryStream(DataSize)) + { + if (!FreeImage.SaveToStream(dib, memory, FREE_IMAGE_FORMAT.FIF_TIFF, FREE_IMAGE_SAVE_FLAGS.TIFF_LZW)) + { + throw new SerializationException(); + } + memory.Capacity = (int)memory.Length; + info.AddValue("Bitmap Data", memory.GetBuffer()); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageEngine.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageEngine.cs new file mode 100644 index 0000000..be287bc --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageEngine.cs @@ -0,0 +1,101 @@ +using System; +using System.Runtime.InteropServices; +using System.Diagnostics; + +namespace FreeImageAPI +{ + /// + /// Class handling non-bitmap related functions. + /// + public static class FreeImageEngine + { + #region Callback + + // Callback delegate + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private static readonly OutputMessageFunction outputMessageFunction; + + static FreeImageEngine() + { + // Check if FreeImage.dll is present and cancel setting the callbackfuntion if not + if (!IsAvailable) + { + return; + } + // Create a delegate (function pointer) to 'OnMessage' + outputMessageFunction = new OutputMessageFunction(OnMessage); + // Set the callback + FreeImage.SetOutputMessage(outputMessageFunction); + } + + /// + /// Internal callback + /// + private static void OnMessage(FREE_IMAGE_FORMAT fif, string message) + { + // Get a local copy of the multicast-delegate + OutputMessageFunction m = Message; + + // Check the local copy instead of the static instance + // to prevent a second thread from setting the delegate + // to null, which would cause a nullreference exception + if (m != null) + { + // Invoke the multicast-delegate + m.Invoke(fif, message); + } + } + + /// + /// Gets a value indicating if the FreeImage DLL is available or not. + /// + public static bool IsAvailable + { + get + { + return FreeImage.IsAvailable(); + } + } + + /// + /// Internal errors in FreeImage generate a logstring that can be + /// captured by this event. + /// + public static event OutputMessageFunction Message; + + #endregion + + /// + /// Gets a string containing the current version of the library. + /// + public static string Version + { + get + { + return FreeImage.GetVersion(); + } + } + + /// + /// Gets a string containing a standard copyright message. + /// + public static string CopyrightMessage + { + get + { + return FreeImage.GetCopyrightMessage(); + } + } + + /// + /// Gets whether the platform is using Little Endian. + /// + public static bool IsLittleEndian + { + get + { + return FreeImage.IsLittleEndian(); + } + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImagePlugin.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImagePlugin.cs new file mode 100644 index 0000000..399d492 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImagePlugin.cs @@ -0,0 +1,202 @@ +using System; +using System.Diagnostics; + +namespace FreeImageAPI.Plugins +{ + /// + /// Class representing a FreeImage format. + /// + public sealed class FreeImagePlugin + { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private readonly FREE_IMAGE_FORMAT fif; + + /// + /// Initializes a new instance of this class. + /// + /// The FreeImage format to wrap. + internal FreeImagePlugin(FREE_IMAGE_FORMAT fif) + { + this.fif = fif; + } + + /// + /// Gets the format of this instance. + /// + public FREE_IMAGE_FORMAT FIFormat + { + get + { + return fif; + } + } + + /// + /// Gets or sets whether this plugin is enabled. + /// + public bool Enabled + { + get + { + return (FreeImage.IsPluginEnabled(fif) == 1); + } + set + { + FreeImage.SetPluginEnabled(fif, value); + } + } + + /// + /// Gets a string describing the format. + /// + public string Format + { + get + { + return FreeImage.GetFormatFromFIF(fif); + } + } + + /// + /// Gets a comma-delimited file extension list describing the bitmap formats + /// this plugin can read and/or write. + /// + public string ExtentsionList + { + get + { + return FreeImage.GetFIFExtensionList(fif); + } + } + + /// + /// Gets a descriptive string that describes the bitmap formats + /// this plugin can read and/or write. + /// + public string Description + { + get + { + return FreeImage.GetFIFDescription(fif); + } + } + + /// + /// Returns a regular expression string that can be used by + /// a regular expression engine to identify the bitmap. + /// FreeImageQt makes use of this function. + /// + public string RegExpr + { + get + { + return FreeImage.GetFIFRegExpr(fif); + } + } + + /// + /// Gets whether this plugin can load bitmaps. + /// + public bool SupportsReading + { + get + { + return FreeImage.FIFSupportsReading(fif); + } + } + + /// + /// Gets whether this plugin can save bitmaps. + /// + public bool SupportsWriting + { + get + { + return FreeImage.FIFSupportsWriting(fif); + } + } + + /// + /// Checks whether this plugin can save a bitmap in the desired data type. + /// + /// The desired image type. + /// True if this plugin can save bitmaps as the desired type, else false. + public bool SupportsExportType(FREE_IMAGE_TYPE type) + { + return FreeImage.FIFSupportsExportType(fif, type); + } + + /// + /// Checks whether this plugin can save bitmaps in the desired bit depth. + /// + /// The desired bit depth. + /// True if this plugin can save bitmaps in the desired bit depth, else false. + public bool SupportsExportBPP(int bpp) + { + return FreeImage.FIFSupportsExportBPP(fif, bpp); + } + + /// + /// Gets whether this plugin can load or save an ICC profile. + /// + public bool SupportsICCProfiles + { + get + { + return FreeImage.FIFSupportsICCProfiles(fif); + } + } + + /// + /// Checks whether an extension is valid for this format. + /// + /// The desired extension. + /// True if the extension is valid for this format, false otherwise. + public bool ValidExtension(string extension) + { + return FreeImage.IsExtensionValidForFIF(fif, extension); + } + + /// + /// Checks whether an extension is valid for this format. + /// + /// The desired extension. + /// The string comparison type. + /// True if the extension is valid for this format, false otherwise. + public bool ValidExtension(string extension, StringComparison comparisonType) + { + return FreeImage.IsExtensionValidForFIF(fif, extension, comparisonType); + } + + /// + /// Checks whether a filename is valid for this format. + /// + /// The desired filename. + /// True if the filename is valid for this format, false otherwise. + public bool ValidFilename(string filename) + { + return FreeImage.IsFilenameValidForFIF(fif, filename); + } + + /// + /// Checks whether a filename is valid for this format. + /// + /// The desired filename. + /// The string comparison type. + /// True if the filename is valid for this format, false otherwise. + public bool ValidFilename(string filename, StringComparison comparisonType) + { + return FreeImage.IsFilenameValidForFIF(fif, filename, comparisonType); + } + + /// + /// Gets a descriptive string that describes the bitmap formats + /// this plugin can read and/or write. + /// + /// A descriptive string that describes the bitmap formats. + public override string ToString() + { + return Description; + } + } +} diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageStreamIO.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageStreamIO.cs new file mode 100644 index 0000000..fa0bfc7 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/FreeImageStreamIO.cs @@ -0,0 +1,167 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.5 $ +// $Date: 2009/09/15 11:47:46 $ +// $Id: FreeImageStreamIO.cs,v 1.5 2009/09/15 11:47:46 cklein05 Exp $ +// ========================================================== + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Diagnostics; + +namespace FreeImageAPI.IO +{ + /// + /// Internal class wrapping stream io functions. + /// + /// + /// FreeImage can read files from a disk or a network drive but also allows the user to + /// implement their own loading or saving functions to load them directly from an ftp or web + /// server for example. + /// + /// In .NET streams are a common way to handle data. The FreeImageStreamIO class handles + /// the loading and saving from and to streams. It implements the funtions FreeImage needs + /// to load data from an an arbitrary source. + /// + /// The class is for internal use only. + /// + internal static class FreeImageStreamIO + { + /// + /// structure that can be used to read from streams via + /// . + /// + public static readonly FreeImageIO io; + + /// + /// Initializes a new instances which can be used to + /// create a FreeImage compatible structure. + /// + static FreeImageStreamIO() + { + io.readProc = new ReadProc(streamRead); + io.writeProc = new WriteProc(streamWrite); + io.seekProc = new SeekProc(streamSeek); + io.tellProc = new TellProc(streamTell); + } + + /// + /// Reads the requested data from the stream and writes it to the given address. + /// + static unsafe uint streamRead(IntPtr buffer, uint size, uint count, fi_handle handle) + { + Stream stream = handle.GetObject() as Stream; + if ((stream == null) || (!stream.CanRead)) + { + return 0; + } + uint readCount = 0; + byte* ptr = (byte*)buffer; + byte[] bufferTemp = new byte[size]; + int read; + while (readCount < count) + { + read = stream.Read(bufferTemp, 0, (int)size); + if (read != (int)size) + { + stream.Seek(-read, SeekOrigin.Current); + break; + } + for (int i = 0; i < read; i++, ptr++) + { + *ptr = bufferTemp[i]; + } + readCount++; + } + return (uint)readCount; + } + + /// + /// Reads the given data and writes it into the stream. + /// + static unsafe uint streamWrite(IntPtr buffer, uint size, uint count, fi_handle handle) + { + Stream stream = handle.GetObject() as Stream; + if ((stream == null) || (!stream.CanWrite)) + { + return 0; + } + uint writeCount = 0; + byte[] bufferTemp = new byte[size]; + byte* ptr = (byte*)buffer; + while (writeCount < count) + { + for (int i = 0; i < size; i++, ptr++) + { + bufferTemp[i] = *ptr; + } + try + { + stream.Write(bufferTemp, 0, bufferTemp.Length); + } + catch + { + return writeCount; + } + writeCount++; + } + return writeCount; + } + + /// + /// Moves the streams position. + /// + static int streamSeek(fi_handle handle, int offset, SeekOrigin origin) + { + Stream stream = handle.GetObject() as Stream; + if (stream == null) + { + return 1; + } + stream.Seek((long)offset, origin); + return 0; + } + + /// + /// Returns the streams current position + /// + static int streamTell(fi_handle handle) + { + Stream stream = handle.GetObject() as Stream; + if (stream == null) + { + return -1; + } + return (int)stream.Position; + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/GifInformation.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/GifInformation.cs new file mode 100644 index 0000000..75af8ad --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/GifInformation.cs @@ -0,0 +1,131 @@ +using System; +using System.Diagnostics; +using System.Drawing; + +namespace FreeImageAPI.Metadata +{ + /// + /// Provides additional information specific for GIF files. This class cannot be inherited. + /// + public class GifInformation : MDM_ANIMATION + { + /// + /// Initializes a new instance of the class + /// with the specified . + /// + /// A reference to a instance. + public GifInformation(FreeImageBitmap bitmap) + : base(bitmap.Dib) + { + } + + /// + /// Gets or sets a value indicating whether this frame uses the + /// GIF image's global palette. If set to false, this + /// frame uses its local palette. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public bool? UseGlobalPalette + { + get + { + byte? useGlobalPalette = GetTagValue("NoLocalPalette"); + return useGlobalPalette.HasValue ? (useGlobalPalette.Value != 0) : default(bool?); + } + set + { + byte? val = null; + if (value.HasValue) + { + val = (byte)(value.Value ? 1 : 0); + } + SetTagValue("NoLocalPalette", val); + } + } + + /// + /// Creates a global palette for the GIF image, intialized with all entries of the + /// current local palette. + /// The property will be set to true when + /// invoking this method. This effectively enables the newly created global palette. + /// + /// + /// The image does not have a palette. + /// + public void CreateGlobalPalette() + { + CreateGlobalPalette(new Palette(dib)); + } + + /// + /// Creates a global palette for the GIF image with the specified size, intialized + /// with the first entries of the current local palette. + /// The property will be set to true when + /// invoking this method. This effectively enables the newly created global palette. + /// + /// The size of the newly created global palette. + /// + /// is a null reference. + public void CreateGlobalPalette(int size) + { + CreateGlobalPalette(new Palette(dib), size); + } + + /// + /// Creates a global palette for the GIF image, intialized with the entries + /// of the specified palette. + /// The property will be set to true when + /// invoking this method. This effectively enables the newly created global palette. + /// + /// The palette that contains the initial values for + /// the newly created global palette. + /// + /// is a null reference. + public void CreateGlobalPalette(Palette palette) + { + if (palette == null) + { + throw new ArgumentNullException("palette"); + } + + GlobalPalette = palette; + UseGlobalPalette = true; + } + + /// + /// Creates a global palette for the GIF image with the specified size, intialized + /// with the first entries of the specified palette. + /// The property will be set to true when + /// invoking this method. This effectively enables the newly created global palette. + /// + /// The palette that contains the initial values for + /// the newly created global palette. + /// The size of the newly created global palette. + /// + /// is a null reference. + public void CreateGlobalPalette(Palette palette, int size) + { + if (palette == null) + { + throw new ArgumentNullException("palette"); + } + if (size <= 0) + { + throw new ArgumentOutOfRangeException("size"); + } + + Palette pal = new Palette(size); + pal.CopyFrom(palette); + GlobalPalette = palette; + UseGlobalPalette = true; + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/ImageMetadata.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/ImageMetadata.cs new file mode 100644 index 0000000..d0bb44b --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/ImageMetadata.cs @@ -0,0 +1,286 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.7 $ +// $Date: 2009/02/27 16:34:59 $ +// $Id: ImageMetadata.cs,v 1.7 2009/02/27 16:34:59 cklein05 Exp $ +// ========================================================== + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Diagnostics; + +namespace FreeImageAPI.Metadata +{ + /// + /// Class handling metadata of a FreeImage bitmap. + /// + public class ImageMetadata : IEnumerable, IComparable, IComparable + { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private readonly List data; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private readonly FIBITMAP dib; + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private bool hideEmptyModels; + + /// + /// Initializes a new instance based on the specified , + /// showing all known models. + /// + /// Handle to a FreeImage bitmap. + public ImageMetadata(FIBITMAP dib) : this(dib, false) { } + + /// + /// Initializes a new instance based on the specified , + /// showing or hiding empry models. + /// + /// Handle to a FreeImage bitmap. + /// When true, empty metadata models + /// will be hidden until a tag to this model is added. + public ImageMetadata(FIBITMAP dib, bool hideEmptyModels) + { + if (dib.IsNull) throw new ArgumentNullException("dib"); + data = new List(FreeImage.FREE_IMAGE_MDMODELS.Length); + this.dib = dib; + this.hideEmptyModels = hideEmptyModels; + + data.Add(new MDM_ANIMATION(dib)); + data.Add(new MDM_COMMENTS(dib)); + data.Add(new MDM_CUSTOM(dib)); + data.Add(new MDM_EXIF_EXIF(dib)); + data.Add(new MDM_EXIF_GPS(dib)); + data.Add(new MDM_INTEROP(dib)); + data.Add(new MDM_EXIF_MAIN(dib)); + data.Add(new MDM_MAKERNOTE(dib)); + data.Add(new MDM_GEOTIFF(dib)); + data.Add(new MDM_IPTC(dib)); + data.Add(new MDM_NODATA(dib)); + data.Add(new MDM_XMP(dib)); + } + + /// + /// Gets or sets the of the specified type. + /// In case the getter returns null the model is not contained + /// by the list. + /// null can be used calling the setter to destroy the model. + /// + /// Type of the model. + /// The object of the specified type. + public MetadataModel this[FREE_IMAGE_MDMODEL model] + { + get + { + for (int i = 0; i < data.Count; i++) + { + if (data[i].Model == model) + { + if (!data[i].Exists && hideEmptyModels) + { + return null; + } + return data[i]; + } + } + return null; + } + } + + /// + /// Gets or sets the at the specified index. + /// In case the getter returns null the model is not contained + /// by the list. + /// null can be used calling the setter to destroy the model. + /// + /// Index of the within + /// this instance. + /// The + /// object at the specified index. + public MetadataModel this[int index] + { + get + { + if (index < 0 || index >= data.Count) + { + throw new ArgumentOutOfRangeException("index"); + } + return (hideEmptyModels && !data[index].Exists) ? null : data[index]; + } + } + + /// + /// Returns a list of all visible + /// MetadataModels. + /// + public List List + { + get + { + if (hideEmptyModels) + { + List result = new List(); + for (int i = 0; i < data.Count; i++) + { + if (data[i].Exists) + { + result.Add(data[i]); + } + } + return result; + } + else + { + return data; + } + } + } + + /// + /// Adds new tag to the bitmap or updates its value in case it already exists. + /// will be used as key. + /// + /// The tag to add or update. + /// Returns true on success, false on failure. + /// + /// is null. + public bool AddTag(MetadataTag tag) + { + for (int i = 0; i < data.Count; i++) + { + if (tag.Model == data[i].Model) + { + return data[i].AddTag(tag); + } + } + return false; + } + + /// + /// Returns the number of visible + /// MetadataModels. + /// + public int Count + { + get + { + if (hideEmptyModels) + { + int count = 0; + for (int i = 0; i < data.Count; i++) + { + if (data[i].Exists) + { + count++; + } + } + return count; + } + else + { + return data.Count; + } + } + } + + /// + /// Gets or sets whether empty + /// MetadataModels are hidden. + /// + public bool HideEmptyModels + { + get + { + return hideEmptyModels; + } + set + { + hideEmptyModels = value; + } + } + + /// + /// Retrieves an object that can iterate through the individual + /// MetadataModels + /// in this . + /// + /// An for this . + public IEnumerator GetEnumerator() + { + if (hideEmptyModels) + { + List tempList = new List(data.Count); + for (int i = 0; i < data.Count; i++) + { + if (data[i].Exists) + { + tempList.Add(data[i]); + } + } + return tempList.GetEnumerator(); + } + else + { + return data.GetEnumerator(); + } + } + + /// + /// Compares this instance with a specified . + /// + /// An object to compare with this instance. + /// A 32-bit signed integer indicating the lexical relationship between the two comparands. + /// is not a . + public int CompareTo(object obj) + { + if (obj == null) + { + return 1; + } + if (!(obj is ImageMetadata)) + { + throw new ArgumentException("obj"); + } + return CompareTo((ImageMetadata)obj); + } + + /// + /// Compares this instance with a specified object. + /// + /// A to compare. + /// A signed number indicating the relative values of this instance + /// and . + public int CompareTo(ImageMetadata other) + { + return this.dib.CompareTo(other.dib); + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/LocalPlugin.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/LocalPlugin.cs new file mode 100644 index 0000000..4c6bbe8 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/LocalPlugin.cs @@ -0,0 +1,466 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.9 $ +// $Date: 2009/09/15 11:47:46 $ +// $Id: LocalPlugin.cs,v 1.9 2009/09/15 11:47:46 cklein05 Exp $ +// ========================================================== + +using System; +using System.IO; +using System.Runtime.InteropServices; +using FreeImageAPI.IO; +using System.Diagnostics; + +namespace FreeImageAPI.Plugins +{ + /// + /// Class representing own FreeImage-Plugins. + /// + /// + /// FreeImages itself is plugin based. Each supported format is integrated by a seperat plugin, + /// that handles loading, saving, descriptions, identifing ect. + /// And of course the user can create own plugins and use them in FreeImage. + /// To do that the above mentioned predefined methodes need to be implemented. + /// + /// The class below handles the creation of such a plugin. The class itself is abstract + /// as well as some core functions that need to be implemented. + /// The class can be used to enable or disable the plugin in FreeImage after regististration or + /// retrieve the formatid, assigned by FreeImage. + /// The class handles the callback functions, garbage collector and pointer operation to make + /// the implementation as user friendly as possible. + /// + /// How to: + /// There are two functions that need to be implemented: + /// and + /// . + /// is used by the constructor + /// of the abstract class. FreeImage wants a list of the implemented functions. Each function is + /// represented by a function pointer (a .NET ). In case a function + /// is not implemented FreeImage receives an empty delegate). To tell the constructor + /// which functions have been implemented the information is represented by a disjunction of + /// . + /// + /// For example: + /// return MethodFlags.LoadProc | MethodFlags.SaveProc; + /// + /// The above statement means that LoadProc and SaveProc have been implemented by the user. + /// Keep in mind, that each function has a standard implementation that has static return + /// values that may cause errors if listed in + /// without a real implementation. + /// + /// is used by some checks of FreeImage and + /// must be implemented. for example can be + /// implemented if the plugin supports reading, but it doesn't have to, the plugin could only + /// be used to save an already loaded bitmap in a special format. + /// + public abstract class LocalPlugin + { + /// + /// Struct containing function pointers. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private Plugin plugin; + + /// + /// Delegate for register callback by FreeImage. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private InitProc initProc; + + /// + /// The format id assiged to the plugin. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected FREE_IMAGE_FORMAT format = FREE_IMAGE_FORMAT.FIF_UNKNOWN; + + /// + /// When true the plugin was registered successfully else false. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected readonly bool registered = false; + + /// + /// A copy of the functions used to register. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected readonly MethodFlags implementedMethods; + + /// + /// MethodFlags defines values to fill a bitfield telling which + /// functions have been implemented by a plugin. + /// + [Flags] + protected enum MethodFlags + { + /// + /// No mothods implemented. + /// + None = 0x0, + + /// + /// DescriptionProc has been implemented. + /// + DescriptionProc = 0x1, + + /// + /// ExtensionListProc has been implemented. + /// + ExtensionListProc = 0x2, + + /// + /// RegExprProc has been implemented. + /// + RegExprProc = 0x4, + + /// + /// OpenProc has been implemented. + /// + OpenProc = 0x8, + + /// + /// CloseProc has been implemented. + /// + CloseProc = 0x10, + + /// + /// PageCountProc has been implemented. + /// + PageCountProc = 0x20, + + /// + /// PageCapabilityProc has been implemented. + /// + PageCapabilityProc = 0x40, + + /// + /// LoadProc has been implemented. + /// + LoadProc = 0x80, + + /// + /// SaveProc has been implemented. + /// + SaveProc = 0x100, + + /// + /// ValidateProc has been implemented. + /// + ValidateProc = 0x200, + + /// + /// MimeProc has been implemented. + /// + MimeProc = 0x400, + + /// + /// SupportsExportBPPProc has been implemented. + /// + SupportsExportBPPProc = 0x800, + + /// + /// SupportsExportTypeProc has been implemented. + /// + SupportsExportTypeProc = 0x1000, + + /// + /// SupportsICCProfilesProc has been implemented. + /// + SupportsICCProfilesProc = 0x2000 + } + + // Functions that must be implemented. + + /// + /// Function that returns a bitfield containing the + /// implemented methods. + /// + /// Bitfield of the implemented methods. + protected abstract MethodFlags GetImplementedMethods(); + + /// + /// Implementation of FormatProc + /// + /// A string containing the plugins format. + protected abstract string FormatProc(); + + // Functions that can be implemented. + + /// + /// Function that can be implemented. + /// + protected virtual string DescriptionProc() { return ""; } + /// + /// Function that can be implemented. + /// + protected virtual string ExtensionListProc() { return ""; } + /// + /// Function that can be implemented. + /// + protected virtual string RegExprProc() { return ""; } + /// + /// Function that can be implemented. + /// + protected virtual IntPtr OpenProc(ref FreeImageIO io, fi_handle handle, bool read) { return IntPtr.Zero; } + /// + /// Function that can be implemented. + /// + protected virtual void CloseProc(ref FreeImageIO io, fi_handle handle, IntPtr data) { } + /// + /// Function that can be implemented. + /// + protected virtual int PageCountProc(ref FreeImageIO io, fi_handle handle, IntPtr data) { return 0; } + /// + /// Function that can be implemented. + /// + protected virtual int PageCapabilityProc(ref FreeImageIO io, fi_handle handle, IntPtr data) { return 0; } + /// + /// Function that can be implemented. + /// + protected virtual FIBITMAP LoadProc(ref FreeImageIO io, fi_handle handle, int page, int flags, IntPtr data) { return FIBITMAP.Zero; } + /// + /// Function that can be implemented. + /// + protected virtual bool SaveProc(ref FreeImageIO io, FIBITMAP dib, fi_handle handle, int page, int flags, IntPtr data) { return false; } + /// + /// Function that can be implemented. + /// + protected virtual bool ValidateProc(ref FreeImageIO io, fi_handle handle) { return false; } + /// + /// Function that can be implemented. + /// + protected virtual string MimeProc() { return ""; } + /// + /// Function that can be implemented. + /// + protected virtual bool SupportsExportBPPProc(int bpp) { return false; } + /// + /// Function that can be implemented. + /// + protected virtual bool SupportsExportTypeProc(FREE_IMAGE_TYPE type) { return false; } + /// + /// Function that can be implemented. + /// + protected virtual bool SupportsICCProfilesProc() { return false; } + + /// + /// The constructor automatically registeres the plugin in FreeImage. + /// To do this it prepares a FreeImage defined structure with function pointers + /// to the implemented functions or null if not implemented. + /// Before registing the functions they are pinned in memory so the garbage collector + /// can't move them around in memory after we passed there addresses to FreeImage. + /// + public LocalPlugin() + { + implementedMethods = GetImplementedMethods(); + + if ((implementedMethods & MethodFlags.DescriptionProc) != 0) + { + plugin.descriptionProc = new DescriptionProc(DescriptionProc); + } + if ((implementedMethods & MethodFlags.ExtensionListProc) != 0) + { + plugin.extensionListProc = new ExtensionListProc(ExtensionListProc); + } + if ((implementedMethods & MethodFlags.RegExprProc) != 0) + { + plugin.regExprProc = new RegExprProc(RegExprProc); + } + if ((implementedMethods & MethodFlags.OpenProc) != 0) + { + plugin.openProc = new OpenProc(OpenProc); + } + if ((implementedMethods & MethodFlags.CloseProc) != 0) + { + plugin.closeProc = new CloseProc(CloseProc); + } + if ((implementedMethods & MethodFlags.PageCountProc) != 0) + { + plugin.pageCountProc = new PageCountProc(PageCountProc); + } + if ((implementedMethods & MethodFlags.PageCapabilityProc) != 0) + { + plugin.pageCapabilityProc = new PageCapabilityProc(PageCapabilityProc); + } + if ((implementedMethods & MethodFlags.LoadProc) != 0) + { + plugin.loadProc = new LoadProc(LoadProc); + } + if ((implementedMethods & MethodFlags.SaveProc) != 0) + { + plugin.saveProc = new SaveProc(SaveProc); + } + if ((implementedMethods & MethodFlags.ValidateProc) != 0) + { + plugin.validateProc = new ValidateProc(ValidateProc); + } + if ((implementedMethods & MethodFlags.MimeProc) != 0) + { + plugin.mimeProc = new MimeProc(MimeProc); + } + if ((implementedMethods & MethodFlags.SupportsExportBPPProc) != 0) + { + plugin.supportsExportBPPProc = new SupportsExportBPPProc(SupportsExportBPPProc); + } + if ((implementedMethods & MethodFlags.SupportsExportTypeProc) != 0) + { + plugin.supportsExportTypeProc = new SupportsExportTypeProc(SupportsExportTypeProc); + } + if ((implementedMethods & MethodFlags.SupportsICCProfilesProc) != 0) + { + plugin.supportsICCProfilesProc = new SupportsICCProfilesProc(SupportsICCProfilesProc); + } + + // FormatProc is always implemented + plugin.formatProc = new FormatProc(FormatProc); + + // InitProc is the register call back. + initProc = new InitProc(RegisterProc); + + // Register the plugin. The result will be saved and can be accessed later. + registered = FreeImage.RegisterLocalPlugin(initProc, null, null, null, null) != FREE_IMAGE_FORMAT.FIF_UNKNOWN; + if (registered) + { + PluginRepository.RegisterLocalPlugin(this); + } + } + + private void RegisterProc(ref Plugin plugin, int format_id) + { + // Copy the function pointers + plugin = this.plugin; + // Retrieve the format if assigned to this plugin by FreeImage. + format = (FREE_IMAGE_FORMAT)format_id; + } + + /// + /// Gets or sets if the plugin is enabled. + /// + public bool Enabled + { + get + { + if (registered) + { + return (FreeImage.IsPluginEnabled(format) > 0); + } + else + { + throw new ObjectDisposedException("plugin not registered"); + } + } + set + { + if (registered) + { + FreeImage.SetPluginEnabled(format, value); + } + else + { + throw new ObjectDisposedException("plugin not registered"); + } + } + } + + /// + /// Gets if the plugin was registered successfully. + /// + public bool Registered + { + get { return registered; } + } + + /// + /// Gets the FreeImage assigned to this plugin. + /// + public FREE_IMAGE_FORMAT Format + { + get + { + return format; + } + } + + /// + /// Reads from an unmanaged stream. + /// + protected unsafe int Read(FreeImageIO io, fi_handle handle, uint size, uint count, ref byte[] buffer) + { + fixed (byte* ptr = buffer) + { + return (int)io.readProc(new IntPtr(ptr), size, count, handle); + } + } + + /// + /// Reads a single byte from an unmanaged stream. + /// + protected unsafe int ReadByte(FreeImageIO io, fi_handle handle) + { + byte buffer = 0; + return (int)io.readProc(new IntPtr(&buffer), 1, 1, handle) > 0 ? buffer : -1; + } + + /// + /// Writes to an unmanaged stream. + /// + protected unsafe int Write(FreeImageIO io, fi_handle handle, uint size, uint count, ref byte[] buffer) + { + fixed (byte* ptr = buffer) + { + return (int)io.writeProc(new IntPtr(ptr), size, count, handle); + } + } + + /// + /// Writes a single byte to an unmanaged stream. + /// + protected unsafe int WriteByte(FreeImageIO io, fi_handle handle, byte value) + { + return (int)io.writeProc(new IntPtr(&value), 1, 1, handle); + } + + /// + /// Seeks in an unmanaged stream. + /// + protected int Seek(FreeImageIO io, fi_handle handle, int offset, SeekOrigin origin) + { + return io.seekProc(handle, offset, origin); + } + + /// + /// Retrieves the position of an unmanaged stream. + /// + protected int Tell(FreeImageIO io, fi_handle handle) + { + return io.tellProc(handle); + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MemoryArray.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MemoryArray.cs new file mode 100644 index 0000000..a1ff887 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MemoryArray.cs @@ -0,0 +1,828 @@ +using System; +using System.Runtime.InteropServices; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; + +namespace FreeImageAPI +{ + /// + /// Represents unmanaged memory, containing an array of a given structure. + /// + /// Structuretype represented by the instance. + /// + /// and can not be marshalled. + /// + /// Use instead of and + /// instead of . + /// + public unsafe class MemoryArray : IDisposable, ICloneable, ICollection, IEnumerable, IEquatable> where T : struct + { + /// + /// Baseaddress of the wrapped memory. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected byte* baseAddress; + + /// + /// Number of elements being wrapped. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected int length; + + /// + /// Size, in bytes, of each element. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private static readonly int size; + + /// + /// Array of T containing a single element. + /// The array is used as a workaround, because there are no pointer for generic types. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected T[] buffer; + + /// + /// Pointer to the element of buffer. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected byte* ptr; + + /// + /// Handle for pinning buffer. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected GCHandle handle; + + /// + /// Indicates whether the wrapped memory is handled like a bitfield. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected readonly bool isOneBit; + + /// + /// Indicates whther the wrapped memory is handles like 4-bit blocks. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected readonly bool isFourBit; + + /// + /// An object that can be used to synchronize access to the . + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected object syncRoot = null; + + static MemoryArray() + { + T[] dummy = new T[2]; + long marshalledSize = Marshal.SizeOf(typeof(T)); + long structureSize = + Marshal.UnsafeAddrOfPinnedArrayElement(dummy, 1).ToInt64() - + Marshal.UnsafeAddrOfPinnedArrayElement(dummy, 0).ToInt64(); + if (marshalledSize != structureSize) + { + throw new NotSupportedException( + "The desired type can not be handled, " + + "because its managed and unmanaged size in bytes are different."); + } + + size = (int)marshalledSize; + } + + /// + /// Initializes a new instance. + /// + protected MemoryArray() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// Address of the memory block. + /// Length of the array. + /// + /// is null. + /// + /// is less or equal zero. + /// + /// The type is not supported. + public MemoryArray(IntPtr baseAddress, int length) + : this(baseAddress.ToPointer(), length) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// Address of the memory block. + /// Length of the array. + /// + /// is null. + /// + /// is less or equal zero. + /// + /// The type is not supported. + public MemoryArray(void* baseAddress, int length) + { + if (typeof(T) == typeof(FI1BIT)) + { + isOneBit = true; + } + else if (typeof(T) == typeof(FI4BIT)) + { + isFourBit = true; + } + + if (baseAddress == null) + { + throw new ArgumentNullException("baseAddress"); + } + if (length < 1) + { + throw new ArgumentOutOfRangeException("length"); + } + + this.baseAddress = (byte*)baseAddress; + this.length = (int)length; + + if (!isOneBit && !isFourBit) + { + // Create an array containing a single element. + // Due to the fact, that it's not possible to create pointers + // of generic types, an array is used to obtain the memory + // address of an element of T. + this.buffer = new T[1]; + // The array is pinned immediately to prevent the GC from + // moving it to a different position in memory. + this.handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); + // The array and its content have beed pinned, so that its address + // can be safely requested and stored for the whole lifetime + // of the instace. + this.ptr = (byte*)handle.AddrOfPinnedObject(); + } + } + + /// + /// Frees the allocated . + /// + ~MemoryArray() + { + Dispose(false); + } + + /// + /// Tests whether two specified structures are equivalent. + /// + /// The that is to the left of the equality operator. + /// The that is to the right of the equality operator. + /// + /// true if the two structures are equal; otherwise, false. + /// + public static bool operator ==(MemoryArray left, MemoryArray right) + { + if (object.ReferenceEquals(left, right)) + { + return true; + } + if (object.ReferenceEquals(right, null) || + object.ReferenceEquals(left, null) || + (left.length != right.length)) + { + return false; + } + if (left.baseAddress == right.baseAddress) + { + return true; + } + return FreeImage.CompareMemory(left.baseAddress, right.baseAddress, (uint)left.length); + } + + /// + /// Tests whether two specified structures are different. + /// + /// The that is to the left of the inequality operator. + /// The that is to the right of the inequality operator. + /// + /// true if the two structures are different; otherwise, false. + /// + public static bool operator !=(MemoryArray left, MemoryArray right) + { + return (!(left == right)); + } + + /// + /// Gets the value at the specified position. + /// + /// A 32-bit integer that represents the position + /// of the array element to get. + /// The value at the specified position. + /// + /// is outside the range of valid indexes + /// for the unmanaged array. + public T GetValue(int index) + { + if ((index >= this.length) || (index < 0)) + { + throw new ArgumentOutOfRangeException("index"); + } + + return GetValueInternal(index); + } + + private T GetValueInternal(int index) + { + EnsureNotDisposed(); + if (isOneBit) + { + return (T)(object)(FI1BIT)(((baseAddress[index / 8] & ((1 << (7 - (index % 8))))) == 0) ? 0 : 1); + } + else if (isFourBit) + { + return (T)(object)(FI4BIT)(((index % 2) == 0) ? (baseAddress[index / 2] >> 4) : (baseAddress[index / 2] & 0x0F)); + } + else + { + CopyMemory(ptr, baseAddress + (index * size), size); + return buffer[0]; + } + } + + /// + /// Sets a value to the element at the specified position. + /// + /// The new value for the specified element. + /// A 32-bit integer that represents the + /// position of the array element to set. + /// + /// is outside the range of valid indexes + /// for the unmanaged array. + public void SetValue(T value, int index) + { + if ((index >= this.length) || (index < 0)) + { + throw new ArgumentOutOfRangeException("index"); + } + SetValueInternal(value, index); + } + + private void SetValueInternal(T value, int index) + { + EnsureNotDisposed(); + if (isOneBit) + { + if ((FI1BIT)(object)value != 0) + { + baseAddress[index / 8] |= (byte)(1 << (7 - (index % 8))); + } + else + { + baseAddress[index / 8] &= (byte)(~(1 << (7 - (index % 8)))); + } + } + else if (isFourBit) + { + if ((index % 2) == 0) + { + baseAddress[index / 2] = (byte)((baseAddress[index / 2] & 0x0F) | ((FI4BIT)(object)value << 4)); + } + else + { + baseAddress[index / 2] = (byte)((baseAddress[index / 2] & 0xF0) | ((FI4BIT)(object)value & 0x0F)); + } + } + else + { + buffer[0] = value; + CopyMemory(baseAddress + (index * size), ptr, size); + } + } + + /// + /// Gets the values at the specified position and length. + /// + /// A 32-bit integer that represents the position + /// of the array elements to get. + /// A 32-bit integer that represents the length + /// of the array elements to get. + /// The values at the specified position and length. + /// + /// is outside the range of valid indexes + /// for the unmanaged array or is greater than the number of elements + /// from to the end of the unmanaged array. + public T[] GetValues(int index, int length) + { + EnsureNotDisposed(); + if ((index >= this.length) || (index < 0)) + { + throw new ArgumentOutOfRangeException("index"); + } + if (((index + length) > this.length) || (length < 1)) + { + throw new ArgumentOutOfRangeException("length"); + } + + T[] data = new T[length]; + if (isOneBit || isFourBit) + { + for (int i = 0; i < length; i++) + { + data[i] = GetValueInternal(i); + } + } + else + { + GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); + byte* dst = (byte*)Marshal.UnsafeAddrOfPinnedArrayElement(data, 0); + CopyMemory(dst, baseAddress + (size * index), size * length); + handle.Free(); + } + return data; + } + + /// + /// Sets the values at the specified position. + /// + /// An array containing the new values for the specified elements. + /// A 32-bit integer that represents the position + /// of the array elements to set. + /// + /// is a null reference (Nothing in Visual Basic). + /// + /// is outside the range of valid indexes + /// for the unmanaged array or is greater than the number of elements + /// from to the end of the array. + public void SetValues(T[] values, int index) + { + EnsureNotDisposed(); + if (values == null) + { + throw new ArgumentNullException("values"); + } + if ((index >= this.length) || (index < 0)) + { + throw new ArgumentOutOfRangeException("index"); + } + if ((index + values.Length) > this.length) + { + throw new ArgumentOutOfRangeException("values.Length"); + } + + if (isOneBit || isFourBit) + { + for (int i = 0; i != values.Length; ) + { + SetValueInternal(values[i++], index++); + } + } + else + { + GCHandle handle = GCHandle.Alloc(values, GCHandleType.Pinned); + byte* src = (byte*)Marshal.UnsafeAddrOfPinnedArrayElement(values, 0); + CopyMemory(baseAddress + (index * size), src, size * length); + handle.Free(); + } + } + + /// + /// Copies the entire array to a compatible one-dimensional , + /// starting at the specified index of the target array. + /// + /// The one-dimensional that is the destination + /// of the elements copied from . + /// The must have zero-based indexing. + /// The zero-based index in + /// at which copying begins. + public void CopyTo(Array array, int index) + { + EnsureNotDisposed(); + if (!(array is T[])) + { + throw new InvalidCastException("array"); + } + try + { + CopyTo((T[])array, 0, index, length); + } + catch (ArgumentOutOfRangeException ex) + { + throw new ArgumentException(ex.Message, ex); + } + } + + /// + /// Copies a range of elements from the unmanaged array starting at the specified + /// and pastes them to + /// starting at the specified . + /// The length and the indexes are specified as 32-bit integers. + /// + /// The array that receives the data. + /// A 32-bit integer that represents the index + /// in the unmanaged array at which copying begins. + /// A 32-bit integer that represents the index in + /// the destination array at which storing begins. + /// A 32-bit integer that represents the number of elements to copy. + /// + /// is a null reference (Nothing in Visual Basic). + /// + /// is outside the range of valid indexes + /// for the unmanaged array or is greater than the number of elements + /// from to the end of the unmanaged array + /// -or- + /// is outside the range of valid indexes + /// for the array or is greater than the number of elements + /// from to the end of the array. + /// + public void CopyTo(T[] array, int sourceIndex, int destinationIndex, int length) + { + EnsureNotDisposed(); + if (array == null) + { + throw new ArgumentNullException("array"); + } + if ((sourceIndex >= this.length) || (sourceIndex < 0)) + { + throw new ArgumentOutOfRangeException("sourceIndex"); + } + if ((destinationIndex >= array.Length) || (destinationIndex < 0)) + { + throw new ArgumentOutOfRangeException("destinationIndex"); + } + if ((sourceIndex + length > this.length) || + (destinationIndex + length > array.Length) || + (length < 1)) + { + throw new ArgumentOutOfRangeException("length"); + } + + if (isOneBit || isFourBit) + { + for (int i = 0; i != length; i++) + { + array[destinationIndex++] = GetValueInternal(sourceIndex++); + } + } + else + { + GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned); + byte* dst = (byte*)Marshal.UnsafeAddrOfPinnedArrayElement(array, destinationIndex); + CopyMemory(dst, baseAddress + (size * sourceIndex), size * length); + handle.Free(); + } + } + + /// + /// Copies a range of elements from the array starting at the specified + /// and pastes them to the unmanaged array + /// starting at the specified . + /// The length and the indexes are specified as 32-bit integers. + /// + /// The array that holds the data. + /// A 32-bit integer that represents the index + /// in the array at which copying begins. + /// A 32-bit integer that represents the index in + /// the unmanaged array at which storing begins. + /// A 32-bit integer that represents the number of elements to copy. + /// + /// is a null reference (Nothing in Visual Basic). + /// + /// is outside the range of valid indexes + /// for the array or is greater than the number of elements + /// from to the end of the array + /// -or- + /// is outside the range of valid indexes + /// for the unmanaged array or is greater than the number of elements + /// from to the end of the unmanaged array. + /// + public void CopyFrom(T[] array, int sourceIndex, int destinationIndex, int length) + { + EnsureNotDisposed(); + if (array == null) + { + throw new ArgumentNullException("array"); + } + if ((destinationIndex >= this.length) || (destinationIndex < 0)) + { + throw new ArgumentOutOfRangeException("destinationIndex"); + } + if ((sourceIndex >= array.Length) || (sourceIndex < 0)) + { + throw new ArgumentOutOfRangeException("sourceIndex"); + } + if ((destinationIndex + length > this.length) || + (sourceIndex + length > array.Length) || + (length < 1)) + { + throw new ArgumentOutOfRangeException("length"); + } + + if (isOneBit || isFourBit) + { + for (int i = 0; i != length; i++) + { + SetValueInternal(array[sourceIndex++], destinationIndex++); + } + } + else + { + GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned); + byte* src = (byte*)Marshal.UnsafeAddrOfPinnedArrayElement(array, sourceIndex); + CopyMemory(baseAddress + (size * destinationIndex), src, size * length); + handle.Free(); + } + } + + /// + /// Returns the represented block of memory as an array of . + /// + /// The represented block of memory. + public byte[] ToByteArray() + { + EnsureNotDisposed(); + byte[] result; + if (isOneBit) + { + result = new byte[(length + 7) / 8]; + } + else if (isFourBit) + { + result = new byte[(length + 3) / 4]; + } + else + { + result = new byte[size * length]; + } + fixed (byte* dst = result) + { + CopyMemory(dst, baseAddress, result.Length); + } + return result; + } + + /// + /// Gets or sets the value at the specified position in the array. + /// + /// A 32-bit integer that represents the position + /// of the array element to get. + /// The value at the specified position in the array. + /// + /// is outside the range of valid indexes + /// for the unmanaged array. + public T this[int index] + { + get + { + return GetValue(index); + } + set + { + SetValue(value, index); + } + } + + /// + /// Gets or sets the values of the unmanaged array. + /// + public T[] Data + { + get + { + return GetValues(0, length); + } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + if (value.Length != length) + { + throw new ArgumentOutOfRangeException("value.Lengt"); + } + SetValues(value, 0); + } + } + + /// + /// Gets the length of the unmanaged array. + /// + public int Length + { + get + { + EnsureNotDisposed(); + return length; + } + } + + /// + /// Gets the base address of the represented memory block. + /// + public IntPtr BaseAddress + { + get + { + EnsureNotDisposed(); + return new IntPtr(baseAddress); + } + } + + /// + /// Creates a shallow copy of the . + /// + /// A shallow copy of the . + public object Clone() + { + EnsureNotDisposed(); + return new MemoryArray(baseAddress, length); + } + + /// + /// Gets a 32-bit integer that represents the total number of elements + /// in the . + /// + public int Count + { + get { EnsureNotDisposed(); return length; } + } + + /// + /// Gets a value indicating whether access to the + /// is synchronized (thread safe). + /// + public bool IsSynchronized + { + get { EnsureNotDisposed(); return false; } + } + + /// + /// Gets an object that can be used to synchronize access to the . + /// + public object SyncRoot + { + get + { + EnsureNotDisposed(); + if (syncRoot == null) + { + System.Threading.Interlocked.CompareExchange(ref syncRoot, new object(), null); + } + return syncRoot; + } + } + + /// + /// Retrieves an object that can iterate through the individual + /// elements in this . + /// + /// An for the . + public IEnumerator GetEnumerator() + { + EnsureNotDisposed(); + T[] values = GetValues(0, length); + for (int i = 0; i != values.Length; i++) + { + yield return values[i]; + } + } + + /// + /// Retrieves an object that can iterate through the individual + /// elements in this . + /// + /// An for the . + IEnumerator IEnumerable.GetEnumerator() + { + EnsureNotDisposed(); + T[] values = GetValues(0, length); + for (int i = 0; i != values.Length; i++) + { + yield return values[i]; + } + } + + /// + /// Releases all ressources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases allocated handles associated with this instance. + /// + /// true to release managed resources. + protected virtual void Dispose(bool disposing) + { + if (baseAddress != null) + { + if (handle.IsAllocated) + handle.Free(); + baseAddress = null; + buffer = null; + length = 0; + syncRoot = null; + } + } + + /// + /// Throws an if + /// this instance is disposed. + /// + protected virtual void EnsureNotDisposed() + { + if (baseAddress == null) + throw new ObjectDisposedException("This instance is disposed."); + } + + /// + /// Tests whether the specified structure is equivalent to this + /// structure. + /// + /// The structure to test. + /// true if is a + /// instance equivalent to this structure; otherwise, + /// false. + public override bool Equals(object obj) + { + EnsureNotDisposed(); + return ((obj is MemoryArray) && Equals((MemoryArray)obj)); + } + + /// + /// Tests whether the specified structure is equivalent to this + /// structure. + /// + /// The structure to test. + /// true if is equivalent to this + /// structure; otherwise, + /// false. + public bool Equals(MemoryArray other) + { + EnsureNotDisposed(); + return ((this.baseAddress == other.baseAddress) && (this.length == other.length)); + } + + /// + /// Serves as a hash function for a particular type. + /// + /// A hash code for the current . + public override int GetHashCode() + { + EnsureNotDisposed(); + return (int)baseAddress ^ length; + } + + /// + /// Copies a block of memory from one location to another. + /// + /// Pointer to the starting address of the copy destination. + /// Pointer to the starting address of the block of memory to be copied. + /// Size of the block of memory to copy, in bytes. + protected static unsafe void CopyMemory(byte* dest, byte* src, int len) + { + if (len >= 0x10) + { + do + { + *((int*)dest) = *((int*)src); + *((int*)(dest + 4)) = *((int*)(src + 4)); + *((int*)(dest + 8)) = *((int*)(src + 8)); + *((int*)(dest + 12)) = *((int*)(src + 12)); + dest += 0x10; + src += 0x10; + } + while ((len -= 0x10) >= 0x10); + } + if (len > 0) + { + if ((len & 8) != 0) + { + *((int*)dest) = *((int*)src); + *((int*)(dest + 4)) = *((int*)(src + 4)); + dest += 8; + src += 8; + } + if ((len & 4) != 0) + { + *((int*)dest) = *((int*)src); + dest += 4; + src += 4; + } + if ((len & 2) != 0) + { + *((short*)dest) = *((short*)src); + dest += 2; + src += 2; + } + if ((len & 1) != 0) + { + *dest = *src; + } + } + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModel.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModel.cs new file mode 100644 index 0000000..c7ad248 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModel.cs @@ -0,0 +1,941 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.8 $ +// $Date: 2009/02/27 16:34:31 $ +// $Id: MetadataModel.cs,v 1.8 2009/02/27 16:34:31 cklein05 Exp $ +// ========================================================== + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Diagnostics; + +namespace FreeImageAPI.Metadata +{ + /// + /// Base class that represents a collection of all tags contained in a metadata model. + /// + /// + /// The MetedataModel class is an abstract base class, which is inherited by + /// several derived classes, one for each existing metadata model. + /// + public abstract class MetadataModel : IEnumerable + { + /// + /// Handle to the encapsulated FreeImage-bitmap. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected readonly FIBITMAP dib; + + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + /// + /// is null. + protected MetadataModel(FIBITMAP dib) + { + if (dib.IsNull) + { + throw new ArgumentNullException("dib"); + } + this.dib = dib; + } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public abstract FREE_IMAGE_MDMODEL Model + { + get; + } + + /// + /// Adds new tag to the bitmap or updates its value in case it already exists. + /// will be used as key. + /// + /// The tag to add or update. + /// Returns true on success, false on failure. + /// + /// is null. + /// + /// The tags model differs from this instances model. + public bool AddTag(MetadataTag tag) + { + if (tag == null) + { + throw new ArgumentNullException("tag"); + } + if (tag.Model != Model) + { + throw new ArgumentException("tag.Model"); + } + return tag.AddToImage(dib); + } + + /// + /// Adds a list of tags to the bitmap or updates their values in case they already exist. + /// will be used as key. + /// + /// A list of tags to add or update. + /// Returns the number of successfully added tags. + /// + /// is null. + public int AddTag(IEnumerable list) + { + if (list == null) + { + throw new ArgumentNullException("list"); + } + int count = 0; + foreach (MetadataTag tag in list) + { + if (tag.Model == Model && tag.AddToImage(dib)) + { + count++; + } + } + return count; + } + + /// + /// Removes the specified tag from the bitmap. + /// + /// The key of the tag. + /// Returns true on success, false on failure. + /// + /// is null. + public bool RemoveTag(string key) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + return FreeImage.SetMetadata(Model, dib, key, FITAG.Zero); + } + + /// + /// Destroys the metadata model + /// which will remove all tags of this model from the bitmap. + /// + /// Returns true on success, false on failure. + public bool DestoryModel() + { + return FreeImage.SetMetadata(Model, dib, null, FITAG.Zero); + } + + /// + /// Returns the specified metadata tag. + /// + /// The key of the tag. + /// The metadata tag. + /// + /// is null. + public MetadataTag GetTag(string key) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + MetadataTag tag; + return FreeImage.GetMetadata(Model, dib, key, out tag) ? tag : null; + } + + /// + /// Returns whether the specified tag exists. + /// + /// The key of the tag. + /// True in case the tag exists, else false. + /// + /// is null. + public bool TagExists(string key) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + MetadataTag tag; + return FreeImage.GetMetadata(Model, dib, key, out tag); + } + + /// + /// Returns a list of all metadata tags this instance represents. + /// + public List List + { + get + { + List list = new List((int)FreeImage.GetMetadataCount(Model, dib)); + MetadataTag tag; + FIMETADATA mdHandle = FreeImage.FindFirstMetadata(Model, dib, out tag); + if (!mdHandle.IsNull) + { + do + { + list.Add(tag); + } + while (FreeImage.FindNextMetadata(mdHandle, out tag)); + FreeImage.FindCloseMetadata(mdHandle); + } + return list; + } + } + + /// + /// Returns the tag at the given index. + /// + /// Index of the tag to return. + /// The tag at the given index. + protected MetadataTag GetTagFromIndex(int index) + { + if (index >= Count || index < 0) + { + throw new ArgumentOutOfRangeException("index"); + } + MetadataTag tag; + int count = 0; + FIMETADATA mdHandle = FreeImage.FindFirstMetadata(Model, dib, out tag); + if (!mdHandle.IsNull) + { + try + { + do + { + if (count++ == index) + { + break; + } + } + while (FreeImage.FindNextMetadata(mdHandle, out tag)); + } + finally + { + FreeImage.FindCloseMetadata(mdHandle); + } + } + return tag; + } + + /// + /// Returns the metadata tag at the given index. This operation is slow when accessing all tags. + /// + /// Index of the tag. + /// The metadata tag. + /// + /// is greater or equal Count + /// or index is less than zero. + public MetadataTag this[int index] + { + get + { + return GetTagFromIndex(index); + } + } + + /// + /// Retrieves an object that can iterate through the individual MetadataTags in this MetadataModel. + /// + /// An for the + /// . + public IEnumerator GetEnumerator() + { + return List.GetEnumerator(); + } + + /// + /// Returns the number of metadata tags this instance represents. + /// + public int Count + { + get { return (int)FreeImage.GetMetadataCount(Model, dib); } + } + + /// + /// Returns whether this model exists in the bitmaps metadata structure. + /// + public bool Exists + { + get + { + return Count > 0; + } + } + + /// + /// Searches for a pattern in each metadata tag and returns the result as a list. + /// + /// The regular expression to use for the search. + /// A bitfield that controls which fields should be searched in. + /// A list containing all found metadata tags. + /// + /// is null. + /// + /// is empty. + public List RegexSearch(string searchPattern, MD_SEARCH_FLAGS flags) + { + if (searchPattern == null) + { + throw new ArgumentNullException("searchString"); + } + if (searchPattern.Length == 0) + { + throw new ArgumentException("searchString is empty"); + } + List result = new List(Count); + Regex regex = new Regex(searchPattern); + List list = List; + foreach (MetadataTag tag in list) + { + if (((flags & MD_SEARCH_FLAGS.KEY) > 0) && regex.Match(tag.Key).Success) + { + result.Add(tag); + continue; + } + if (((flags & MD_SEARCH_FLAGS.DESCRIPTION) > 0) && regex.Match(tag.Description).Success) + { + result.Add(tag); + continue; + } + if (((flags & MD_SEARCH_FLAGS.TOSTRING) > 0) && regex.Match(tag.ToString()).Success) + { + result.Add(tag); + continue; + } + } + result.Capacity = result.Count; + return result; + } + + /// + /// Returns the value of the specified tag. + /// + /// Type of the tag's data. + /// The key of the tag. + /// The value of the specified tag. + protected T? GetTagValue(string key) where T : struct + { + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("key"); + } + MetadataTag tag = GetTag(key); + if (tag != null) + { + T[] value = tag.Value as T[]; + if ((value != null) && (value.Length != 0)) + { + return value[0]; + } + } + return null; + } + + /// + /// Returns an array containing the data of the specified tag. + /// + /// The type of the tag's data. + /// The key of the tag. + /// An array containing the data of the specified tag. + protected T[] GetTagArray(string key) where T : struct + { + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("key"); + } + MetadataTag tag = GetTag(key); + return (tag == null) ? null : tag.Value as T[]; + } + + /// + /// Returns the string contained by the specified tag. + /// + /// The key of the tag. + /// The string contained by the specified tag. + protected string GetTagText(string key) + { + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("key"); + } + MetadataTag tag = GetTag(key); + return (tag == null) ? null : tag.Value as string; + } + + /// + /// Returns an array containg the data of the specified tag + /// as unsigned 32bit integer. + /// + /// The key of the tag. + /// An array containg the data of the specified tag + /// as unsigned 32bit integer. + protected uint[] GetUInt32Array(string key) + { + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("key"); + } + uint[] result = null; + MetadataTag tag = GetTag(key); + if (tag != null) + { + object value = tag.Value; + if (value != null) + { + if (value is ushort[]) + { + ushort[] array = (ushort[])value; + result = new uint[array.Length]; + for (int i = 0, j = array.Length; i < j; i++) + { + result[i] = (uint)array[i]; + } + } + else if (value is uint[]) + { + result = (uint[])value; + } + } + } + return result; + } + + /// + /// Returns the value of the tag as unsigned 32bit integer. + /// + /// The key of the tag. + /// The value of the tag as unsigned 32bit integer. + protected uint? GetUInt32Value(string key) + { + uint[] value = GetUInt32Array(key); + return value == null ? default(uint?) : value[0]; + } + + /// + /// Sets the value of the specified tag. + /// + /// The type of the tag's data. + /// The key of the tag. + /// The new value of the specified tag or null. + protected void SetTagValue(string key, T? value) where T : struct + { + SetTagValue(key, value.HasValue ? new T[] { value.Value } : null); + } + + /// + /// Sets the value of the specified tag. + /// + /// The key of the tag. + /// The new value of the specified tag or null. + protected void SetTagValue(string key, object value) + { + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("key"); + } + if (value == null) + { + RemoveTag(key); + } + else + { + MetadataTag tag = GetTag(key); + if (tag == null) + { + tag = new MetadataTag(Model); + tag.Key = key; + tag.Value = value; + AddTag(tag); + } + else + { + tag.Value = value; + } + } + } + + /// + /// Sets the value of the specified tag as undefined. + /// + /// The key of the tag. + /// The new value of the specified tag or null. + protected void SetTagValueUndefined(string key, byte[] value) + { + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("key"); + } + if (value == null) + { + RemoveTag(key); + } + else + { + MetadataTag tag = GetTag(key); + if (tag == null) + { + tag = new MetadataTag(Model); + tag.Key = key; + tag.SetValue(value, FREE_IMAGE_MDTYPE.FIDT_UNDEFINED); + AddTag(tag); + } + else + { + tag.Value = value; + } + } + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The string containing the . + /// The equivalent for the + /// specified . + protected static DirectionReference? ToDirectionType(string s) + { + if (string.IsNullOrEmpty(s)) + return null; + switch (s[0]) + { + case 'T': + return DirectionReference.TrueDirection; + case 'M': + return DirectionReference.MagneticDirection; + default: + return DirectionReference.Undefined; + } + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The to convert. + /// The equivalent for the + /// specified . + protected static string ToString(DirectionReference? type) + { + if (type.HasValue) + { + switch (type.Value) + { + case DirectionReference.TrueDirection: + return "T"; + case DirectionReference.MagneticDirection: + return "M"; + default: + return "\0"; + } + } + return null; + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The string containing the . + /// The equivalent for the + /// specified . + protected static VelocityUnit? ToUnitType(string s) + { + if (string.IsNullOrEmpty(s)) + return null; + switch (s[0]) + { + case 'K': + return VelocityUnit.Kilometers; + case 'M': + return VelocityUnit.Miles; + case 'N': + return VelocityUnit.Knots; + default: + return VelocityUnit.Undefinied; + } + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The to convert. + /// The equivalent for the + /// specified . + protected static string ToString(VelocityUnit? type) + { + if (type.HasValue) + { + switch (type.Value) + { + case VelocityUnit.Kilometers: + return "K"; + case VelocityUnit.Miles: + return "M"; + case VelocityUnit.Knots: + return "N"; + default: + return "\0"; + } + } + return null; + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The string containing the . + /// The equivalent for the + /// specified . + protected static LongitudeType? ToLongitudeType(string s) + { + if (string.IsNullOrEmpty(s)) + return null; + switch (s[0]) + { + case 'E': + return LongitudeType.East; + case 'W': + return LongitudeType.West; + default: + return LongitudeType.Undefined; + } + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The to convert. + /// The equivalent for the + /// specified . + protected static string ToString(LongitudeType? type) + { + if (type.HasValue) + { + switch (type.Value) + { + case LongitudeType.East: + return "E"; + case LongitudeType.West: + return "W"; + default: + return "\0"; + } + } + return null; + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The string containing the . + /// The equivalent for the + /// specified . + protected static LatitudeType? ToLatitudeType(string s) + { + if (string.IsNullOrEmpty(s)) + return null; + switch (s[0]) + { + case 'N': + return LatitudeType.North; + case 'S': + return LatitudeType.South; + default: + return LatitudeType.Undefined; + } + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The to convert. + /// The equivalent for the + /// specified . + protected static string ToString(LatitudeType? type) + { + if (type.HasValue) + { + switch (type.Value) + { + case LatitudeType.North: + return "N"; + case LatitudeType.South: + return "S"; + default: + return "\0"; + } + } + return null; + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The string containing the . + /// The equivalent for the + /// specified . + protected static InteroperabilityMode? ToInteroperabilityType(string s) + { + if (string.IsNullOrEmpty(s)) + return null; + if (s.StartsWith("R98")) + return InteroperabilityMode.R98; + if (s.StartsWith("THM")) + return InteroperabilityMode.THM; + return InteroperabilityMode.Undefined; + } + + /// + /// Returns the equivalent for the + /// specified . + /// + /// The to convert. + /// The equivalent for the + /// specified . + protected static string ToString(InteroperabilityMode? type) + { + if (type.HasValue) + { + switch (type.Value) + { + case InteroperabilityMode.R98: + return "R98"; + case InteroperabilityMode.THM: + return "THM"; + default: + return "\0\0\0"; + } + } + return null; + } + + /// + /// Specified different unit types. + /// + public enum VelocityUnit + { + /// + /// No or unknown type. + /// + Undefinied, + + /// + /// Kilometers per hour. + /// + Kilometers, + + /// + /// Miles per hour. + /// + Miles, + + /// + /// Knots. + /// + Knots, + } + + /// + /// Specifies different direction types. + /// + public enum DirectionReference + { + /// + /// No or unknown direction type. + /// + Undefined, + + /// + /// True direction. + /// + TrueDirection, + + /// + /// Magnatic direction. + /// + MagneticDirection, + } + + /// + /// Specifies the type of a latitude value. + /// + public enum LatitudeType + { + /// + /// No or unknown type. + /// + Undefined, + + /// + /// North. + /// + North, + + /// + /// South. + /// + South, + } + + /// + /// Specifies the type of a longitude value. + /// + public enum LongitudeType + { + /// + /// No or unknown type. + /// + Undefined, + + /// + /// East. + /// + East, + + /// + /// West. + /// + West, + } + + /// + /// Specifies different altitude types. + /// + public enum AltitudeType + { + /// + /// No or unknown type. + /// + Undefined, + + /// + /// East. + /// + AboveSeaLevel, + + /// + /// West. + /// + BelowSeaLevel, + } + + /// + /// Specifies interoperability types. + /// + public enum InteroperabilityMode + { + /// + /// No or unknown type. + /// + Undefined, + + /// + /// Indicates a file conforming to R98 file specification of Recommended + /// Exif Interoperability Rules (ExifR98) or to DCF basic file stipulated + /// by Design Rule for Camera File System. + /// + R98, + + /// + /// Indicates a file conforming to DCF thumbnail file stipulated by Design + /// rule for Camera File System. + /// + THM, + } + + /// + /// Specifies orientation of images. + /// + public enum ExifImageOrientation : ushort + { + /// + /// Undefinied orientation. + /// + Undefined, + + /// + /// TopLeft. + /// + TopLeft = 1, + + /// + /// TopRight. + /// + TopRight, + + /// + /// BottomRight. + /// + BottomRight, + + /// + /// BottomLeft. + /// + BottomLeft, + + /// + /// LeftTop. + /// + LeftTop, + + /// + /// RightTop. + /// + RightTop, + + /// + /// RightBottom. + /// + RightBottom, + + /// + /// LeftBottom. + /// + LeftBottom, + } + + /// + /// Converts the model of the MetadataModel object to its equivalent string representation. + /// + /// The string representation of the value of this instance. + public override string ToString() + { + return Model.ToString(); + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs new file mode 100644 index 0000000..4cd2835 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs @@ -0,0 +1,6724 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.6 $ +// $Date: 2009/09/15 11:49:24 $ +// $Id: MetadataModels.cs,v 1.6 2009/09/15 11:49:24 cklein05 Exp $ +// ========================================================== + +using System; +using System.Xml; +using System.IO; +using System.Text; + +namespace FreeImageAPI.Metadata +{ + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_ANIMATION : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_ANIMATION(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_ANIMATION; } + } + + /// + /// Gets or sets the width of the entire canvas area, that each page is displayed in. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? LogicalWidth + { + get + { + return GetTagValue("LogicalWidth"); + } + set + { + SetTagValue("LogicalWidth", value); + } + } + + /// + /// Gets or sets the height of the entire canvas area, that each page is displayed in. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? LogicalHeight + { + get + { + return GetTagValue("LogicalHeight"); + } + set + { + SetTagValue("LogicalHeight", value); + } + } + + /// + /// Gets or sets the global palette of the GIF image. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public Palette GlobalPalette + { + get + { + MetadataTag mdtag = GetTag("GlobalPalette"); + return (mdtag == null) ? null : new Palette(mdtag); + } + set + { + SetTagValue("GlobalPalette", (value != null) ? null : value.Data); + } + } + + /// + /// Gets or sets the number of replays for the animation. + /// Use 0 (zero) to specify an infinte number of replays. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? LoopCount + { + get + { + return GetTagValue("Loop"); + } + set + { + SetTagValue("Loop", value); + } + } + + /// + /// Gets or sets the horizontal offset within the logical canvas area, this frame is to be displayed at. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? FrameLeft + { + get + { + return GetTagValue("FrameLeft"); + } + set + { + SetTagValue("FrameLeft", value); + } + } + + /// + /// Gets or sets the vertical offset within the logical canvas area, this frame is to be displayed at. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? FrameTop + { + get + { + return GetTagValue("FrameTop"); + } + set + { + SetTagValue("FrameTop", value); + } + } + + /// + /// Gets or sets a flag to supress saving the dib's attached palette + /// (making it use the global palette). The local palette is the palette used by a page. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public bool? NoLocalPalette + { + get + { + byte? useGlobalPalette = GetTagValue("NoLocalPalette"); + return useGlobalPalette.HasValue ? (useGlobalPalette.Value != 0) : default(bool?); + } + set + { + byte? val = null; + if (value.HasValue) + { + val = (byte)(value.Value ? 1 : 0); + } + SetTagValue("NoLocalPalette", val); + } + } + + /// + /// Gets or sets a value indicating whether the image is interlaced. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public bool? Interlaced + { + get + { + byte? useGlobalPalette = GetTagValue("Interlaced"); + return useGlobalPalette.HasValue ? (useGlobalPalette.Value != 0) : default(bool?); + } + set + { + byte? val = null; + if (value.HasValue) + { + val = (byte)(value.Value ? 1 : 0); + } + SetTagValue("Interlaced", val); + } + } + + /// + /// Gets or sets the amout of time in milliseconds this frame is to be displayed. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? FrameTime + { + get + { + return GetTagValue("FrameTime"); + } + set + { + SetTagValue("FrameTime", value); + } + } + + /// + /// Gets or sets this frame's disposal method. Generally, this method defines, how to + /// remove or replace a frame when the next frame has to be drawn. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public DisposalMethodType? DisposalMethod + { + get + { + return GetTagValue("DisposalMethod"); + } + set + { + SetTagValue("DisposalMethod", value); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_COMMENTS : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_COMMENTS(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_COMMENTS; } + } + + /// + /// Gets or sets the comment of the image. + /// Supported formats are JPEG, PNG and GIF. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Comment + { + get + { + return GetTagText("Comment"); + } + set + { + SetTagValue("Comment", value); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_CUSTOM : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_CUSTOM(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_CUSTOM; } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_EXIF_EXIF : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_EXIF_EXIF(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_EXIF; } + } + + /// + /// Gets or sets the version of this standard supported. + /// Constant length or 4. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] ExifVersion + { + get + { + return GetTagArray("ExifVersion"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValueUndefined("ExifVersion", value); + } + } + + /// + /// Gets or sets the Flashpix format version supported by a FPXR file. + /// Constant length or 4. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] FlashpixVersion + { + get + { + return GetTagArray("FlashpixVersion"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValueUndefined("FlashpixVersion", value); + } + } + + /// + /// Gets or sets the color space information tag. + /// See remarks for further information. + /// + /// + /// The following values are defined: + /// + /// + /// ID + /// Description + /// + /// + /// 1 + /// sRGB (default) + /// + /// + /// 0xFFFF + /// uncalibrated + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? ColorSpace + { + get + { + return GetTagValue("ColorSpace"); + } + set + { + SetTagValue("ColorSpace", value); + } + } + + /// + /// Gets or sets the valid width of a compressed image. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? PixelXDimension + { + get + { + return GetUInt32Value("PixelXDimension"); + } + set + { + RemoveTag("PixelXDimension"); + if (value.HasValue) + { + SetTagValue("PixelXDimension", value.Value); + } + } + } + + /// + /// Gets or sets the valid height of a compressed image. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? PixelYDimension + { + get + { + return GetUInt32Value("PixelYDimension"); + } + set + { + RemoveTag("PixelYDimension"); + if (value.HasValue) + { + SetTagValue("PixelYDimension", value.Value); + } + } + } + + /// + /// Gets or sets components configuration. See remarks for further information. + /// Constant length of 4. + /// + /// + /// The channels of each component are arranged in order from the 1st component to the 4th. + /// For uncompressed data the data arrangement is given in the PhotometricInterpretation tag. + /// However, since PhotometricInterpretation can only express the order of Y,Cb and Cr, + /// this tag is provided for cases when compressed data uses components other than Y, Cb, + /// and Cr and to enable support of other sequences. + /// Default = 4 5 6 0 (if RGB uncompressed) + /// The following values are defined: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// does not exist + /// + /// + /// 1 + /// Y + /// + /// + /// 2 + /// Cb + /// + /// + /// 3 + /// Cr + /// + /// + /// 4 + /// R + /// + /// + /// 5 + /// R + /// + /// + /// 6 + /// R + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] ComponentsConfiguration + { + get + { + return GetTagArray("ComponentsConfiguration"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValueUndefined("ComponentsConfiguration", value); + } + } + + /// + /// Gets or sets compression mode used for a compressed image is indicated + /// in unit bits per pixel. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? CompressedBitsPerPixel + { + get + { + return GetTagValue("CompressedBitsPerPixel"); + } + set + { + SetTagValue("CompressedBitsPerPixel", value); + } + } + + /// + /// Gets or sets a tag for manufacturers of Exif writers to record any desired information. + /// The contents are up to the manufacturer, but this tag should not be used for any other + /// than its intended purpose. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] MakerNote + { + get + { + return GetTagArray("FlashpixVersion"); + } + set + { + SetTagValueUndefined("FlashpixVersion", value); + } + } + + /// + /// Gets or sets a tag for Exif users to write keywords or comments on the image besides + /// those in ImageDescription, and without the character code limitations of the ImageDescription tag. + /// Minimum length of 8. See remarks for further information. + /// + /// + /// The character code used in the UserComment tag is identified based on an ID code in a fixed 8-byte + /// area at the start of the tag data area. The unused portion of the area is padded with NULL. + /// The ID code for the UserComment area may be a Defined code such as JIS or ASCII, or may be Undefined. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] UserComment + { + get + { + return GetTagArray("UserComment"); + } + set + { + FreeImage.Resize(ref value, 8, int.MaxValue); + SetTagValueUndefined("UserComment", value); + } + } + + /// + /// Gets or sets the name of an audio file related to the image data. + /// The format is 8.3. + /// Constant length of 12 + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string RelatedSoundFile + { + get + { + string text = GetTagText("RelatedSoundFile"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + FreeImage.Resize(ref value, 12); + value += '\0'; + } + SetTagValue("RelatedSoundFile", value); + } + } + + /// + /// Gets or sets the date and time when the original image data was generated. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public DateTime? DateTimeOriginal + { + get + { + DateTime? result = null; + string text = GetTagText("DateTimeOriginal"); + if (text != null) + { + try + { + result = System.DateTime.ParseExact(text, "yyyy:MM:dd HH:mm:ss\0", null); + } + catch + { + } + } + return result; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd HH:mm:ss\0"); + } + catch + { + } + } + SetTagValue("DateTimeOriginal", val); + } + } + + /// + /// Gets or sets the date and time when the image was stored as digital data. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public DateTime? DateTimeDigitized + { + get + { + DateTime? result = null; + string text = GetTagText("DateTimeDigitized"); + if (text != null) + { + try + { + result = System.DateTime.ParseExact(text, "yyyy:MM:dd HH:mm:ss\0", null); + } + catch + { + } + } + return result; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd HH:mm:ss\0"); + } + catch + { + } + } + SetTagValue("DateTimeDigitized", val); + } + } + + /// + /// Gets or sets a tag used to record fractions of seconds for the DateTime tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SubsecTime + { + get + { + string text = GetTagText("SubsecTime"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SubsecTime", value); + } + } + + /// + /// Gets or sets a tag used to record fractions of seconds for the DateTimeOriginal tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SubsecTimeOriginal + { + get + { + string text = GetTagText("SubsecTimeOriginal"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SubsecTimeOriginal", value); + } + } + + /// + /// Gets or sets a tag used to record fractions of seconds for the DateTimeDigitized tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SubsecTimeDigitized + { + get + { + string text = GetTagText("SubsecTimeDigitized"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SubsecTimeDigitized", value); + } + } + + /// + /// Gets or the exposure time, given in seconds (sec). + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? ExposureTime + { + get + { + return GetTagValue("ExposureTime"); + } + set + { + SetTagValue("ExposureTime", value); + } + } + + /// + /// Gets or the F number. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? FNumber + { + get + { + return GetTagValue("FNumber"); + } + set + { + SetTagValue("FNumber", value); + } + } + + /// + /// Gets or sets the class of the program used by the camera to set exposure when the + /// picture is taken. + /// See remarks for further information. + /// + /// + /// The following values are defined: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// not defined + /// + /// + /// 1 + /// manual + /// + /// + /// 2 + /// normal program + /// + /// + /// 3 + /// aperture priority + /// + /// + /// 4 + /// shutter priority + /// + /// + /// 5 + /// create program + /// + /// + /// 6 + /// action program + /// + /// + /// 7 + /// portrait mode + /// + /// + /// 8 + /// landscape mode + /// + /// + /// others + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? ExposureProgram + { + get + { + return GetTagValue("ExposureProgram"); + } + set + { + SetTagValue("ExposureProgram", value); + } + } + + /// + /// Gets or sets the spectral sensitivity of each channel of the camera used. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SpectralSensitivity + { + get + { + string text = GetTagText("SpectralSensitivity"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SpectralSensitivity", value); + } + } + + /// + /// Gets or sets the the ISO Speed and ISO Latitude of the camera or input device as + /// specified in ISO 12232. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort[] ISOSpeedRatings + { + get + { + return GetTagArray("ISOSpeedRatings"); + } + set + { + SetTagValue("ISOSpeedRatings", value); + } + } + + /// + /// Gets or sets the Opto-Electric Conversion Function (OECF) specified in ISO 14524. + /// OECF is the relationship between the camera optical input and the image values. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] OECF + { + get + { + return GetTagArray("OECF"); + } + set + { + SetTagValueUndefined("OECF", value); + } + } + + /// + /// Gets or sets the shutter speed. The unit is the APEX (Additive System of Photographic Exposure). + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIRational? ShutterSpeedValue + { + get + { + return GetTagValue("ShutterSpeedValue"); + } + set + { + SetTagValue("ShutterSpeedValue", value); + } + } + + /// + /// Gets or sets the lens aperture. The unit is the APEX value. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? ApertureValue + { + get + { + return GetTagValue("ApertureValue"); + } + set + { + SetTagValue("ApertureValue", value); + } + } + + /// + /// Gets or sets the value of brightness. The unit is the APEX value. + /// Ordinarily it is given in the range of -99.99 to 99.99. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIRational? BrightnessValue + { + get + { + return GetTagValue("BrightnessValue"); + } + set + { + SetTagValue("BrightnessValue", value); + } + } + + /// + /// Gets or sets the exposure bias. The unit is the APEX value. + /// Ordinarily it is given in the range of –99.99 to 99.99. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIRational? ExposureBiasValue + { + get + { + return GetTagValue("ExposureBiasValue"); + } + set + { + SetTagValue("ExposureBiasValue", value); + } + } + + /// + /// Gets or sets the smallest F number of the lens. The unit is the APEX value. + /// Ordinarily it is given in the range of 00.00 to 99.99, + /// but it is not limited to this range. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? MaxApertureValue + { + get + { + return GetTagValue("MaxApertureValue"); + } + set + { + SetTagValue("MaxApertureValue", value); + } + } + + /// + /// Gets or sets distance to the subject, given in meters. + /// Note that if the numerator of the recorded value is FFFFFFFF, infinity shall be indicated; + /// and if the numerator is 0, distance unknown shall be indicated. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? SubjectDistance + { + get + { + return GetTagValue("SubjectDistance"); + } + set + { + SetTagValue("SubjectDistance", value); + } + } + + /// + /// Gets or sets the metering mode. See remarks for further information. + /// + /// + /// The following values are defined: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// unknown + /// + /// + /// 1 + /// average + /// + /// + /// 2 + /// center-weighted-average + /// + /// + /// 3 + /// spot + /// + /// + /// 4 + /// multi-spot + /// + /// + /// 5 + /// pattern + /// + /// + /// 6 + /// partial + /// + /// + /// other + /// reserved + /// + /// + /// 255 + /// other + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? MeteringMode + { + get + { + return GetTagValue("MeteringMode"); + } + set + { + SetTagValue("MeteringMode", value); + } + } + + /// + /// Gets or sets the kind of light source. + /// See remarks for further information. + /// + /// + /// The following values are defined: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// unknown + /// + /// + /// 1 + /// daylight + /// + /// + /// 2 + /// fluorescent + /// + /// + /// 3 + /// tungsten + /// + /// + /// 4 + /// flash + /// + /// + /// 9 + /// fine weather + /// + /// + /// 10 + /// cloudy weather + /// + /// + /// 11 + /// shade + /// + /// + /// 12 + /// daylight fluorecent (D 5700 - 7100K) + /// + /// + /// 13 + /// day white fluorescent (N 4600 - 5400K) + /// + /// + /// 14 + /// cool white fluorescent (W 3900 - 4500K) + /// + /// + /// 15 + /// white fluorescent (WW 3200 - 3700K) + /// + /// + /// 17 + /// standard light A + /// + /// + /// 18 + /// standard light B + /// + /// + /// 19 + /// standard light C + /// + /// + /// 20 + /// D55 + /// + /// + /// 21 + /// D65 + /// + /// + /// 22 + /// D75 + /// + /// + /// 23 + /// D50 + /// + /// + /// 24 + /// ISO studio tungsten + /// + /// + /// 255 + /// other light source + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? LightSource + { + get + { + return GetTagValue("LightSource"); + } + set + { + SetTagValue("LightSource", value); + } + } + + /// + /// Gets or sets a value indicating the status of flash when the image was shot. + /// Bit 0 indicates the flash firing status, bits 1 and 2 indicate the flash return + /// status, bits 3 and 4 indicate the flash mode, bit 5 indicates whether the flash + /// function is present, and bit 6 indicates "red eye" mode. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? Flash + { + get + { + return GetTagValue("Flash"); + } + set + { + SetTagValue("Flash", value); + } + } + + /// + /// Gets or sets a value indicating the location and area of the main subject in + /// the overall scene. Variable length between 2 and 4. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort[] SubjectArea + { + get + { + return GetTagArray("SubjectArea"); + } + set + { + FreeImage.Resize(ref value, 2, 4); + SetTagValue("SubjectArea", value); + } + } + + /// + /// Gets or sets the actual focal length of the lens, in mm. + /// Conversion is not made to the focal length of a 35 mm film camera. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? FocalLength + { + get + { + return GetTagValue("FocalLength"); + } + set + { + SetTagValue("FocalLength", value); + } + } + + /// + /// Gets or sets the strobe energy at the time the image is captured, + /// as measured in Beam Candle Power Seconds (BCPS). + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? FlashEnergy + { + get + { + return GetTagValue("FlashEnergy"); + } + set + { + SetTagValue("FlashEnergy", value); + } + } + + /// + /// Gets or sets the camera or input device spatial frequency table and SFR values + /// in the direction of image width, image height, and diagonal direction, + /// as specified in ISO 12233. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] SpatialFrequencyResponse + { + get + { + return GetTagArray("SpatialFrequencyResponse"); + } + set + { + SetTagValueUndefined("SpatialFrequencyResponse", value); + } + } + + /// + /// Gets or sets the number of pixels in the image width (X) direction per + /// FocalPlaneResolutionUnit on the camera focal plane. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? FocalPlaneXResolution + { + get + { + return GetTagValue("FocalPlaneXResolution"); + } + set + { + SetTagValue("FocalPlaneXResolution", value); + } + } + + /// + /// Gets or sets the number of pixels in the image height (Y) direction per + /// FocalPlaneResolutionUnit on the camera focal plane. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? FocalPlaneYResolution + { + get + { + return GetTagValue("FocalPlaneYResolution"); + } + set + { + SetTagValue("FocalPlaneYResolution", value); + } + } + + /// + /// Gets or sets the unit for measuring FocalPlaneXResolution and FocalPlaneYResolution. + /// This value is the same as the ResolutionUnit. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? FocalPlaneResolutionUnit + { + get + { + return GetTagValue("FocalPlaneResolutionUnit"); + } + set + { + SetTagValue("FocalPlaneResolutionUnit", value); + } + } + + /// + /// Gets or sets the location of the main subject in the scene. + /// The value of this tag represents the pixel at the center of the main subject + /// relative to the left edge, prior to rotation processing as per the Rotation tag. + /// The first value indicates the X column number and second indicates the Y row number. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? SubjectLocation + { + get + { + return GetTagValue("SubjectLocation"); + } + set + { + SetTagValue("SubjectLocation", value); + } + } + + /// + /// Gets or sets the exposure index selected on the camera or input device at the + /// time the image was captured. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? ExposureIndex + { + get + { + return GetTagValue("ExposureIndex"); + } + set + { + SetTagValue("ExposureIndex", value); + } + } + + /// + /// Gets or sets the image sensor type on the camera or input device. + /// See remarks for further information. + /// + /// + /// The following values are defined: + /// + /// + /// ID + /// Description + /// + /// + /// 1 + /// not defined + /// + /// + /// 2 + /// one-chip color area sensor + /// + /// + /// 3 + /// two-chip color area sensor + /// + /// + /// 4 + /// three-chip color area sensor + /// + /// + /// 5 + /// color sequential area sensor + /// + /// + /// 7 + /// trilinear sensor + /// + /// + /// 8 + /// color sequential linear sensor + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? SensingMethod + { + get + { + return GetTagValue("SensingMethod"); + } + set + { + SetTagValue("SensingMethod", value); + } + } + + /// + /// Gets or sets the image source. If a DSC recorded the image, this tag value of this + /// tag always be set to 3, indicating that the image was recorded on a DSC. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte? FileSource + { + get + { + return GetTagValue("FileSource"); + } + set + { + SetTagValueUndefined("FileSource", value.HasValue ? new byte[] { value.Value } : null); + } + } + + /// + /// Gets or sets the type of scene. If a DSC recorded the image, this tag value shall + /// always be set to 1, indicating that the image was directly photographed. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte? SceneType + { + get + { + return GetTagValue("SceneType"); + } + set + { + SetTagValueUndefined("SceneType", value.HasValue ? new byte[] { value.Value } : null); + } + } + + /// + /// Gets or sets the color filter array (CFA) geometric pattern of the image sensor + /// when a one-chip color area sensor is used. It does not apply to all sensing methods. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] CFAPattern + { + get + { + return GetTagArray("CFAPattern"); + } + set + { + SetTagValueUndefined("CFAPattern", value); + } + } + + /// + /// Gets or sets the use of special processing on image data, such as rendering geared to output. + /// When special processing is performed, the reader is expected to disable or minimize any + /// further processing. See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// normal process + /// + /// + /// 1 + /// custom process + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? CustomRendered + { + get + { + return GetTagValue("CustomRendered"); + } + set + { + SetTagValue("CustomRendered", value); + } + } + + /// + /// Gets or sets the exposure mode set when the image was shot. + /// In auto-bracketing mode, the camera shoots a series of frames of the same scene + /// at different exposure settings. See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// auto exposure + /// + /// + /// 1 + /// manual exposure + /// + /// + /// 2 + /// auto bracket + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? ExposureMode + { + get + { + return GetTagValue("ExposureMode"); + } + set + { + SetTagValue("ExposureMode", value); + } + } + + /// + /// Gets or sets the white balance mode set when the image was shot. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// auto white balance + /// + /// + /// 1 + /// manual white balance + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? WhiteBalance + { + get + { + return GetTagValue("WhiteBalance"); + } + set + { + SetTagValue("WhiteBalance", value); + } + } + + /// + /// Gets or sets the digital zoom ratio when the image was shot. + /// If the numerator of the recorded value is 0, this indicates that digital zoom was not used. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? DigitalZoomRatio + { + get + { + return GetTagValue("DigitalZoomRatio"); + } + set + { + SetTagValue("DigitalZoomRatio", value); + } + } + + /// + /// Gets or sets the equivalent focal length assuming a 35mm film camera, in mm. + /// A value of 0 means the focal length is unknown. Note that this tag differs + /// from the FocalLength tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? FocalLengthIn35mmFilm + { + get + { + return GetTagValue("DigitalZoomRatio"); + } + set + { + SetTagValue("DigitalZoomRatio", value); + } + } + + /// + /// Gets or sets the type of scene that was shot. + /// It can also be used to record the mode in which the image was shot. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// standard + /// + /// + /// 1 + /// landscape + /// + /// + /// 2 + /// portrait + /// + /// + /// 3 + /// night scene + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? SceneCaptureType + { + get + { + return GetTagValue("SceneCaptureType"); + } + set + { + SetTagValue("SceneCaptureType", value); + } + } + + /// + /// Gets or sets the degree of overall image gain adjustment. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// none + /// + /// + /// 1 + /// low gain up + /// + /// + /// 2 + /// high gain up + /// + /// + /// 3 + /// low gain down + /// + /// + /// 4 + /// high gain down + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? GainControl + { + get + { + return GetTagValue("GainControl"); + } + set + { + SetTagValue("GainControl", value); + } + } + + /// + /// Gets or sets the direction of contrast processing applied by the camera + /// when the image was shot. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// normal + /// + /// + /// 1 + /// soft + /// + /// + /// 2 + /// hard + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? Contrast + { + get + { + return GetTagValue("Contrast"); + } + set + { + SetTagValue("Contrast", value); + } + } + + /// + /// Gets or sets the direction of saturation processing applied by the camera + /// when the image was shot. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// normal + /// + /// + /// 1 + /// low saturation + /// + /// + /// 2 + /// high saturation + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? Saturation + { + get + { + return GetTagValue("Saturation"); + } + set + { + SetTagValue("Saturation", value); + } + } + + /// + /// Gets or sets the direction of sharpness processing applied by the camera + /// when the image was shot. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// normal + /// + /// + /// 1 + /// soft + /// + /// + /// 2 + /// hard + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? Sharpness + { + get + { + return GetTagValue("Sharpness"); + } + set + { + SetTagValue("Sharpness", value); + } + } + + /// + /// Gets or sets information on the picture-taking conditions of a particular camera model. + /// The tag is used only to indicate the picture-taking conditions in the reader. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] DeviceSettingDescription + { + get + { + return GetTagArray("DeviceSettingDescription"); + } + set + { + SetTagValueUndefined("DeviceSettingDescription", value); + } + } + + /// + /// Gets or sets the distance to the subject. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 0 + /// unknown + /// + /// + /// 1 + /// macro + /// + /// + /// 2 + /// close view + /// + /// + /// 3 + /// distant view + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? SubjectDistanceRange + { + get + { + return GetTagValue("SubjectDistanceRange"); + } + set + { + SetTagValue("SubjectDistanceRange", value); + } + } + + /// + /// Gets or sets an identifier assigned uniquely to each image. + /// It is recorded as an ASCII string equivalent to hexadecimal notation and 128-bit fixed length. + /// Constant length of 32. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ImageUniqueID + { + get + { + string text = GetTagText("ImageUniqueID"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + FreeImage.Resize(ref value, 32); + value += '\0'; + } + SetTagValue("ImageUniqueID", value); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_EXIF_GPS : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_EXIF_GPS(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_GPS; } + } + + /// + /// Gets or sets the GPS version ID. Constant length of 4. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] VersionID + { + get + { + return GetTagArray("GPSVersionID"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValue("GPSVersionID", value); + } + } + + /// + /// Gets or sets a value indicating whether the + /// is north or south latitude. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public LatitudeType? LatitudeDirection + { + get + { + return ToLatitudeType(GetTagText("GPSLatitudeRef")); + } + set + { + SetTagValue("GPSLatitudeRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the latitude of the image. The latitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational[] Latitude + { + get + { + return GetTagArray("GPSLatitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSLatitude", value); + } + } + + /// + /// Gets or sets a value indicating whether + /// is east or west longitude. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public LongitudeType? LongitudeDirection + { + get + { + return ToLongitudeType(GetTagText("GPSLongitudeRef")); + } + set + { + SetTagValue("GPSLongitudeRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the longitude of the image. The longitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational[] Longitude + { + get + { + return GetTagArray("GPSLongitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSLongitude", value); + } + } + + /// + /// Gets a value indicating whether is sea level and the altitude + /// is above sea level. If the altitude is below sea level is + /// indicated as an absolute value. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public AltitudeType? AltitudeDirection + { + get + { + byte? flag = GetTagValue("GPSAltitudeRef"); + if (flag.HasValue) + { + switch (flag.Value) + { + case 0: + return AltitudeType.AboveSeaLevel; + case 1: + return AltitudeType.BelowSeaLevel; + default: + return AltitudeType.Undefined; + } + } + return null; + } + set + { + byte? val = null; + if (value.HasValue) + { + switch (value.Value) + { + case AltitudeType.AboveSeaLevel: + val = 0; + break; + + case AltitudeType.BelowSeaLevel: + val = 1; + break; + + default: + val = 2; + break; + } + } + SetTagValue("GPSAltitudeRef", val); + } + } + + /// + /// Gets or sets the altitude based on the reference in . + /// Altitude is expressed as one rational value. The reference unit is meters. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? Altitude + { + get + { + return GetTagValue("GPSAltitude"); + } + set + { + SetTagValue("GPSAltitude", value); + } + } + + /// + /// Gets or sets the sign of the . + /// + /// + /// This is a derived property. There is no metadata tag directly associated + /// with this property value. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public int? AltitudeSign + { + get + { + AltitudeType? seaLevel = AltitudeDirection; + if (seaLevel.HasValue) + { + return (seaLevel.Value == AltitudeType.BelowSeaLevel) ? -1 : 1; + } + return null; + } + set + { + if (value.HasValue) + { + AltitudeDirection = value.Value >= 0 ? AltitudeType.AboveSeaLevel : AltitudeType.BelowSeaLevel; + } + else + { + AltitudeDirection = null; + } + } + } + + /// + /// Gets or sets the signed altitude. + /// Altitude is expressed as one rational value. The reference unit is meters. + /// + /// + /// Altitude is too large to fit into a FIRational. + /// + /// + /// This is a derived property. There is no metadata tag directly associated + /// with this property value. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIRational? SignedAltitude + { + get + { + FIRational? result = null; + FIURational? altitude = Altitude; + if (altitude.HasValue) + { + int sign = AltitudeSign ?? 1; + if (((int)altitude.Value.Numerator < 0) || ((int)altitude.Value.Denominator < 0)) + throw new OverflowException(); + result = new FIRational((int)altitude.Value.Numerator * sign, (int)altitude.Value.Denominator); + } + return result; + } + set + { + FIURational? val = null; + if (value.HasValue) + { + if (value.Value < 0) + { + AltitudeSign = -1; + value = -value.Value; + } + else + { + AltitudeSign = 1; + } + val = new FIURational((uint)value.Value.Numerator, (uint)value.Value.Denominator); + } + Altitude = val; + } + } + + + /// + /// Gets or sets the time as UTC (Coordinated Universal Time). Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public TimeSpan? TimeStamp + { + get + { + FIURational[] stamp = GetTagArray("GPSTimeStamp"); + if ((stamp == null) || stamp.Length != 3) + { + return null; + } + else + { + return new TimeSpan((int)stamp[0], (int)stamp[1], (int)stamp[2]); + } + } + set + { + FIURational[] stamp = null; + if (value.HasValue) + { + TimeSpan span = value.Value; + stamp = new FIURational[3]; + stamp[0] = span.Hours; + stamp[1] = span.Minutes; + stamp[2] = span.Seconds; + } + SetTagValue("GPSTimeStamp", stamp); + } + } + + /// + /// Gets or sets the GPS satellites used for measurements. This tag can be used to describe + /// the number of satellites, their ID number, angle of elevation, azimuth, SNR and other + /// information in ASCII notation. The format is not specified. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Satellites + { + get + { + string result = GetTagText("GPSSatellites"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("GPSTimeStamp", value); + } + } + + /// + /// Gets or sets a value indicating the status of the GPS receiver when the image was recorded. + /// true indicates measurement was in progress; + /// false indicates measurement was Interoperability. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public bool? Status + { + get + { + string text = GetTagText("GPSStatus"); + return string.IsNullOrEmpty(text) ? default(bool?) : text[0] == 'A'; + } + set + { + SetTagValue("GPSStatus", value.HasValue ? (value.Value ? "A\0" : "V\0") : null); + } + } + + /// + /// Gets or sets a value indicating the GPS measurement mode. + /// true indicates three-dimensional measurement; + /// false indicated two-dimensional measurement was in progress. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public bool? MeasureMode3D + { + get + { + string text = GetTagText("GPSMeasureMode"); + return string.IsNullOrEmpty(text) ? default(bool?) : text[0] == '3'; + } + set + { + SetTagValue("GPSMeasureMode", value.HasValue ? (value.Value ? "3\0" : "2\0") : null); + } + } + + /// + /// Gets or sets the GPS DOP (data degree of precision). An HDOP value is written during + /// two-dimensional measurement, and PDOP during three-dimensional measurement. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? DOP + { + get + { + return GetTagValue("GPSDOP"); + } + set + { + SetTagValue("GPSDOP", value); + } + } + + /// + /// Gets or sets the unit used to express the GPS receiver of movement. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public VelocityUnit? SpeedUnit + { + get + { + return ToUnitType(GetTagText("GPSSpeedRef")); + } + set + { + SetTagValue("GPSSpeedRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the speed of GPS receiver movement. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational? Speed + { + get + { + return GetTagValue("GPSSpeed"); + } + set + { + SetTagValue("GPSSpeed", value); + } + } + + /// + /// Gets or sets the reference for giving the direction of GPS receiver movement. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public DirectionReference? TrackDirectionReference + { + get + { + return ToDirectionType(GetTagText("GPSTrackRef")); + } + set + { + SetTagValue("GPSTrackRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the direction of GPS receiver movement. + /// The range of values is from 0.00 to 359.99. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational? Track + { + get + { + return GetTagValue("GPSTrack"); + } + set + { + SetTagValue("GPSTrack", value); + } + } + + /// + /// Gets or sets the reference for giving the direction of GPS receiver movement. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public DirectionReference? ImageDirectionReference + { + get + { + return ToDirectionType(GetTagText("GPSImgDirectionRef")); + } + set + { + SetTagValue("GPSImgDirectionRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the direction of the image when it was captured. + /// The range of values is from 0.00 to 359.99. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational? ImageDirection + { + get + { + return GetTagValue("GPSImgDirection"); + } + set + { + SetTagValue("GPSImgDirection", value); + } + } + + /// + /// Gets or sets the geodetic survey data used by the GPS receiver. If the survey data + /// is restricted to Japan, the value of this tag is 'TOKYO' or 'WGS-84'. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string MapDatum + { + get + { + string result = GetTagText("GPSMapDatum"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + SetTagValue("GPSMapDatum", value + '\0'); + } + } + + /// + /// Gets or sets a value indicating whether the destination point + /// is north or south latitude. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public LatitudeType? DestinationLatitudeDirection + { + get + { + return ToLatitudeType(GetTagText("GPSDestLatitudeRef")); + } + set + { + SetTagValue("GPSDestLatitudeRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the latitude of the destination point. The latitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational[] DestinationLatitude + { + get + { + return GetTagArray("GPSDestLatitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSDestLatitude", value); + } + } + + /// + /// Gets or sets a value indicating whether the destination point + /// is east or west longitude. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public LongitudeType? DestinationLongitudeDirection + { + get + { + return ToLongitudeType(GetTagText("GPSDestLongitudeRef")); + } + set + { + SetTagValue("GPSDestLongitudeRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the longitude of the destination point. The longitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational[] DestinationLongitude + { + get + { + return GetTagArray("GPSDestLongitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSDestLongitude", value); + } + } + + /// + /// Gets or sets the reference used for giving the bearing to the destination point. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public DirectionReference? DestinationDirectionReference + { + get + { + return ToDirectionType(GetTagText("GPSDestBearingRef")); + } + set + { + SetTagValue("GPSDestBearingRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets the bearing to the destination point. + /// The range of values is from 0.00 to 359.99. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public FIURational? DestinationBearing + { + get + { + return GetTagValue("GPSDestBearing"); + } + set + { + SetTagValue("GPSDestBearing", value); + } + } + + /// + /// Gets or sets the unit used to express the distance to the destination point. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public VelocityUnit? DestinationUnit + { + get + { + return ToUnitType(GetTagText("GPSDestDistanceRef")); + } + set + { + SetTagValue("GPSDestDistanceRef", ToString(value) + '\0'); + } + } + + /// + /// Gets or sets a character string recording the name of the method used + /// for location finding. The first byte indicates the character code used, + /// and this is followed by the name of the method. Since the Type is not ASCII, + /// NULL termination is not necessary. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] ProcessingMethod + { + get + { + return GetTagArray("GPSProcessingMethod"); + } + set + { + SetTagValue("GPSProcessingMethod", value); + } + } + + /// + /// Gets or sets a character string recording the name of the GPS area. + /// The first byte indicates the character code used, and this is followed by + /// the name of the GPS area. Since the Type is not ASCII, NULL termination is + /// not necessary. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public byte[] AreaInformation + { + get + { + return GetTagArray("GPSAreaInformation"); + } + set + { + SetTagValue("GPSAreaInformation", value); + } + } + + /// + /// Gets or sets date and time information relative to UTC (Coordinated Universal Time). + /// + /// + /// This is a derived property. There is no metadata tag directly associated + /// with this property value. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public DateTime? DateTimeStamp + { + get + { + DateTime? date = DateStamp; + TimeSpan? time = TimeStamp; + if ((date == null) && (time == null)) + { + return null; + } + else + { + if (date == null) + { + date = DateTime.MinValue; + } + if (time == null) + { + time = TimeSpan.MinValue; + } + return date.Value.Add(time.Value); + } + } + set + { + if (value.HasValue) + { + DateStamp = value.Value.Date; + TimeStamp = value.Value.TimeOfDay; + } + else + { + DateStamp = null; + TimeStamp = null; + } + } + } + + /// + /// Gets or sets date information relative to UTC (Coordinated Universal Time). + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public DateTime? DateStamp + { + get + { + string stamp = GetTagText("GPSDateStamp"); + if (stamp != null) + { + try + { + return DateTime.ParseExact(stamp, "yyyy:MM:dd\0", null); + } + catch + { + } + } + return null; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd\0"); + } + catch + { + } + } + SetTagValue("GPSDateStamp", val); + } + } + + /// + /// Gets or sets a value indicating whether differential correction was applied to + /// the GPS receiver. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public bool? IsDifferential + { + get + { + ushort? value = GetTagValue("GPSDifferential"); + return value.HasValue ? (value != 0) : (default(bool?)); + } + set + { + SetTagValue("GPSDifferential", value.HasValue ? (object)(value.Value ? (ushort)1 : (ushort)0) : (null)); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_INTEROP : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_INTEROP(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_INTEROP; } + } + + /// + /// Gets or sets the identification of the Interoperability rule. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public InteroperabilityMode? Identification + { + get + { + return ToInteroperabilityType(GetTagText("InteroperabilityIndex")); + } + set + { + SetTagValue("InteroperabilityIndex", ToString(value) + '\0'); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + /// This class is obsolete. Use class instead. + /// + [Obsolete("To be removed in future releases. Use MDM_EXIF_MAIN instead.")] + public class MDM_MAIN : MDM_EXIF_MAIN + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_MAIN(FIBITMAP dib) : base(dib) { } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_EXIF_MAIN : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_EXIF_MAIN(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN; } + } + + /// + /// Gets or sets the number of columns of image data, equal to the number + /// of pixels per row. In JPEG compressed data a JPEG marker is used + /// instead of this tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? ImageWidth + { + get + { + return GetUInt32Value("ImageWidth"); + } + set + { + RemoveTag("ImageWidth"); + if (value.HasValue) + { + SetTagValue("ImageWidth", value); + } + } + } + + /// + /// Gets or sets number of rows of image data. In JPEG compressed data a JPEG marker + /// is used instead of this tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? ImageHeight + { + get + { + return GetUInt32Value("ImageLength"); + } + set + { + RemoveTag("ImageLength"); + if (value.HasValue) + { + SetTagValue("ImageLength", value); + } + } + } + + /// + /// Gets or sets number of bits per image component. In this standard + /// each component of the image is 8 bits, so the value for this tag is 8. + /// Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort[] BitsPerSample + { + get + { + return GetTagArray("BitsPerSample"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("BitsPerSample", value); + } + } + + /// + /// Gets or sets compression scheme used for the image data. When a primary image + /// is JPEG compressed, this designation is not necessary and is omitted. + /// When thumbnails use JPEG compression, this tag value is set to 6. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? Compression + { + get + { + return GetTagValue("Compression"); + } + set + { + SetTagValue("Compression", value); + } + } + + /// + /// Gets or sets pixel composition. In JPEG compressed data a JPEG marker is + /// used instead of this tag. See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 2 + /// RGB + /// + /// + /// 6 + /// YCbCr + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? PhotometricInterpretation + { + get + { + return GetTagValue("PhotometricInterpretation"); + } + set + { + SetTagValue("PhotometricInterpretation", value); + } + } + + /// + /// Gets or sets the image orientation viewed in terms of rows and columns. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ExifImageOrientation? Orientation + { + get + { + return (ExifImageOrientation?)GetTagValue("Orientation"); + } + set + { + SetTagValue("Orientation", (ushort?)value); + } + } + + /// + /// Gets or sets the number of components per pixel. Since this standard applies + /// to RGB and YCbCr images, the value set for this tag is 3. In JPEG compressed + /// data a JPEG marker is used instead of this tag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? SamplesPerPixel + { + get + { + return GetTagValue("SamplesPerPixel"); + } + set + { + SetTagValue("SamplesPerPixel", value); + } + } + + /// + /// Gets or sets a value that indicates whether pixel components are recorded in + /// chunky or planar format. In JPEG compressed files a JPEG marker is used instead + /// of this tag. If this field does not exist, the TIFF default of 1 (chunky) is assumed. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 1 + /// chunky format + /// + /// + /// 2 + /// planar format + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? PlanarConfiguration + { + get + { + return GetTagValue("PlanarConfiguration"); + } + set + { + SetTagValue("PlanarConfiguration", value); + } + } + + /// + /// Gets or sets the sampling ratio of chrominance components in relation to + /// the luminance component. In JPEG compressed dat a JPEG marker is used + /// instead of this tag. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// [2,1] + /// YCbCr4:2:2 + /// + /// + /// [2,2] + /// YCbCr4:2:0 + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort[] YCbCrSubSampling + { + get + { + return GetTagArray("YCbCrSubSampling"); + } + set + { + FreeImage.Resize(ref value, 2); + SetTagValue("YCbCrSubSampling", value); + } + } + + /// + /// Gets or sets position of chrominance components in relation to the luminance component. + /// See remarks for further information. + /// + /// + /// This field is designated only for JPEG compressed data or uncompressed YCbCr data. + /// The TIFF default is 1 (centered); but when Y:Cb:Cr = 4:2:2 it is recommended in + /// this standard that 2 (co-sited) be used to record data, in order to improve the + /// image quality when viewed on TV systems. + /// + /// When this field does not exist, the reader shall assume the TIFF default. + /// In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is recommended. + /// If the reader does not have the capability of supporting both kinds of YCbCrPositioning, + /// it shall follow the TIFF default regardless of the value in this field. + /// It is preferable that readers be able to support both centered and co-sited positioning. + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 1 + /// centered + /// + /// + /// 2 + /// co-sited + /// + /// + /// other + /// reserved + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? YCbCrPositioning + { + get + { + return GetTagValue("YCbCrPositioning"); + } + set + { + SetTagValue("YCbCrPositioning", value); + } + } + + /// + /// Gets or sets the number of pixels per + /// in the direction. When the image resolution is unknown, + /// 72 [dpi] is designated. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? XResolution + { + get + { + return GetTagValue("XResolution"); + } + set + { + SetTagValue("XResolution", value); + } + } + + /// + /// Gets or sets the number of pixels per + /// in the direction. When the image resolution is unknown, + /// 72 [dpi] is designated. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational? YResolution + { + get + { + return GetTagValue("YResolution"); + } + set + { + SetTagValue("YResolution", value); + } + } + + /// + /// Gets or sets the unit for measuring and . + /// The same unit is used for both and . + /// If the image resolution in unknown, 2 (inches) is designated. + /// See remarks for further information. + /// + /// + /// The following values are definied: + /// + /// + /// ID + /// Description + /// + /// + /// 2 + /// inches + /// + /// + /// 3 + /// YCbCr4:2:0 + /// + /// + /// other + /// centimeters + /// + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort? ResolutionUnit + { + get + { + return GetTagValue("ResolutionUnit"); + } + set + { + SetTagValue("ResolutionUnit", value); + } + } + + /// + /// Gets or sets the byte offset of that strip. + /// It is recommended that this be selected so the number of strip bytes + /// does not exceed 64 Kbytes. + /// With JPEG compressed data this designation is not needed and is omitted. + /// Constant length of * StripsPerImage. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + /// + public uint[] StripOffsets + { + get + { + return GetUInt32Array("StripOffsets"); + } + set + { + RemoveTag("StripOffsets"); + if (value != null) + { + SetTagValue("StripOffsets", value); + } + } + } + + /// + /// Gets or sets number of rows per strip. This is the number of rows in the image of + /// one strip when an image is divided into strips. With JPEG compressed data this + /// designation is not needed and is omitted. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + /// + public uint? RowsPerStrip + { + get + { + return GetUInt32Value("RowsPerStrip"); + } + set + { + RemoveTag("RowsPerStrip"); + if (value.HasValue) + { + SetTagValue("RowsPerStrip", value); + } + } + } + + /// + /// Gets or sets the total number of bytes in each strip. + /// With JPEG compressed data this designation is not needed and is omitted. + /// Constant length of * StripsPerImage. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint[] StripByteCounts + { + get + { + return GetUInt32Array("StripByteCounts"); + } + set + { + RemoveTag("StripByteCounts"); + if (value != null) + { + SetTagValue("StripByteCounts", value); + } + } + } + + /// + /// Gets or sets the offset to the start byte (SOI) of JPEG compressed thumbnail data. + /// This is not used for primary image JPEG data. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? JPEGInterchangeFormat + { + get + { + return GetTagValue("JPEGInterchangeFormat"); + } + set + { + SetTagValue("JPEGInterchangeFormat", value); + } + } + + /// + /// Gets or sets the number of bytes of JPEG compressed thumbnail data. + /// + /// + /// This is not used for primary image JPEG data. + /// JPEG thumbnails are not divided but are recorded as a continuous + /// JPEG bitstream from SOI to EOI. APPn and COM markers should not be recorded. + /// Compressed thumbnails shall be recorded in no more than 64 Kbytes, + /// including all other data to be recorded in APP1. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? JPEGInterchangeFormatLength + { + get + { + return GetTagValue("JPEGInterchangeFormatLength"); + } + set + { + SetTagValue("JPEGInterchangeFormatLength", value); + } + } + + /// + /// Gets or sets a transfer function for the image, described in tabular style. + /// Constant length of 3 * 256. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort[] TransferFunction + { + get + { + return GetTagArray("TransferFunction"); + } + set + { + FreeImage.Resize(ref value, 3 * 256); + SetTagValue("TransferFunction", value); + } + } + + /// + /// Gets or sets the chromaticity of the white point of the image. + /// Constant length of 2. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational[] WhitePoint + { + get + { + return GetTagArray("WhitePoint"); + } + set + { + FreeImage.Resize(ref value, 2); + SetTagValue("WhitePoint", value); + } + } + + /// + /// Gets or sets the chromaticity of the three primary colors of the image. + /// Constant length of 6. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational[] PrimaryChromaticities + { + get + { + return GetTagArray("PrimaryChromaticities"); + } + set + { + FreeImage.Resize(ref value, 6); + SetTagValue("PrimaryChromaticities", value); + } + } + + /// + /// Gets or sets the matrix coefficients for transformation from RGB to YCbCr image data. + /// Constant length of 3. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational[] YCbCrCoefficients + { + get + { + return GetTagArray("YCbCrCoefficients"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("PrimaryChromaticities", value); + } + } + + /// + /// Gets or sets the reference black point value and reference white point value. + /// Constant length of 6. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public FIURational[] ReferenceBlackWhite + { + get + { + return GetTagArray("ReferenceBlackWhite"); + } + set + { + FreeImage.Resize(ref value, 6); + SetTagValue("ReferenceBlackWhite", value); + } + } + + /// + /// Gets or sets the date and time of image creation. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public DateTime? DateTime + { + get + { + DateTime? result = null; + string text = GetTagText("DateTime"); + if (text != null) + { + try + { + result = System.DateTime.ParseExact(text, "yyyy:MM:dd HH:mm:ss\0", null); + } + catch + { + } + } + return result; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd HH:mm:ss\0"); + } + catch + { + } + } + SetTagValue("DateTime", val); + } + } + + /// + /// Gets or sets a string giving the title of the image. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ImageDescription + { + get + { + string result = GetTagText("ImageDescription"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("ImageDescription", value); + } + } + + /// + /// Gets or sets the manufacturer of the recording equipment. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Make + { + get + { + string result = GetTagText("Make"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Make", value); + } + } + + /// + /// Gets or sets the model name or model number of the equipment. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string EquipmentModel + { + get + { + string result = GetTagText("Model"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Model", value); + } + } + + /// + /// Gets or sets the name and version of the software or firmware of the camera + /// or image input device used to generate the image. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Software + { + get + { + string result = GetTagText("Software"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Software", value); + } + } + + /// + /// Gets or sets the name of the camera owner, photographer or image creator. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Artist + { + get + { + string result = GetTagText("Artist"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Artist", value); + } + } + + /// + /// Gets or sets the photographer and editor copyrights. + /// Constant length of 1-2. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string[] Copyright + { + get + { + string[] result = null; + string text = GetTagText("Copyright"); + if (!string.IsNullOrEmpty(text)) + { + result = text.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); + } + return result; + } + set + { + string val = null; + if (value != null) + { + if (value.Length == 1) + { + if (value[0] != null) + { + val = value[0] + '\0'; + } + } + else if (value.Length == 2) + { + if ((value[0] != null) && (value[1] != null)) + { + val = value[0] + '\0' + value[1] + '\0'; + } + } + } + SetTagValue("Copyright", val); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_MAKERNOTE : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_MAKERNOTE(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_MAKERNOTE; } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_GEOTIFF : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_GEOTIFF(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_GEOTIFF; } + } + + /// + /// Gets or sets the value of the GeoTIFF GeoASCIIParamsTag. + /// + /// + /// The GeoASCIIParamsTag is used to store all of the valued + /// GeoKeys, referenced by the property. Since keys + /// defined in the GeoKeyDirectoryTag use offsets into this tag, any special + /// comments may be placed at the beginning of this tag. + /// For the most part, the only keys that are valued are + /// Citation keys, giving documentation and references for obscure + /// projections, datums, etc. + /// + /// Special handling is required for -valued keys. While it + /// is true that TIFF 6.0 permits multiple NULL-delimited strings within a single + /// ASCII tag, the secondary strings might not appear in the output of naive + /// tiffdump programs. For this reason, the NULL delimiter of each ASCII key + /// value shall be converted to a "|" (pipe) character before being installed + /// back into the holding tag, so that a dump of the tag + /// will look like this. + /// + /// AsciiTag="first_value|second_value|etc...last_value|" + /// + /// A baseline GeoTIFF-reader must check for and convert the final "|" pipe + /// character of a key back into a NULL before returning it to the client + /// software. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string GeoASCIIParams + { + get + { + string text = GetTagText("GeoASCIIParams"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("GeoASCIIParams", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF GeoDoubleParamsTag. + /// + /// + /// The GeoDoubleParamsTag is used to store all of the valued + /// GeoKeys, referenced by the property. The meaning of + /// any value of this double array is determined from the GeoKeyDirectoryTag reference + /// pointing to it. values should first be converted to + /// and stored here. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public double[] GeoDoubleParams + { + get + { + return GetTagArray("GeoDoubleParams"); + } + set + { + SetTagValue("GeoDoubleParams", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF GeoKeyDirectoryTag. + /// + /// + /// The GeoKeyDirectoryTag may be used to store the GeoKey Directory, which defines and + /// references the GeoKeys. + /// + /// The tag is an array of unsigned values, which are primarily + /// grouped into blocks of 4. The first 4 values are special, and contain GeoKey directory + /// header information. The header values consist of the following information, in order: + /// + /// Header={KeyDirectoryVersion, KeyRevision, MinorRevision, NumberOfKeys} + /// + /// where + /// + /// KeyDirectoryVersion indicates the current version of Key implementation, and will + /// only change if this Tag's Key structure is changed. (Similar to the TIFFVersion (42)). + /// The current DirectoryVersion number is 1. This value will most likely never change, + /// and may be used to ensure that this is a valid Key-implementation. + /// + /// KeyRevision indicates what revision of Key-Sets are used. + /// + /// MinorRevision indicates what set of Key-Codes are used. The complete revision number + /// is denoted <KeyRevision>.<MinorRevision>. + /// + /// NumberOfKeys indicates how many Keys are defined by the rest of this Tag. + /// + /// This header is immediately followed by a collection of <NumberOfKeys> KeyEntry + /// sets, each of which is also 4- long. Each KeyEntry is modeled on the + /// TIFFEntry format of the TIFF directory header, and is of the form: + /// + /// KeyEntry = { KeyID, TIFFTagLocation, Count, Value_Offset } + /// + /// where + /// + /// KeyID gives the Key-ID value of the Key (identical in function to TIFF tag ID, + /// but completely independent of TIFF tag-space), + /// + /// TIFFTagLocation indicates which TIFF tag contains the value(s) of the Key: if + /// TIFFTagLocation is 0, then the value is , and is contained in the + /// Value_Offset entry. Otherwise, the type (format) of the value is implied by the + /// TIFF-Type of the tag containing the value. + /// + /// Count indicates the number of values in this key. + /// + /// Value_Offset Value_Offset indicates the index-offset into the TagArray indicated + /// by TIFFTagLocation, if it is nonzero. If TIFFTagLocation is 0 (zero) , then Value_Offset + /// contains the actual () value of the Key, and Count=1 is implied. + /// Note that the offset is not a byte-offset, but rather an index based on the natural data + /// type of the specified tag array. + /// + /// Following the KeyEntry definitions, the KeyDirectory tag may also contain additional + /// values. For example, if a key requires multiple values, they shall + /// be placed at the end of this tag, and the KeyEntry will set + /// TIFFTagLocation=GeoKeyDirectoryTag, with the Value_Offset pointing to the location of the + /// value(s). + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public ushort[] GeoKeyDirectory + { + get + { + return GetTagArray("GeoKeyDirectory"); + } + set + { + SetTagValue("GeoKeyDirectory", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF ModelPixelScaleTag. + /// + /// + /// The ModelPixelScaleTag tag may be used to specify the size of raster pixel spacing + /// in the model space units, when the raster space can be embedded in the model space + /// coordinate system without rotation, and consists of the following 3 values: + /// + /// ModelPixelScaleTag = (ScaleX, ScaleY, ScaleZ) + /// + /// where ScaleX and ScaleY give the horizontal and vertical spacing of + /// raster pixels. The ScaleZ is primarily used to map the pixel value of a + /// digital elevation model into the correct Z-scale, and so for most other purposes + /// this value should be zero (since most model spaces are 2-D, with Z=0). + /// + /// A single tiepoint in the tag, together with this tag, + /// completely determine the relationship between raster and model space; thus they + /// comprise the two tags which Baseline GeoTIFF files most often will use to place a + /// raster image into a "standard position" in model space. + /// + /// Like the tag, this tag information is independent of the + /// XPosition, YPosition, Resolution and Orientation tags of the standard TIFF 6.0 spec. + /// However, simple reversals of orientation between raster and model space + /// (e.g. horizontal or vertical flips) may be indicated by reversal of sign in the + /// corresponding component of the ModelPixelScaleTag. GeoTIFF compliant readers must + /// honor this signreversal convention. + /// + /// This tag must not be used if the raster image requires rotation or shearing to place + /// it into the standard model space. In such cases the transformation shall be defined + /// with the more general . + /// + /// Naming differences + /// In the native FreeImage library and thus, in the FreeImage API documentation, this + /// property's key is named GeoPixelScale. Since the GeoTIFF specification + /// as well as Java's EXIFTIFFTagSet class call this tag + /// , this property was renamed accordingly. + /// However, when accessing this property's tag by its object, + /// the native FreeImage tag key GeoPixelScale must be used. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public double[] ModelPixelScale + { + get + { + return GetTagArray("GeoPixelScale"); + } + set + { + SetTagValue("GeoPixelScale", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF GeoTiePointsTag. + /// + /// + /// The GeoTiePointsTag stores raster -> model tiepoint pairs in the order + /// + /// ModelTiePoints = (...,I,J,K, X,Y,Z...), + /// + /// where (I,J,K) is the point at location (I,J) in raster space with + /// pixel-value K, and (X,Y,Z) is a vector in model space. In most cases + /// the model space is only two-dimensional, in which case both K and Z should be set + /// to zero; this third dimension is provided in anticipation of future support for 3D + /// digital elevation models and vertical coordinate systems. + /// + /// A raster image may be georeferenced simply by specifying its location, size and + /// orientation in the model coordinate space M. This may be done by specifying the + /// location of three of the four bounding corner points. However, tiepoints are only + /// to be considered exact at the points specified; thus defining such a set of + /// bounding tiepoints does not imply that the model space locations of the interior + /// of the image may be exactly computed by a linear interpolation of these tiepoints. + /// + /// However, since the relationship between the Raster space and the model space will + /// often be an exact, affine transformation, this relationship can be defined using + /// one set of tiepoints and the , described below, which + /// gives the vertical and horizontal raster grid cell size, specified in model units. + /// + /// If possible, the first tiepoint placed in this tag shall be the one establishing + /// the location of the point (0,0) in raster space. However, if this is not possible + /// (for example, if (0,0) is goes to a part of model space in which the projection is + /// ill-defined), then there is no particular order in which the tiepoints need be + /// listed. + /// + /// For orthorectification or mosaicking applications a large number of tiepoints may + /// be specified on a mesh over the raster image. However, the definition of associated + /// grid interpolation methods is not in the scope of the current GeoTIFF spec. + /// + /// Naming differences + /// In the native FreeImage library and thus, in the FreeImage API documentation, this + /// property's key is named GeoTiePoints. Since the GeoTIFF specification + /// as well as Java's EXIFTIFFTagSet class call this tag + /// , this property was renamed accordingly. + /// However, when accessing this property's tag by its object, + /// the native FreeImage tag key GeoTiePoints must be used. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public double[] ModelTiePoints + { + get + { + return GetTagArray("GeoTiePoints"); + } + set + { + SetTagValue("GeoTiePoints", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF ModelTransformationMatrixTag. + /// + /// + /// This tag may be used to specify the transformation matrix between the raster space + /// (and its dependent pixel-value space) and the (possibly 3D) model space. + /// + /// Naming differences + /// In the native FreeImage library and thus, in the FreeImage API documentation, this + /// property's key is named GeoTransformationMatrix. Since the GeoTIFF specification + /// as well as Java's EXIFTIFFTagSet class call this tag + /// , this property was renamed accordingly. + /// However, when accessing this property's tag by its object, + /// the native FreeImage tag key GeoTransformationMatrix must be used. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public double[] ModelTransformationMatrix + { + get + { + return GetTagArray("GeoTransformationMatrix"); + } + set + { + SetTagValue("GeoTransformationMatrix", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF IntergraphTransformationMatrixTag. + /// + /// + /// The IntergraphTransformationMatrixTag conflicts with an internal software implementation + /// at Intergraph, and so its use is no longer encouraged. A GeoTIFF reader should look first + /// for the new tag, and only if it is not found should it check for this older tag. If found, + /// it should only consider it to be contain valid GeoTIFF matrix information if the tag-count + /// is 16; the Intergraph version uses 17 values. + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public double[] IntergraphTransformationMatrix + { + get + { + return GetTagArray("Intergraph TransformationMatrix"); + } + set + { + SetTagValue("Intergraph TransformationMatrix", value); + } + } + + /// + /// Gets or sets the value of the GeoTIFF JPLCartoIFDOffsetTag. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public uint? JPLCartoIFDOffset + { + get + { + return GetTagValue("JPL Carto IFD offset"); + } + set + { + SetTagValue("JPL Carto IFD offset", value); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_IPTC : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_IPTC(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_IPTC; } + } + + /// + /// Gets the Application Record Version. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public short? ApplicationRecordVersion + { + get + { + return GetTagValue("ApplicationRecordVersion"); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Type Reference. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectTypeReference + { + get + { + return GetTagText("ObjectTypeReference"); + } + set + { + SetTagValue("ObjectTypeReference", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Attribute Reference. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectAttributeReference + { + get + { + return GetTagText("ObjectAttributeReference"); + } + set + { + SetTagValue("ObjectAttributeReference", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Name. + /// This is also referred to as Title. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectName + { + get + { + return GetTagText("ObjectName"); + } + set + { + SetTagValue("ObjectName", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Edit Status. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string EditStatus + { + get + { + return GetTagText("EditStatus"); + } + set + { + SetTagValue("EditStatus", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Editorial Update. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string EditorialUpdate + { + get + { + return GetTagText("EditorialUpdate"); + } + set + { + SetTagValue("EditorialUpdate", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Urgency. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Urgency + { + get + { + return GetTagText("Urgency"); + } + set + { + SetTagValue("Urgency", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Subject Reference. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SubjectReference + { + get + { + return GetTagText("SubjectReference"); + } + set + { + SetTagValue("SubjectReference", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Category. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Category + { + get + { + return GetTagText("Category"); + } + set + { + SetTagValue("Category", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Supplemental Categories. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SupplementalCategories + { + get + { + return GetTagText("SupplementalCategories"); + } + set + { + SetTagValue("SupplementalCategories", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Fixture Identifier. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string FixtureIdentifier + { + get + { + return GetTagText("FixtureIdentifier"); + } + set + { + SetTagValue("FixtureIdentifier", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Keywords. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Keywords + { + get + { + return GetTagText("Keywords"); + } + set + { + SetTagValue("Keywords", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Content Location Code. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ContentLocationCode + { + get + { + return GetTagText("ContentLocationCode"); + } + set + { + SetTagValue("ContentLocationCode", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Content Location Name. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ContentLocationName + { + get + { + return GetTagText("ContentLocationName"); + } + set + { + SetTagValue("ContentLocationName", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Release Date. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ReleaseDate + { + get + { + return GetTagText("ReleaseDate"); + } + set + { + SetTagValue("ReleaseDate", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Release Time. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ReleaseTime + { + get + { + return GetTagText("ReleaseTime"); + } + set + { + SetTagValue("ReleaseTime", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Expiration Date. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ExpirationDate + { + get + { + return GetTagText("ExpirationDate"); + } + set + { + SetTagValue("ExpirationDate", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Expiration Time. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ExpirationTime + { + get + { + return GetTagText("ExpirationTime"); + } + set + { + SetTagValue("ExpirationTime", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Special Instructions. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SpecialInstructions + { + get + { + return GetTagText("SpecialInstructions"); + } + set + { + SetTagValue("SpecialInstructions", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Action Advised. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ActionAdvised + { + get + { + return GetTagText("ActionAdvised"); + } + set + { + SetTagValue("ActionAdvised", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Reference Service. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ReferenceService + { + get + { + return GetTagText("ReferenceService"); + } + set + { + SetTagValue("ReferenceService", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Reference Date. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ReferenceDate + { + get + { + return GetTagText("ReferenceDate"); + } + set + { + SetTagValue("ReferenceDate", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Reference Number. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ReferenceNumber + { + get + { + return GetTagText("ReferenceNumber"); + } + set + { + SetTagValue("ReferenceNumber", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Date Created. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string DateCreated + { + get + { + return GetTagText("DateCreated"); + } + set + { + SetTagValue("DateCreated", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Time Created. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string TimeCreated + { + get + { + return GetTagText("TimeCreated"); + } + set + { + SetTagValue("TimeCreated", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Digital Creation Date. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string DigitalCreationDate + { + get + { + return GetTagText("DigitalCreationDate"); + } + set + { + SetTagValue("DigitalCreationDate", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Digital Creation Time. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string DigitalCreationTime + { + get + { + return GetTagText("DigitalCreationTime"); + } + set + { + SetTagValue("DigitalCreationTime", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Originating Program. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string OriginatingProgram + { + get + { + return GetTagText("OriginatingProgram"); + } + set + { + SetTagValue("OriginatingProgram", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Program Version. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ProgramVersion + { + get + { + return GetTagText("ProgramVersion"); + } + set + { + SetTagValue("ProgramVersion", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Cycle. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectCycle + { + get + { + return GetTagText("ObjectCycle"); + } + set + { + SetTagValue("ObjectCycle", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag By Line. + /// This is the author's name. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ByLine + { + get + { + return GetTagText("By-line"); + } + set + { + SetTagValue("By-line", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag By Line Title. + /// This is the author's position. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ByLineTitle + { + get + { + return GetTagText("By-lineTitle"); + } + set + { + SetTagValue("By-lineTitle", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag City. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string City + { + get + { + return GetTagText("City"); + } + set + { + SetTagValue("City", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Sub Location. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SubLocation + { + get + { + return GetTagText("SubLocation"); + } + set + { + SetTagValue("SubLocation", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Province State. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ProvinceState + { + get + { + return GetTagText("ProvinceState"); + } + set + { + SetTagValue("ProvinceState", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Country Primary Location Code. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string CountryPrimaryLocationCode + { + get + { + return GetTagText("Country-PrimaryLocationCode"); + } + set + { + SetTagValue("Country-PrimaryLocationCode", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Country Primary Location Name. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string CountryPrimaryLocationName + { + get + { + return GetTagText("Country-PrimaryLocationName"); + } + set + { + SetTagValue("Country-PrimaryLocationName", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Original Transmission Reference. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string OriginalTransmissionReference + { + get + { + return GetTagText("OriginalTransmissionReference"); + } + set + { + SetTagValue("OriginalTransmissionReference", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Headline. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Headline + { + get + { + return GetTagText("Headline"); + } + set + { + SetTagValue("Headline", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Credit. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Credit + { + get + { + return GetTagText("Credit"); + } + set + { + SetTagValue("Credit", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Source. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Source + { + get + { + return GetTagText("Source"); + } + set + { + SetTagValue("Source", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Copyright Notice. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string CopyrightNotice + { + get + { + return GetTagText("CopyrightNotice"); + } + set + { + SetTagValue("CopyrightNotice", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Contact. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Contact + { + get + { + return GetTagText("Contact"); + } + set + { + SetTagValue("Contact", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Caption Abstract. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string CaptionAbstract + { + get + { + return GetTagText("CaptionAbstract"); + } + set + { + SetTagValue("CaptionAbstract", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Writer Editor. + /// This is also referred to as Caption Writer. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string WriterEditor + { + get + { + return GetTagText("WriterEditor"); + } + set + { + SetTagValue("WriterEditor", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Rasterized Caption. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string RasterizedCaption + { + get + { + return GetTagText("RasterizedCaption"); + } + set + { + SetTagValue("RasterizedCaption", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Image Type. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ImageType + { + get + { + return GetTagText("ImageType"); + } + set + { + SetTagValue("ImageType", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Image Orientation. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ImageOrientation + { + get + { + return GetTagText("ImageOrientation"); + } + set + { + SetTagValue("ImageOrientation", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Language Identifier. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string LanguageIdentifier + { + get + { + return GetTagText("LanguageIdentifier"); + } + set + { + SetTagValue("LanguageIdentifier", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Audio Type. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string AudioType + { + get + { + return GetTagText("AudioType"); + } + set + { + SetTagValue("AudioType", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Audio Sampling Rate. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string AudioSamplingRate + { + get + { + return GetTagText("AudioSamplingRate"); + } + set + { + SetTagValue("AudioSamplingRate", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Audio Sampling Resolution. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string AudioSamplingResolution + { + get + { + return GetTagText("AudioSamplingResolution"); + } + set + { + SetTagValue("AudioSamplingResolution", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Audio Duration. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string AudioDuration + { + get + { + return GetTagText("AudioDuration"); + } + set + { + SetTagValue("AudioDuration", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Audio Outcue. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string AudioOutcue + { + get + { + return GetTagText("AudioOutcue"); + } + set + { + SetTagValue("AudioOutcue", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Job I D. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string JobID + { + get + { + return GetTagText("JobID"); + } + set + { + SetTagValue("JobID", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Master Document I D. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string MasterDocumentID + { + get + { + return GetTagText("MasterDocumentID"); + } + set + { + SetTagValue("MasterDocumentID", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Short Document I D. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ShortDocumentID + { + get + { + return GetTagText("ShortDocumentID"); + } + set + { + SetTagValue("ShortDocumentID", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Unique Document I D. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string UniqueDocumentID + { + get + { + return GetTagText("UniqueDocumentID"); + } + set + { + SetTagValue("UniqueDocumentID", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Owner I D. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string OwnerID + { + get + { + return GetTagText("OwnerID"); + } + set + { + SetTagValue("OwnerID", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Preview File Format. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectPreviewFileFormat + { + get + { + return GetTagText("ObjectPreviewFileFormat"); + } + set + { + SetTagValue("ObjectPreviewFileFormat", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Preview File Version. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectPreviewFileVersion + { + get + { + return GetTagText("ObjectPreviewFileVersion"); + } + set + { + SetTagValue("ObjectPreviewFileVersion", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Object Preview Data. + /// This is also referred to as Audio Outcue. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ObjectPreviewData + { + get + { + return GetTagText("ObjectPreviewData"); + } + set + { + SetTagValue("ObjectPreviewData", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Prefs. + /// This is also referred to as photo-mechanic preferences. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Prefs + { + get + { + return GetTagText("Prefs"); + } + set + { + SetTagValue("Prefs", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Classify State. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ClassifyState + { + get + { + return GetTagText("ClassifyState"); + } + set + { + SetTagValue("ClassifyState", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Similarity Index. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string SimilarityIndex + { + get + { + return GetTagText("SimilarityIndex"); + } + set + { + SetTagValue("SimilarityIndex", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Document Notes. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string DocumentNotes + { + get + { + return GetTagText("DocumentNotes"); + } + set + { + SetTagValue("DocumentNotes", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Document History. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string DocumentHistory + { + get + { + return GetTagText("DocumentHistory"); + } + set + { + SetTagValue("DocumentHistory", value); + } + } + + /// + /// Gets or sets the value of the IPTC/NAA tag Exif Camera Info. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string ExifCameraInfo + { + get + { + return GetTagText("ExifCameraInfo"); + } + set + { + SetTagValue("ExifCameraInfo", value); + } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_NODATA : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_NODATA(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_NODATA; } + } + } + + /// + /// Represents a collection of all tags contained in the metadata model + /// . + /// + public class MDM_XMP : MetadataModel + { + /// + /// Initializes a new instance of this class. + /// + /// Handle to a FreeImage bitmap. + public MDM_XMP(FIBITMAP dib) : base(dib) { } + + /// + /// Retrieves the datamodel that this instance represents. + /// + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_XMP; } + } + + /// + /// Gets or sets the XMP XML content. + /// + /// + /// Handling of null values + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// + public string Xml + { + get + { + return GetTagText("XMLPacket"); + } + set + { + SetTagValue("XMLPacket", value); + } + } + + /// + /// Gets an initialized to read the XMP XML content. + /// Returns null, if the metadata tag XMLPacket is not present in + /// this model. + /// + public XmlReader XmlReader + { + get + { + string xmlString = Xml; + if (xmlString == null) + { + return null; + } + else + { + MemoryStream stream = new MemoryStream(); + StreamWriter writer = new StreamWriter(stream); + writer.Write(xmlString); + return XmlReader.Create(stream); + } + } + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataTag.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataTag.cs new file mode 100644 index 0000000..8fa580d --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataTag.cs @@ -0,0 +1,757 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.9 $ +// $Date: 2009/02/27 16:35:12 $ +// $Id: MetadataTag.cs,v 1.9 2009/02/27 16:35:12 cklein05 Exp $ +// ========================================================== + +using System; +using System.Text; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using System.Diagnostics; + +namespace FreeImageAPI.Metadata +{ + /// + /// Manages metadata objects and operations. + /// + public sealed class MetadataTag : IComparable, IComparable, ICloneable, IEquatable, IDisposable + { + /// + /// The encapsulated FreeImage-tag. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + internal FITAG tag; + + /// + /// The metadata model of . + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private FREE_IMAGE_MDMODEL model; + + /// + /// Indicates whether this instance has already been disposed. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private bool disposed = false; + + /// + /// Indicates whether this instance was created by FreeImage or + /// by the user. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private bool selfCreated; + + /// + /// List linking metadata-model and Type. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private static readonly Dictionary idList; + + /// + /// List linking Type and metadata-model. + /// + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private static readonly Dictionary typeList; + + /// + /// Initializes a new instance of this class. + /// + private MetadataTag() + { + } + + /// + /// Initializes a new instance of this class. + /// + /// The new model the tag should be of. + public MetadataTag(FREE_IMAGE_MDMODEL model) + { + this.model = model; + tag = FreeImage.CreateTag(); + selfCreated = true; + + if (model == FREE_IMAGE_MDMODEL.FIMD_XMP) + { + Key = "XMLPacket"; + } + } + + /// + /// Initializes a new instance of this class. + /// + /// The to represent. + /// The bitmap was extracted from. + public MetadataTag(FITAG tag, FIBITMAP dib) + { + if (tag.IsNull) + { + throw new ArgumentNullException("tag"); + } + if (dib.IsNull) + { + throw new ArgumentNullException("dib"); + } + this.tag = tag; + model = GetModel(dib, tag); + selfCreated = false; + + if (model == FREE_IMAGE_MDMODEL.FIMD_XMP) + { + Key = "XMLPacket"; + } + } + + /// + /// Initializes a new instance of this class. + /// + /// The to represent. + /// The model of . + public MetadataTag(FITAG tag, FREE_IMAGE_MDMODEL model) + { + if (tag.IsNull) + { + throw new ArgumentNullException("tag"); + } + this.tag = tag; + this.model = model; + selfCreated = false; + + if (model == FREE_IMAGE_MDMODEL.FIMD_XMP) + { + Key = "XMLPacket"; + } + } + + static MetadataTag() + { + idList = new Dictionary(); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_BYTE, typeof(byte)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_SHORT, typeof(ushort)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_LONG, typeof(uint)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_RATIONAL, typeof(FIURational)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_SBYTE, typeof(sbyte)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_UNDEFINED, typeof(byte)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_SSHORT, typeof(short)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_SLONG, typeof(int)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_SRATIONAL, typeof(FIRational)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_FLOAT, typeof(float)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_DOUBLE, typeof(double)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_IFD, typeof(uint)); + idList.Add(FREE_IMAGE_MDTYPE.FIDT_PALETTE, typeof(RGBQUAD)); + + typeList = new Dictionary(); + typeList.Add(typeof(ushort), FREE_IMAGE_MDTYPE.FIDT_SHORT); + typeList.Add(typeof(ushort[]), FREE_IMAGE_MDTYPE.FIDT_SHORT); + typeList.Add(typeof(string), FREE_IMAGE_MDTYPE.FIDT_ASCII); + typeList.Add(typeof(uint), FREE_IMAGE_MDTYPE.FIDT_LONG); + typeList.Add(typeof(uint[]), FREE_IMAGE_MDTYPE.FIDT_LONG); + typeList.Add(typeof(FIURational), FREE_IMAGE_MDTYPE.FIDT_RATIONAL); + typeList.Add(typeof(FIURational[]), FREE_IMAGE_MDTYPE.FIDT_RATIONAL); + typeList.Add(typeof(sbyte), FREE_IMAGE_MDTYPE.FIDT_SBYTE); + typeList.Add(typeof(sbyte[]), FREE_IMAGE_MDTYPE.FIDT_SBYTE); + typeList.Add(typeof(byte), FREE_IMAGE_MDTYPE.FIDT_BYTE); + typeList.Add(typeof(byte[]), FREE_IMAGE_MDTYPE.FIDT_BYTE); + typeList.Add(typeof(short), FREE_IMAGE_MDTYPE.FIDT_SSHORT); + typeList.Add(typeof(short[]), FREE_IMAGE_MDTYPE.FIDT_SSHORT); + typeList.Add(typeof(int), FREE_IMAGE_MDTYPE.FIDT_SLONG); + typeList.Add(typeof(int[]), FREE_IMAGE_MDTYPE.FIDT_SLONG); + typeList.Add(typeof(FIRational), FREE_IMAGE_MDTYPE.FIDT_SRATIONAL); + typeList.Add(typeof(FIRational[]), FREE_IMAGE_MDTYPE.FIDT_SRATIONAL); + typeList.Add(typeof(float), FREE_IMAGE_MDTYPE.FIDT_FLOAT); + typeList.Add(typeof(float[]), FREE_IMAGE_MDTYPE.FIDT_FLOAT); + typeList.Add(typeof(double), FREE_IMAGE_MDTYPE.FIDT_DOUBLE); + typeList.Add(typeof(double[]), FREE_IMAGE_MDTYPE.FIDT_DOUBLE); + typeList.Add(typeof(RGBQUAD), FREE_IMAGE_MDTYPE.FIDT_PALETTE); + typeList.Add(typeof(RGBQUAD[]), FREE_IMAGE_MDTYPE.FIDT_PALETTE); + } + + /// + /// Releases all resources used by the instance. + /// + ~MetadataTag() + { + Dispose(); + } + + /// + /// Determines whether two specified objects have the same value. + /// + /// A or a null reference (Nothing in Visual Basic). + /// A or a null reference (Nothing in Visual Basic). + /// + /// true if the value of left is the same as the value of right; otherwise, false. + /// + public static bool operator ==(MetadataTag left, MetadataTag right) + { + // Check whether both are null + if ((object)left == (object)right) + { + return true; + } + else if ((object)left == null || (object)right == null) + { + return false; + } + left.CheckDisposed(); + right.CheckDisposed(); + // Check all properties + if ((left.Key != right.Key) || + (left.ID != right.ID) || + (left.Description != right.Description) || + (left.Count != right.Count) || + (left.Length != right.Length) || + (left.Model != right.Model) || + (left.Type != right.Type)) + { + return false; + } + if (left.Length == 0) + { + return true; + } + IntPtr ptr1 = FreeImage.GetTagValue(left.tag); + IntPtr ptr2 = FreeImage.GetTagValue(right.tag); + return FreeImage.CompareMemory(ptr1, ptr2, left.Length); + } + + /// + /// Determines whether two specified objects have different values. + /// + /// A or a null reference (Nothing in Visual Basic). + /// A or a null reference (Nothing in Visual Basic). + /// + /// true if the value of left is different from the value of right; otherwise, false. + /// + public static bool operator !=(MetadataTag left, MetadataTag right) + { + return !(left == right); + } + + /// + /// Extracts the value of a instance to a handle. + /// + /// A instance. + /// A new instance of initialized to . + public static implicit operator FITAG(MetadataTag value) + { + return value.tag; + } + + private static FREE_IMAGE_MDMODEL GetModel(FIBITMAP dib, FITAG tag) + { + FITAG value; + foreach (FREE_IMAGE_MDMODEL model in FreeImage.FREE_IMAGE_MDMODELS) + { + FIMETADATA mData = FreeImage.FindFirstMetadata(model, dib, out value); + if (mData.IsNull) + { + continue; + } + try + { + do + { + if (value == tag) + { + return model; + } + } + while (FreeImage.FindNextMetadata(mData, out value)); + } + finally + { + if (!mData.IsNull) + { + FreeImage.FindCloseMetadata(mData); + } + } + } + throw new ArgumentException("'tag' is no metadata object of 'dib'"); + } + + /// + /// Gets the model of the metadata. + /// + public FREE_IMAGE_MDMODEL Model + { + get { CheckDisposed(); return model; } + } + + /// + /// Gets or sets the key of the metadata. + /// + public string Key + { + get { CheckDisposed(); return FreeImage.GetTagKey(tag); } + set + { + CheckDisposed(); + if ((model != FREE_IMAGE_MDMODEL.FIMD_XMP) || (value == "XMLPacket")) + { + FreeImage.SetTagKey(tag, value); + } + } + } + + /// + /// Gets or sets the description of the metadata. + /// + public string Description + { + get { CheckDisposed(); return FreeImage.GetTagDescription(tag); } + set { CheckDisposed(); FreeImage.SetTagDescription(tag, value); } + } + + /// + /// Gets or sets the ID of the metadata. + /// + public ushort ID + { + get { CheckDisposed(); return FreeImage.GetTagID(tag); } + set { CheckDisposed(); FreeImage.SetTagID(tag, value); } + } + + /// + /// Gets the type of the metadata. + /// + public FREE_IMAGE_MDTYPE Type + { + get { CheckDisposed(); return FreeImage.GetTagType(tag); } + internal set { FreeImage.SetTagType(tag, value); } + } + + /// + /// Gets the number of elements the metadata object contains. + /// + public uint Count + { + get { CheckDisposed(); return FreeImage.GetTagCount(tag); } + private set { FreeImage.SetTagCount(tag, value); } + } + + /// + /// Gets the length of the value in bytes. + /// + public uint Length + { + get { CheckDisposed(); return FreeImage.GetTagLength(tag); } + private set { FreeImage.SetTagLength(tag, value); } + } + + private unsafe byte[] GetData() + { + uint length = Length; + byte[] value = new byte[length]; + byte* ptr = (byte*)FreeImage.GetTagValue(tag); + for (int i = 0; i < length; i++) + { + value[i] = ptr[i]; + } + return value; + } + + /// + /// Gets or sets the value of the metadata. + /// + public object Value + { + get + { + unsafe + { + CheckDisposed(); + int cnt = (int)Count; + + if (Type == FREE_IMAGE_MDTYPE.FIDT_ASCII) + { + byte* value = (byte*)FreeImage.GetTagValue(tag); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < cnt; i++) + { + sb.Append(Convert.ToChar(value[i])); + } + return sb.ToString(); + } + else if (Type == FREE_IMAGE_MDTYPE.FIDT_NOTYPE) + { + return null; + } + + Array array = Array.CreateInstance(idList[Type], Count); + void* src = (void*)FreeImage.GetTagValue(tag); + FreeImage.CopyMemory(array, src, Length); + return array; + } + } + set + { + SetValue(value); + } + } + + /// + /// Sets the value of the metadata. + /// In case value is of byte or byte[] is assumed. + /// In case value is of uint or uint[] is assumed. + /// + /// New data of the metadata. + /// True on success, false on failure. + /// + /// The data format is not supported. + /// + /// is null. + public bool SetValue(object value) + { + Type type = value.GetType(); + if (!typeList.ContainsKey(type)) + { + throw new NotSupportedException("The type of value is not supported"); + } + return SetValue(value, typeList[type]); + } + + /// + /// Sets the value of the metadata. + /// + /// New data of the metadata. + /// Type of the data. + /// True on success, false on failure. + /// + /// The data type is not supported. + /// + /// is null. + /// + /// and to not fit. + public bool SetValue(object value, FREE_IMAGE_MDTYPE type) + { + CheckDisposed(); + if ((!value.GetType().IsArray) && (!(value is string))) + { + Array array = Array.CreateInstance(value.GetType(), 1); + array.SetValue(value, 0); + return SetArrayValue(array, type); + } + return SetArrayValue(value, type); + } + + /// + /// Sets the value of this tag to the value of + /// using the given type. + /// + /// New value of the tag. + /// Data-type of the tag. + /// + /// + /// is a null reference. + /// + /// + /// is FIDT_ASCII and + /// is not String. + /// is not FIDT_ASCII and + /// is not Array. + /// + /// is FIDT_NOTYPE. + private unsafe bool SetArrayValue(object value, FREE_IMAGE_MDTYPE type) + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + + byte[] data = null; + + if (type == FREE_IMAGE_MDTYPE.FIDT_ASCII) + { + string tempValue = value as string; + if (tempValue == null) + { + throw new ArgumentException("value"); + } + Type = type; + Length = Count = (uint)tempValue.Length; + data = new byte[Length]; + + for (int i = 0; i < tempValue.Length; i++) + { + data[i] = (byte)tempValue[i]; + } + } + else if (type == FREE_IMAGE_MDTYPE.FIDT_NOTYPE) + { + throw new NotSupportedException("type is not supported."); + } + else + { + Array array = value as Array; + if (array == null) + { + throw new ArgumentException("value"); + } + + if (array.Length != 0) + if (!CheckType(array.GetValue(0).GetType(), type)) + throw new ArgumentException("The type of value is incorrect."); + + Type = type; + Count = (uint)array.Length; + Length = (uint)(array.Length * Marshal.SizeOf(idList[type])); + data = new byte[Length]; + FreeImage.CopyMemory(data, array, Length); + } + + return FreeImage.SetTagValue(tag, data); + } + + private static bool CheckType(Type dataType, FREE_IMAGE_MDTYPE type) + { + if (dataType != null) + switch (type) + { + case FREE_IMAGE_MDTYPE.FIDT_ASCII: + return dataType == typeof(string); + case FREE_IMAGE_MDTYPE.FIDT_BYTE: + return dataType == typeof(byte); + case FREE_IMAGE_MDTYPE.FIDT_DOUBLE: + return dataType == typeof(double); + case FREE_IMAGE_MDTYPE.FIDT_FLOAT: + return dataType == typeof(float); + case FREE_IMAGE_MDTYPE.FIDT_IFD: + return dataType == typeof(uint); + case FREE_IMAGE_MDTYPE.FIDT_LONG: + return dataType == typeof(uint); + case FREE_IMAGE_MDTYPE.FIDT_NOTYPE: + return false; + case FREE_IMAGE_MDTYPE.FIDT_PALETTE: + return dataType == typeof(RGBQUAD); + case FREE_IMAGE_MDTYPE.FIDT_RATIONAL: + return dataType == typeof(FIURational); + case FREE_IMAGE_MDTYPE.FIDT_SBYTE: + return dataType == typeof(sbyte); + case FREE_IMAGE_MDTYPE.FIDT_SHORT: + return dataType == typeof(ushort); + case FREE_IMAGE_MDTYPE.FIDT_SLONG: + return dataType == typeof(int); + case FREE_IMAGE_MDTYPE.FIDT_SRATIONAL: + return dataType == typeof(FIRational); + case FREE_IMAGE_MDTYPE.FIDT_SSHORT: + return dataType == typeof(short); + case FREE_IMAGE_MDTYPE.FIDT_UNDEFINED: + return dataType == typeof(byte); + } + return false; + } + + /// + /// Add this metadata to an image. + /// + /// Handle to a FreeImage bitmap. + /// True on success, false on failure. + public bool AddToImage(FIBITMAP dib) + { + CheckDisposed(); + if (dib.IsNull) + { + throw new ArgumentNullException("dib"); + } + if (Key == null) + { + throw new ArgumentNullException("Key"); + } + if (!selfCreated) + { + tag = FreeImage.CloneTag(tag); + if (tag.IsNull) + { + throw new Exception("FreeImage.CloneTag() failed."); + } + selfCreated = true; + } + if (!FreeImage.SetMetadata(Model, dib, Key, tag)) + { + return false; + } + FREE_IMAGE_MDMODEL _model = Model; + string _key = Key; + selfCreated = false; + FreeImage.DeleteTag(tag); + return FreeImage.GetMetadata(_model, dib, _key, out tag); + } + + /// + /// Gets a .NET PropertyItem for this metadata tag. + /// + /// The .NET PropertyItem. + public unsafe System.Drawing.Imaging.PropertyItem GetPropertyItem() + { + System.Drawing.Imaging.PropertyItem item = FreeImage.CreatePropertyItem(); + item.Id = ID; + item.Len = (int)Length; + item.Type = (short)Type; + FreeImage.CopyMemory(item.Value = new byte[item.Len], FreeImage.GetTagValue(tag), item.Len); + return item; + } + + /// + /// Converts the value of the object + /// to its equivalent string representation. + /// + /// The string representation of the value of this instance. + public override string ToString() + { + CheckDisposed(); + string fiString = FreeImage.TagToString(model, tag, 0); + + if (String.IsNullOrEmpty(fiString)) + { + return tag.ToString(); + } + else + { + return fiString; + } + } + + /// + /// Creates a deep copy of this . + /// + /// A deep copy of this . + public object Clone() + { + CheckDisposed(); + MetadataTag clone = new MetadataTag(); + clone.model = model; + clone.tag = FreeImage.CloneTag(tag); + clone.selfCreated = true; + return clone; + } + + /// + /// Tests whether the specified object is a instance + /// and is equivalent to this instance. + /// + /// The object to test. + /// true if is a instance + /// equivalent to this instance; otherwise, false. + public override bool Equals(object obj) + { + return ((obj is MetadataTag) && (Equals((MetadataTag)obj))); + } + + /// + /// Tests whether the specified instance is equivalent to this instance. + /// + /// A instance to compare to this instance. + /// true if equivalent to this instance; + /// otherwise, false. + public bool Equals(MetadataTag other) + { + return (this == other); + } + + /// + /// Returns a hash code for this structure. + /// + /// An integer value that specifies the hash code for this . + public override int GetHashCode() + { + return tag.GetHashCode(); + } + + /// + /// Compares this instance with a specified . + /// + /// An object to compare with this instance. + /// A 32-bit signed integer indicating the lexical relationship between the two comparands. + /// is not a . + public int CompareTo(object obj) + { + if (obj == null) + { + return 1; + } + if (!(obj is MetadataTag)) + { + throw new ArgumentException("obj"); + } + return CompareTo((MetadataTag)obj); + } + + /// + /// Compares the current instance with another object of the same type. + /// + /// An object to compare with this instance. + /// A 32-bit signed integer that indicates the relative order of the objects being compared. + public int CompareTo(MetadataTag other) + { + CheckDisposed(); + other.CheckDisposed(); + return tag.CompareTo(other.tag); + } + + /// + /// Releases all resources used by the instance. + /// + public void Dispose() + { + if (!disposed) + { + disposed = true; + if (selfCreated) + { + FreeImage.DeleteTag(tag); + tag = FITAG.Zero; + } + } + } + + /// + /// Gets whether this instance has already been disposed. + /// + public bool Disposed + { + get { return disposed; } + } + + /// + /// Throwns an in case + /// this instance has already been disposed. + /// + private void CheckDisposed() + { + if (disposed) + { + throw new ObjectDisposedException("The object has already been disposed."); + } + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/Palette.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/Palette.cs new file mode 100644 index 0000000..c5cdfbe --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/Palette.cs @@ -0,0 +1,422 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.IO; +using FreeImageAPI.Metadata; +using System.Runtime.InteropServices; +using System.Diagnostics; + +namespace FreeImageAPI +{ + /// + /// Provides methods for working with the standard bitmap palette. + /// + public sealed class Palette : MemoryArray + { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private GCHandle paletteHandle; + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private RGBQUAD[] array; + + /// + /// Initializes a new instance for the given FreeImage bitmap. + /// + /// Handle to a FreeImage bitmap. + /// is null. + /// is not + /// -or- + /// has more than 8bpp. + public Palette(FIBITMAP dib) + : base(FreeImage.GetPalette(dib), (int)FreeImage.GetColorsUsed(dib)) + { + if (dib.IsNull) + { + throw new ArgumentNullException("dib"); + } + if (FreeImage.GetImageType(dib) != FREE_IMAGE_TYPE.FIT_BITMAP) + { + throw new ArgumentException("dib"); + } + if (FreeImage.GetBPP(dib) > 8u) + { + throw new ArgumentException("dib"); + } + } + + /// + /// Initializes a new instance for the given FITAG that contains + /// a palette. + /// + /// The tag containing the palette. + /// is null. + /// is not + /// . + public Palette(FITAG tag) + : base(FreeImage.GetTagValue(tag), (int)FreeImage.GetTagCount(tag)) + { + if (FreeImage.GetTagType(tag) != FREE_IMAGE_MDTYPE.FIDT_PALETTE) + { + throw new ArgumentException("tag"); + } + } + + /// + /// Initializes a new instance for the given MetadataTag that contains + /// a palette. + /// + /// The tag containing the palette. + /// is null. + /// is not + /// . + public Palette(MetadataTag tag) + : base(FreeImage.GetTagValue(tag.tag), (int)tag.Count) + { + if (FreeImage.GetTagType(tag) != FREE_IMAGE_MDTYPE.FIDT_PALETTE) + { + throw new ArgumentException("tag"); + } + } + + /// + /// Initializes a new instance for the given array of that contains + /// a palette. + /// + /// A RGBQUAD array containing the palette data to initialize this instance. + public Palette(RGBQUAD[] palette) + { + unsafe + { + this.array = (RGBQUAD[])palette.Clone(); + this.paletteHandle = GCHandle.Alloc(array, GCHandleType.Pinned); + + base.baseAddress = (byte*)this.paletteHandle.AddrOfPinnedObject(); + base.length = (int)this.array.Length; + + // Create an array containing a single element. + // Due to the fact, that it's not possible to create pointers + // of generic types, an array is used to obtain the memory + // address of an element of T. + base.buffer = new RGBQUAD[1]; + // The array is pinned immediately to prevent the GC from + // moving it to a different position in memory. + base.handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); + // The array and its content have beed pinned, so that its address + // can be safely requested and stored for the whole lifetime + // of the instace. + base.ptr = (byte*)base.handle.AddrOfPinnedObject(); + } + } + + /// + /// Initializes a new instance for the given array of that contains + /// a palette. + /// + /// A Color array containing the palette data to initialize this instance. + public Palette(Color[] palette) + : this(RGBQUAD.ToRGBQUAD(palette)) + { + } + + /// + /// Initializes a new instance with the specified size. + /// + /// The size of the palette. + public Palette(int size) + : this(new RGBQUAD[size]) + { + } + + /// + /// Gets or sets the palette through an array of . + /// + public RGBQUAD[] AsArray + { + get + { + return Data; + } + set + { + Data = value; + } + } + + /// + /// Get an array of that the block of memory represents. + /// This property is used for internal palette operations. + /// + internal unsafe Color[] ColorData + { + get + { + EnsureNotDisposed(); + Color[] data = new Color[length]; + for (int i = 0; i < length; i++) + { + data[i] = Color.FromArgb((int)(((uint*)baseAddress)[i] | 0xFF000000)); + } + return data; + } + } + + /// + /// Returns the palette as an array of . + /// + /// The palette as an array of . + public RGBQUAD[] ToArray() + { + return Data; + } + + /// + /// Creates a linear palette based on the provided . + /// + /// The used to colorize the palette. + /// + /// Only call this method on linear palettes. + /// + public void Colorize(Color color) + { + Colorize(color, 0.5d); + } + + /// + /// Creates a linear palette based on the provided . + /// + /// The used to colorize the palette. + /// The position of the color within the new palette. + /// 0 < < 1. + /// + /// Only call this method on linear palettes. + /// + public void Colorize(Color color, double splitSize) + { + Colorize(color, (int)(length * splitSize)); + } + + /// + /// Creates a linear palette based on the provided . + /// + /// The used to colorize the palette. + /// The position of the color within the new palette. + /// 0 < < . + /// + /// Only call this method on linear palettes. + /// + public void Colorize(Color color, int splitSize) + { + EnsureNotDisposed(); + if (splitSize < 1 || splitSize >= length) + { + throw new ArgumentOutOfRangeException("splitSize"); + } + + RGBQUAD[] pal = new RGBQUAD[length]; + + double red = color.R; + double green = color.G; + double blue = color.B; + + int i = 0; + double r, g, b; + + r = red / splitSize; + g = green / splitSize; + b = blue / splitSize; + + for (; i <= splitSize; i++) + { + pal[i].rgbRed = (byte)(i * r); + pal[i].rgbGreen = (byte)(i * g); + pal[i].rgbBlue = (byte)(i * b); + } + + r = (255 - red) / (length - splitSize); + g = (255 - green) / (length - splitSize); + b = (255 - blue) / (length - splitSize); + + for (; i < length; i++) + { + pal[i].rgbRed = (byte)(red + ((i - splitSize) * r)); + pal[i].rgbGreen = (byte)(green + ((i - splitSize) * g)); + pal[i].rgbBlue = (byte)(blue + ((i - splitSize) * b)); + } + + Data = pal; + } + + /// + /// Creates a linear grayscale palette. + /// + public void CreateGrayscalePalette() + { + Colorize(Color.White, length - 1); + } + + /// + /// Creates a linear grayscale palette. + /// + /// true to create an inverse grayscale palette. + public void CreateGrayscalePalette(bool inverse) + { + Colorize(Color.White, inverse ? 0 : length - 1); + } + + /// + /// Creates a linear palette with the specified . + /// + /// + /// A linear grayscale palette contains all shades of colors from + /// black to white. This method creates a similar palette with the white + /// color being replaced by the specified color. + /// + /// The used to create the palette. + /// true to create an inverse palette. + public void CreateGrayscalePalette(Color color, bool inverse) + { + Colorize(color, inverse ? 0 : length - 1); + } + + /// + /// Reverses the palette. + /// + public void Reverse() + { + EnsureNotDisposed(); + if (array != null) + { + Array.Reverse(array); + } + else + { + RGBQUAD[] localArray = Data; + Array.Reverse(localArray); + Data = localArray; + } + } + + /// + /// Copies the values from the specified to this instance. + /// + /// The palette to copy from. + /// + /// is a null reference. + public void CopyFrom(Palette palette) + { + EnsureNotDisposed(); + if (palette == null) + { + throw new ArgumentNullException("palette"); + } + CopyFrom(palette.Data, 0, 0, Math.Min(palette.Length, this.Length)); + } + + /// + /// Copies the values from the specified to this instance, + /// starting at the specified . + /// + /// The palette to copy from. + /// The position in this instance where the values + /// will be copied to. + /// + /// is a null reference. + /// + /// is outside the range of valid indexes. + public void CopyFrom(Palette palette, int offset) + { + EnsureNotDisposed(); + CopyFrom(palette.Data, 0, offset, Math.Min(palette.Length, this.Length - offset)); + } + + /// + /// Saves this to the specified file. + /// + /// + /// A string that contains the name of the file to which to save this . + /// + public void Save(string filename) + { + using (Stream stream = new FileStream(filename, FileMode.Create, FileAccess.Write)) + { + Save(stream); + } + } + + /// + /// Saves this to the specified stream. + /// + /// + /// The where the image will be saved. + /// + public void Save(Stream stream) + { + Save(new BinaryWriter(stream)); + } + + /// + /// Saves this using the specified writer. + /// + /// + /// The used to save the image. + /// + public void Save(BinaryWriter writer) + { + EnsureNotDisposed(); + writer.Write(ToByteArray()); + } + + /// + /// Loads a palette from the specified file. + /// + /// The name of the palette file. + public void Load(string filename) + { + using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) + { + Load(stream); + } + } + + /// + /// Loads a palette from the specified stream. + /// + /// The stream to load the palette from. + public void Load(Stream stream) + { + Load(new BinaryReader(stream)); + } + + /// + /// Loads a palette from the reader. + /// + /// The reader to load the palette from. + public void Load(BinaryReader reader) + { + EnsureNotDisposed(); + unsafe + { + int size = length * sizeof(RGBQUAD); + byte[] data = reader.ReadBytes(size); + fixed (byte* src = data) + { + CopyMemory(baseAddress, src, data.Length); + } + } + } + + /// + /// Releases allocated handles associated with this instance. + /// + /// true to release managed resources. + protected override void Dispose(bool disposing) + { + if (paletteHandle.IsAllocated) + paletteHandle.Free(); + array = null; + + base.Dispose(disposing); + } + } +} \ No newline at end of file diff --git a/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/PluginRepository.cs b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/PluginRepository.cs new file mode 100644 index 0000000..cc658a7 --- /dev/null +++ b/#ThirdParty/FreeImage/Wrapper/FreeImage.NET/cs/Library/Classes/PluginRepository.cs @@ -0,0 +1,449 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; + +namespace FreeImageAPI.Plugins +{ + /// + /// Class representing all registered in FreeImage. + /// + public static class PluginRepository + { + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private static readonly List plugins = null; + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private static readonly List localPlugins = null; + + static PluginRepository() + { + plugins = new List(FreeImage.GetFIFCount()); + localPlugins = new List
+ /// FreeImageBitmap bitmap = new FreeImageBitmap(@"C:\Pictures\picture.bmp"); + /// if (bitmap.ColorDepth == 32) + /// { + /// Scanline<RGBQUAD> scanline = bitmap.GetScanline<RGBQUAD>(0); + /// foreach (RGBQUAD pixel in scanline) + /// { + /// Console.WriteLine(pixel); + /// } + /// } + ///
+ /// FreeImageBitmap bitmap = new FreeImageBitmap(@"C:\Pictures\picture.bmp"); + /// if (bitmap.ColorDepth == 32) + /// { + /// Scanline<RGBQUAD> scanline = (Scanline<RGBQUAD>)bitmap.GetScanline(0); + /// foreach (RGBQUAD pixel in scanline) + /// { + /// Console.WriteLine(pixel); + /// } + /// } + ///