summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--html/en/history.html2625
-rw-r--r--include/im_file.h2
-rw-r--r--include/im_format.h52
-rw-r--r--include/im_format_raw.h2
-rw-r--r--mak.vc8/im.sln7
-rw-r--r--mak.vc8/im_capture.vcproj3
-rw-r--r--mak.vc8/im_wmv.vcproj3
-rw-r--r--src/im_file.cpp82
-rw-r--r--src/im_fileraw.cpp6
-rw-r--r--src/im_format.cpp38
-rw-r--r--src/im_format_avi.cpp61
-rw-r--r--src/im_format_bmp.cpp52
-rw-r--r--src/im_format_ecw.cpp40
-rw-r--r--src/im_format_gif.cpp49
-rw-r--r--src/im_format_ico.cpp52
-rw-r--r--src/im_format_jp2.cpp48
-rw-r--r--src/im_format_jpeg.cpp49
-rw-r--r--src/im_format_krn.cpp45
-rw-r--r--src/im_format_led.cpp50
-rw-r--r--src/im_format_pcx.cpp56
-rw-r--r--src/im_format_png.cpp49
-rw-r--r--src/im_format_pnm.cpp48
-rw-r--r--src/im_format_ras.cpp52
-rw-r--r--src/im_format_raw.cpp54
-rw-r--r--src/im_format_sgi.cpp49
-rw-r--r--src/im_format_tga.cpp57
-rw-r--r--src/im_format_tiff.cpp47
-rw-r--r--src/im_format_wmv.cpp65
-rw-r--r--test/im_copy.cpp2
-rw-r--r--test/im_copy.vcproj160
30 files changed, 3041 insertions, 864 deletions
diff --git a/html/en/history.html b/html/en/history.html
index 6030df2..46b7874 100644
--- a/html/en/history.html
+++ b/html/en/history.html
@@ -1,361 +1,2280 @@
-<!doctype HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns="http://www.w3.org/TR/REC-html40">
<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 12">
+<meta name=Originator content="Microsoft Word 12">
+<link rel=File-List href="history_arquivos/filelist.xml">
<title>History</title>
-<meta http-equiv="Content-Language" content="en-us">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<link rel="stylesheet" type="text/css" href="../style.css">
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+ <o:Author>scuri</o:Author>
+ <o:LastAuthor>scuri</o:LastAuthor>
+ <o:Revision>2</o:Revision>
+ <o:TotalTime>1</o:TotalTime>
+ <o:Created>2008-12-03T15:48:00Z</o:Created>
+ <o:LastSaved>2008-12-03T15:49:00Z</o:LastSaved>
+ <o:Pages>3</o:Pages>
+ <o:Words>2349</o:Words>
+ <o:Characters>12687</o:Characters>
+ <o:Lines>105</o:Lines>
+ <o:Paragraphs>30</o:Paragraphs>
+ <o:CharactersWithSpaces>15006</o:CharactersWithSpaces>
+ <o:Version>12.00</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]-->
+<link rel=themeData href="history_arquivos/themedata.thmx">
+<link rel=colorSchemeMapping href="history_arquivos/colorschememapping.xml">
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:Zoom>125</w:Zoom>
+ <w:SpellingState>Clean</w:SpellingState>
+ <w:GrammarState>Clean</w:GrammarState>
+ <w:TrackMoves>false</w:TrackMoves>
+ <w:TrackFormatting/>
+ <w:HyphenationZone>21</w:HyphenationZone>
+ <w:ValidateAgainstSchemas/>
+ <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+ <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+ <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+ <w:DoNotPromoteQF/>
+ <w:LidThemeOther>PT-BR</w:LidThemeOther>
+ <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+ <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
+ <w:Compatibility>
+ <w:BreakWrappedTables/>
+ <w:SnapToGridInCell/>
+ <w:WrapTextWithPunct/>
+ <w:UseAsianBreakRules/>
+ <w:DontGrowAutofit/>
+ <w:SplitPgBreakAndParaMark/>
+ <w:DontVertAlignCellWithSp/>
+ <w:DontBreakConstrainedForcedTables/>
+ <w:DontVertAlignInTxbx/>
+ <w:Word11KerningPairs/>
+ <w:CachedColBalance/>
+ </w:Compatibility>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="&#45;-"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr></w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
+ DefSemiHidden="true" DefQFormat="false" DefPriority="99"
+ LatentStyleCount="267">
+ <w:LsdException Locked="false" Priority="0" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 2"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 3"/>
+ <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="heading 4"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
+ <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
+ <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
+ <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
+ <w:LsdException Locked="false" Priority="10" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Title"/>
+ <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
+ <w:LsdException Locked="false" Priority="11" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
+ <w:LsdException Locked="false" Priority="22" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
+ <w:LsdException Locked="false" Priority="20" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
+ <w:LsdException Locked="false" Priority="59" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Table Grid"/>
+ <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
+ <w:LsdException Locked="false" Priority="1" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 1"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
+ <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
+ <w:LsdException Locked="false" Priority="34" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
+ <w:LsdException Locked="false" Priority="29" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
+ <w:LsdException Locked="false" Priority="30" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 1"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 2"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 2"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 3"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 3"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 4"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 4"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 5"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 5"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light List Accent 6"/>
+ <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
+ <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Dark List Accent 6"/>
+ <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
+ <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+ UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="19" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
+ <w:LsdException Locked="false" Priority="21" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
+ <w:LsdException Locked="false" Priority="31" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
+ <w:LsdException Locked="false" Priority="32" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
+ <w:LsdException Locked="false" Priority="33" SemiHidden="false"
+ UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
+ <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
+ <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
+ </w:LatentStyles>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href="../style.css">
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:Wingdings;
+ panose-1:5 0 0 0 0 0 0 0 0 0;
+ mso-font-charset:2;
+ mso-generic-font-family:auto;
+ mso-font-pitch:variable;
+ mso-font-signature:0 268435456 0 0 -2147483648 0;}
+@font-face
+ {font-family:"Cambria Math";
+ panose-1:0 0 0 0 0 0 0 0 0 0;
+ mso-font-charset:1;
+ mso-generic-font-family:roman;
+ mso-font-format:other;
+ mso-font-pitch:variable;
+ mso-font-signature:0 0 0 0 0 0;}
+@font-face
+ {font-family:Consolas;
+ panose-1:2 11 6 9 2 2 4 3 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:roman;
+ mso-font-format:other;
+ mso-font-pitch:auto;
+ mso-font-signature:0 0 0 0 0 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ margin:0cm;
+ margin-bottom:.0001pt;
+ line-height:normal;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+h1
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Título 1 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ margin-left:0cm;
+ text-align:center;
+ line-height:normal;
+ mso-pagination:widow-orphan;
+ mso-outline-level:1;
+ font-size:24.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+h2
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Título 2 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ margin-left:0cm;
+ line-height:normal;
+ mso-pagination:widow-orphan;
+ mso-outline-level:2;
+ font-size:18.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+h3
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Título 3 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ margin-left:0cm;
+ line-height:normal;
+ mso-pagination:widow-orphan;
+ mso-outline-level:3;
+ background:#E1E1E1;
+ border:none;
+ mso-border-alt:solid gray .75pt;
+ padding:0cm;
+ mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt;
+ font-size:13.5pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+h4
+ {mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Título 4 Char";
+ mso-margin-top-alt:auto;
+ margin-right:24.0pt;
+ mso-margin-bottom-alt:auto;
+ margin-left:24.0pt;
+ line-height:normal;
+ mso-pagination:widow-orphan;
+ mso-outline-level:4;
+ background:#E1E1E1;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+p
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+pre
+ {mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-link:"Pré-formatação HTML Char";
+ margin-top:0cm;
+ margin-right:36.0pt;
+ margin-bottom:0cm;
+ margin-left:36.0pt;
+ margin-bottom:.0001pt;
+ line-height:125%;
+ mso-pagination:widow-orphan;
+ tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+ background:#CEE7FF;
+ border:none;
+ mso-border-alt:solid #62A0FF .75pt;
+ padding:0cm;
+ mso-padding-alt:8.0pt 8.0pt 8.0pt 8.0pt;
+ font-size:11.0pt;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+span.Ttulo1Char
+ {mso-style-name:"Título 1 Char";
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Título 1";
+ mso-ansi-font-size:14.0pt;
+ mso-bidi-font-size:14.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#365F91;
+ mso-themecolor:accent1;
+ mso-themeshade:191;
+ font-weight:bold;}
+span.Ttulo2Char
+ {mso-style-name:"Título 2 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Título 2";
+ mso-ansi-font-size:13.0pt;
+ mso-bidi-font-size:13.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;}
+span.Ttulo3Char
+ {mso-style-name:"Título 3 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Título 3";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;}
+span.Ttulo4Char
+ {mso-style-name:"Título 4 Char";
+ mso-style-noshow:yes;
+ mso-style-priority:9;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Título 4";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;
+ font-style:italic;}
+span.Pr-formataoHTMLChar
+ {mso-style-name:"Pré-formatação HTML Char";
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Pré-formatação HTML";
+ font-family:"Consolas","serif";
+ mso-ascii-font-family:Consolas;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ mso-hansi-font-family:Consolas;}
+p.info, li.info, div.info
+ {mso-style-name:info;
+ mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ margin-left:36.0pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.hometitle, li.hometitle, div.hometitle
+ {mso-style-name:hometitle;
+ mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ text-align:center;
+ mso-pagination:widow-orphan;
+ font-size:36.0pt;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ font-weight:bold;}
+p.homedescription, li.homedescription, div.homedescription
+ {mso-style-name:homedescription;
+ mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0cm;
+ mso-margin-bottom-alt:auto;
+ text-align:center;
+ mso-pagination:widow-orphan;
+ font-size:20.0pt;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+p.homeversion, li.homeversion, div.homeversion
+ {mso-style-name:homeversion;
+ mso-style-unhide:no;
+ margin:7.5pt;
+ text-align:center;
+ mso-pagination:widow-orphan;
+ font-size:16.0pt;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;}
+span.SpellE
+ {mso-style-name:"";
+ mso-spl-e:yes;}
+span.GramE
+ {mso-style-name:"";
+ mso-gram-e:yes;}
+.MsoChpDefault
+ {mso-style-type:export-only;
+ mso-default-props:yes;
+ font-size:10.0pt;
+ mso-ansi-font-size:10.0pt;
+ mso-bidi-font-size:10.0pt;}
+@page Section1
+ {size:595.3pt 841.9pt;
+ margin:70.85pt 3.0cm 70.85pt 3.0cm;
+ mso-header-margin:35.4pt;
+ mso-footer-margin:35.4pt;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+ /* List Definitions */
+ @list l0
+ {mso-list-id:248278118;
+ mso-list-template-ids:-2039334700;}
+@list l0:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:36.0pt;
+ mso-level-number-position:left;
+ text-indent:-18.0pt;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l1
+ {mso-list-id:691953545;
+ mso-list-template-ids:-600932866;}
+@list l1:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:36.0pt;
+ mso-level-number-position:left;
+ text-indent:-18.0pt;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l2
+ {mso-list-id:1174102256;
+ mso-list-template-ids:1571087114;}
+@list l2:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:36.0pt;
+ mso-level-number-position:left;
+ text-indent:-18.0pt;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l3
+ {mso-list-id:1320421079;
+ mso-list-template-ids:1204459546;}
+@list l3:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:36.0pt;
+ mso-level-number-position:left;
+ text-indent:-18.0pt;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l4
+ {mso-list-id:1384476858;
+ mso-list-template-ids:-1023539112;}
+@list l4:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:36.0pt;
+ mso-level-number-position:left;
+ text-indent:-18.0pt;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l5
+ {mso-list-id:1425105138;
+ mso-list-template-ids:-408143372;}
+@list l5:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:36.0pt;
+ mso-level-number-position:left;
+ text-indent:-18.0pt;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+ol
+ {margin-bottom:0cm;}
+ul
+ {margin-bottom:0cm;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Tabela normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
+ mso-para-margin:0cm;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";}
+</style>
+<![endif]-->
+<meta http-equiv=Content-Language content=en-us>
+<!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="2050"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
</head>
-<body>
-
-<h1>History of Changes</h1>
-<h3 dir="ltr">CVS (18/Nov/2008)</h3>
-<ul>
- <li><span style="color: #008000">Changed:</span> function <strong>
- imColorHSI_Smax</strong> removed from public, now it is used only
- internally. HSI space now uses S already normalized between 0-Smax.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imColorHSI2RGB</strong>
- conversion.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imConvertDataType</strong>
- when converting a floating point to integer, there were rounding problems.</li>
-</ul>
-<h3 dir="ltr">Version 3.4 (14/Oct/2008)</h3>
-<ul>
- <li><span style="color: #0000FF">New:</span> imlua_avi, imlua_wmv and imlua_jp2 libraries so the
- respective formats can be dynamically loaded
- using require.</li>
- <li><span style="color: #0000FF"><span style="color: #008000">Changed</span>:</span>
- <strong>
- <span style="color: #FF0000">IMPORTANT</span></strong> -
- the &quot;imlua_cd&quot; library moved from IM to CD under the name &quot;cdluaim&quot;.</li>
- <li><span style="color: #0000FF"><span style="color: #008000">Changed</span>:</span>
- <strong>
- <span style="color: #FF0000">IMPORTANT</span></strong> - the support services
- (Downloads, Mailing List and CVS) moved from LuaForge to SourceForge.</li>
- <li><span style="color: #008000">Changed:</span> All dll8 and dll9 DLLs now
- have a Manifest file that specifies the correct MSVCR*.DLL.</li>
- <li><span style="color: #008000">Changed:</span>
- Makefiles for UNIX now uses a compact version of Tecmake that does not need
- any installation, just type &quot;make&quot;.</li>
- <li><span style="color: #008000">Changed</span>: premake files are used now
- only internally and were removed from the distribution.</li>
- <li><span style="color: #0000FF"><span style="color: #008000">Changed</span>:</span>
- Copyright notice modified to reflect the registration at INPI (National
- Institute of Intellectual Property in Brazil). License continues under the
- same terms.</li>
- <li><span style="color: #FF0000">Fixed:</span> reviewed and fixed the parameter
- checking of all IMLua processing functions. Also reviewed all IMLua
- parameter checking. Thanks to Lucas Lorensi.</li>
- <li><span style="color: #FF0000">Fixed:</span> loading of TIFF format with
- old JPEG compression.</li>
- <li><span style="color: #FF0000">Fixed:</span> loading and saving of PNM
- format when data in textual format and gray values are greatter than 255.</li>
- <li><span style="color: #FF0000">Fixed:</span> Bicubic and Zero order
- interpolation for all geometric operations for pixels near the image border
- when increasing image size.</li>
- <li><span style="color: #FF0000">Fixed:</span> Lua samples.</li>
- <li><span style="color: #FF0000">Fixed:</span> ICON format in 64 bits Linux.</li>
-</ul>
-<h3 dir="ltr">Version 3.3 (26/Nov/2007)</h3>
-<ul>
- <li><span style="color: #0000FF">New:</span> read support for ECW using the
- ERMapper ECW JPEG 2000 SDK.</li>
- <li><span style="color: #008000">Changed:</span> libTIFF updated to version
- 3.8.2.</li>
- <li><span style="color: #008000">Changed:</span> libPNG updated to version
- 1.2.22.</li>
- <li><span style="color: #008000">Changed:</span> libJasper updated to
- libGeoJasper 1.4.0 (using Jasper version 1.900.1). Better support for
- counter progress, Geo tags and several speed improvements. New GeoTIFFBox
- and XMLPacket attributes.</li>
- <li><span style="color: #008000">Changed:</span> renamed macro <b>imPutImage</b>
- to <b>imcdCanvasPutImage</b>, and added canvas as the first parameter. </li>
- <li><span style="color: #008000">Changed:</span> renamed
- the <b>imImage</b> Lua
- methods to <i><strong>image</strong></i><b>:cdCanvasPutImageRect</b>, <i>
- <strong>image</strong></i><b>:wdCanvasPutImageRect</b>
- and <i><strong>image</strong></i><b>:cdCanvasGetImage</b>, and added canvas as the first parameter. Now <i>imlua_cd</i>
- depends on <i>cdlua</i> from CD version 5.0.</li>
- <li><span style="color: #008000">Changed:</span> metatable names in Lua are
- now the same as the C struct names.</li>
- <li><span style="color: #008000">Changed:</span> new read EXIF tags support
- in TIFF format (no write support yet). Renamed attributes &quot;GeoTransMatrix&quot;
- and &quot;IntergraphMatrix&quot;, to &quot;GeoTransformationMatrix&quot; and &quot;Intergraph
- TransformationMatrix&quot; for libGeoTIFF compatibility. Better support for
- known TIFF tags. New support for reading one band of a multiband gray image
- in TIFF format. New support for DNG files.</li>
- <li><span style="color: #FF0000">Fixed:</span><strong> imConvertDataType</strong>
- gamma function when converting real to/from integer.</li>
- <li><span style="color: #FF0000">Fixed:</span><strong> </strong>small error at
- the image border when resampling, rotating or other geometric operations.</li>
- <li><span style="color: #FF0000">Fixed:</span><strong> </strong>
- <b>imProcessCanny</b> invalid division by zero when input image is all zero.</li>
- <li><span style="color: #FF0000">Fixed:</span><strong> </strong>
- <b>imFileReadImageInfo</b> when loading MAP images with a scrambled gray
- palette. They were incorrectly converted to GREY.</li>
- <li><span style="color: #FF0000">Fixed:</span><strong> </strong>
- support for IM_ALPHA and 32 bpp in ICO format.</li>
- <li><span style="color: #FF0000">Fixed:</span><strong> </strong>
- number of lines returned in <b>imProcessHoughLinesDraw</b>.</li>
-</ul>
-<h3 dir="ltr">Version 3.2 (24/Nov/2006)</h3>
-<ul>
- <li><span style="color: #0000FF">New:</span> <strong>imProcessRotateRef</strong> to rotate relative to a reference point.</li>
- <li><span style="color: #0000FF">New:</span> geometric distortion <strong>imProcessSwirl</strong>.</li>
- <li><span style="color: #0000FF">New:</span> <strong>imProcessInterlaceSplit</strong>.</li>
- <li><span style="color: #0000FF">New:</span> function <strong>imGaussianKernelSize2StdDev</strong>.</li>
- <li><span style="color: #0000FF">New:</span> convolutions <strong>imProcessBarlettConvolve</strong>,
- <strong>imProcessPrewittConvolve</strong>, <strong>imProcessSplineEdgeConvolve</strong>,
- <strong>imProcessConvolveDual</strong> and <strong>imProcessConvolveSep</strong>. </li>
- <li><span style="color: #0000FF">New:</span> &quot;im_kernel.h&quot; module with simple functions to create know pre-defined kernels like sobel, laplacian, gaussian,
- etc.</li>
- <li><span style="color: #0000FF">New:</span> <strong>imVideoCaptureSetInOut</strong> to control input and output in capture devices.</li>
- <li><span style="color: #0000FF">New:</span> function <strong>imBinMemoryRelease</strong> to release internal memory allocated
- by the BinMemory file when saving.</li>
- <li><span style="color: #0000FF">New:</span> functions for capture device information:
- <strong>imVideoCaptureDeviceExDesc</strong>, <strong>imVideoCaptureDevicePath</strong> and
- <strong>imVideoCaptureDeviceVendorInfo</strong>.</li>
- <li><span style="color: #0000FF">New:</span> function <strong>imFileOpenAs</strong>
- to open a file of a specific format.</li>
- <li><span style="color: #0000FF">New:</span> functions <strong>
- imFormatRegisterInternal</strong> and <strong>imFormatRemoveAll</strong> to
- control format registration.</li>
- <li><span style="color: #008000">Changed:</span> <strong>imProcessGaussianConvolve</strong> to used separable convolution and now is stddev is negative will use its
- magnitude as the kernel size. Removed Rep functions <strong>imProcessGaussianConvolveRep</strong>,
- <strong>imProcessDiffOfGaussianConvolveRep</strong> and
- <strong>imGaussianStdDev2Repetitions</strong>.</li>
- <li><span style="color: #008000">Changed:</span> <strong>imProcessBlend</strong>
- to use an image instead of a constant. Old function renamed to <strong>
- imProcessBlendConst</strong>.</li>
- <li><span style="color: #008000">Changed:</span> <strong>imFileHandle</strong> prototype. Now the function has an index parameter to specify which handle it should return.
- index=0 is always an imBinFile* handle. Use index=1 or greater to return other internal handles that are format
- dependent.</li>
- <li><span style="color: #008000">Changed:</span> the Removed the include &quot;im.h&quot;
- to not include &quot;im_lib.h&quot;. &quot;im_lib.h&quot; must be included when necessary.</li>
- <li><span style="color: #008000">Changed:</span> <strong>imAnalyzeMeasureArea</strong> and
- <strong>imAnalyzeMeasurePerimeter</strong> prototypes to include the number of regions as a
- parameter. Fixed: these functions to internally initialize the results array to zero (this was necessary and not
- documented).</li>
- <li><span style="color: #008000">Changed:</span> <strong>imProcessFlip</strong>
- and <strong>imProcessMirror</strong> so they can be done in-place.</li>
- <li><span style="color: #FF0000">Fixed:</span> missing implementation of
- <strong>imVideoCaptureOneFrame</strong> in Lua 5.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imAnalyzeFindRegions</strong> when pixel is at the width-1 column.</li>
- <li><span style="color: #FF0000">Fixed:</span> file format identification when
- <strong>TIFF</strong> identification failed was not closing the file.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imAnalyzeMeasurePerimeter</strong> when perimeter line is at the first or last lines. Thanks to Takeshi Mitsunaga.</li>
- <li><span style="color: #FF0000">Fixed:</span> invalid return value in <strong>imVideoCaptureConnect</strong> in Lua 5.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessRotate</strong> for IM_MAP images.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>Lua</strong> binding of
- <strong>imFileImageSave</strong>, wrong parameters order. New: image:Save(filename, format) alias for imImage
- objects.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>BMP</strong> format implementation when reading and writing RGBA 32 bits images.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imFileLoadImageFrame</strong> and
- <strong>imFileLoadBitmapFrame</strong> index parameter in Lua.</li>
- <li><span style="color: #FF0000">Fixed:</span> alpha channel allocation in imImage.</li>
-</ul>
-<h3>Version 3.1 (12/Dez/2005)</h3>
-<ul>
- <li><span style="color: #0000FF">New:</span> Download, Discussion List, Submission of Bugs, Support Requests and Feature Requests, are now available thanks
- to the LuaForge site.</li>
- <li><span style="color: #0000FF">New:</span> Binding for Lua 5</li>
- <li><span style="color: #0000FF">New:</span> support for alpha in imImage.</li>
- <li><span style="color: #0000FF">New:</span> organization of the documentation.</li>
- <li><span style="color: #0000FF">New:</span> in ICON format the TransparencyIndex is used to for IM_MAP images without an alpha
- channel.</li>
- <li><span style="color: #0000FF">New:</span> video capture functions: <strong>imVideoCaptureFormatCount</strong>,
- <strong>imVideoCaptureGetFormat</strong>
- and <strong>imVideoCaptureSetFormat</strong>, to access the available capture video formats.</li>
- <li><span style="color: #0000FF">New:</span> functions <strong>imFileLoadImageFrame</strong> and
- <strong>imFileLoadBitmapFrame</strong> to reuse the
- image data when loading.</li>
- <li><span style="color: #0000FF">New:</span> function <strong>imFileImageSave</strong>.</li>
- <li><span style="color: #0000FF">New:</span> function <strong>imImageCreateBased</strong>.</li>
- <li><span style="color: #0000FF">New:</span> <strong>imProcessInsert</strong>.</li>
- <li><span style="color: #0000FF">New:</span> compression functions <strong>imCompressDataLZF</strong> and
- <strong>imCompressDataUnLZF</strong>, using
- libLZF.</li>
- <li><span style="color: #0000FF">New:</span> module for imBinFile, <strong>IM_FILEHANDLE</strong> that allows to access an already opened file using the
- system file handle as file name. Thanks to Frederico Abraham.</li>
- <li><span style="color: #008000">Changed:</span> in JPEG file format YcbCr are now automatically converted to RGB when loaded. RGB images were already
- automatically converted to YCbCr when saved. Now this behavior can be controlled by the AutoYCbCr
- attribute.</li>
- <li><span style="color: #008000">Changed:</span> the <strong>imAnalyzeFindRegions</strong> to include an additional parameter that control if regions
- touching the border are computed or not. The function <strong>imProcessPrune</strong> now will only eliminate the
- regions in the selected size range.</li>
- <li><span style="color: #008000">Changed:</span> third party libraries, updated to newest versions: libExif, libTIFF, libPNG and zlib. Added OLD JPEG
- support in libTIFF.</li>
- <li>
- <span style="color: #008000">Changed:</span> optimization flags to ON when building the library in all platforms.</li>
- <li><span style="color: #008000">Changed:</span> <strong>imProcessPerimeterLine</strong>,
- <strong>imAnalyzeMeasurePerimeter</strong>,
- <strong>imAnalyzeMeasurePerimArea</strong>, <strong>imAnalyzeMeasureCentroid</strong> and
- <strong>imAnalyzeMeasurePrincipalAxis</strong> to consider pixels that touch the borders.</li>
- <li><span style="color: #008000">Changed:</span> macro name <strong>cdPutBitmap</strong> to
- <strong>imPutBitmap</strong>.</li>
- <li><span style="color: #008000">Changed:</span> function names imImageLoad and
- <strong>imImageLoadBitmap</strong>, to
- <strong>imFileImageLoad</strong> and <strong>imFileImageLoadBitmap</strong>.</li>
- <li><span style="color: #FF0000">Fixed:</span> overflow in <strong>imCalcImageStatistics</strong> fo IM_INT and IM_USHORT images.</li>
- <li><span style="color: #FF0000">Fixed:</span> error management in system file I/O in
- <strong>UNIX</strong>.</li>
- <li><span style="color: #FF0000">Fixed:</span> some small defines for 64-bits compatibility in libExif, libPNG and libJPEG.</li>
- <li><span style="color: #FF0000">Fixed:</span> incorrect interpretation of 16 bit data from
- <strong>PNG</strong> files.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imFileReadImageInfo</strong> can be called many times with the same index that will return the
- correct result without accessing the file again.</li>
- <li><span style="color: #FF0000">Fixed:</span> small bug in sample <strong>iupglcap</strong>.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>TIFF</strong> format read for images with multiple bands in ExtraSamples.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>ICON</strong> format can_sequence was 0.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessMergeHSI</strong> and
- <strong>imProcessSplitHSI</strong> documentation, and
- implementation for <strong>IM_BYTE</strong> images.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessRangeContrastThreshold</strong>,
- <strong>imProcessLocalMaxThreshold</strong> and
- <strong>imProcessRankClosestConvolve</strong> when processing near the border.</li>
- <li><span style="color: #FF0000">Fixed:</span> invalid file permissions in UNIX when saving a new file.</li>
- <li><span style="color: #FF0000">Fixed:</span> name for <strong>imProcessLocalMaxThresEstimate</strong>.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessReduceBy4</strong> for images with odd width and/or height.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imAttribTableSet</strong> when replacing an attribute (thanks to Takeshi Mitsunaga).</li>
- <li><span style="color: #FF0000">Fixed:</span> memory leaks in <strong>imConvertToBitmap</strong> and
- <strong>imConvertDataType</strong> (thanks to
- Takeshi Mitsunaga).</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessZeroCrossing</strong> for the last pixel column (thanks to Takeshi Mitsunaga). Also
- fixed for some crossings that were lost.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessGrayMorphConvolve</strong> for
- <strong>IM_FLOAT</strong> images with
- <strong>IM_FLOAT</strong> kernel (thanks to Takeshi Mitsunaga).</li>
-</ul>
-<h3>Version 3.0.3 (14/Oct/2004)</h3>
-<ul>
- <li><span style="color: #0000FF">New:</span> Image Transform <strong>imProcessDistanceTransform</strong>.</li>
- <li><span style="color: #0000FF">New:</span> group of functions Image Analysis:
- <strong>imAnalyzeFindRegions</strong>, <strong>imAnalyzeMeasureArea</strong>,
- <strong>imAnalyzeMeasurePerimArea</strong>, <strong>imAnalyzeMeasureCentroid</strong>,
- <strong>imAnalyzeMeasurePrincipalAxis</strong>, <strong>imAnalyzeMeasureHoles</strong>, imProcessPerimeterLine,
- <strong>imAnalyzeMeasurePerimeter</strong>, <strong>imProcessPrune</strong>,
- <strong>imProcessFillHoles</strong>.</li>
- <li><span style="color: #0000FF">New:</span> <strong>imConvertMapToRGB</strong> to help loading data as RGB.</li>
- <li><span style="color: #0000FF">New:</span> sample iupglcap.</li>
- <li><span style="color: #0000FF">New:</span> <strong>imProcessRenderChessboard</strong> and
- <strong>imProcessRenderGrid</strong>.</li>
- <li><span style="color: #008000">Changed:</span> <strong>imProcessThreshold</strong>,
- <strong>imProcessRangeContrastThreshold</strong> and <strong>imProcessLocalMaxThreshold</strong> now also supports
- <strong>IM_USHORT</strong> and <strong>IM_INT</strong>
- data types. </li>
- <li><span style="color: #008000">Changed:</span> the default color conversion to binary
- so it can be done for all color spaces.</li>
- <li><span style="color: #008000">Changed:</span> im_process.h to split into 4 files: im_process_pont.h,
- im_process_loc.h, im_process_glo.h, im_process_ana.h. But it still
- exists and includes the new files for compatibility.</li>
- <li><span style="color: #008000">Changed:</span> the border extensions in several types of convolution. Rank convolution do not extend the borders. Binary
- morphology use zero extension. Gray morphology do not extend the borders.</li>
- <li><span style="color: #FF0000">Fixed:</span> file read with bitmap conversion when original data changes only data type. </li>
- <li><span style="color: #FF0000">Fixed:</span> rank convolution operations that did not accept even kernel sizes.</li>
- <li><span style="color: #FF0000">Fixed:</span> <strong>imProcessHoughLinesDraw</strong> that was ignoring some lines.</li>
-</ul>
-<h3>Version 3.0.2 (25/Aug/2004)</h3>
-
- <p>- <span style="color: #0000FF">New:</span> utility functions <b><b>imPaletteHighContrast</b></b>, <b>
- <b>imImageLoadImage</b></b> and <b>
- <b>imImageLoadBitmap</b></b>. <br>
- - <span style="color: #0000FF">New:</span> operation <b><b>imProcessNormalizeComponents</b></b>.<br>
- - <span style="color: #008000">Changed:</span> name <b><b>imProcessGaussianConvolve</b></b> to <b>
- <b>imProcessGaussianConvolveRep</b></b>. New:
- operation <b><b>imProcessGaussianConvolve</b></b> that uses a float kernel.
- New: utility functions <b>
- <b>imGaussianStdDev2Repetitions</b></b> and <b><b>imGaussianStdDev2KernelSize</b></b>.<br>
- - <span style="color: #008000">Changed:</span> name <b><b>imProcessDiffOfGaussianConvolve</b></b> to <b>
- <b>imProcessDiffOfGaussianConvolveRep</b></b>.
- New: operation <b><b>imProcessDiffOfGaussianConvolve</b></b> that uses a float kernel. <br>
- - <span style="color: #008000">Changed:</span> <b>IM_GAMUT_BRIGHTCONT</b>
- parameters to the interval [-100,100]. Fixed: <b>
- <b>IM_GAMUT_EXPAND</b></b> and <b><b>IM_GAMUT_BRIGHTCONT</b></b> normalization.<br>
- - <span style="color: #008000">Changed:</span> logical operations, flag <b> <b>IM_BIT_NOT </b>
- </b>replaced by operation <b><b>imProcessBitwiseNot</b></b>.<br>
- - <span style="color: #008000">Changed:</span> <b>imImageSetAttribute</b> count can be -1 for zero terminated data.<br>
- - <span style="color: #FF0000">Fixed:</span> operations <b><b>imProcessBitwiseNot</b></b> and <b>
- <b>imProcessNegative</b></b> for <b><b>IM_BINARY</b></b> images.<br>
- - <span style="color: #FF0000">Fixed:</span> the <b><b>color_mode_flags</b></b> parameter interpretation by <b>
- <b>imFileReadImageData</b></b>.
- <br>
- - <span style="color: #FF0000">Fixed:</span> <b>imProcessEqualizeHistogram</b> and <b>
- <b>imProcessExpandHistogram</b></b> for
- color images. <br>
- - <span style="color: #FF0000">Fixed:</span> <b>imProcessMultipleStdDev</b>.<br>
- - <span style="color: #FF0000">Fixed:</span> <b>imProcessDifusionErrThreshold</b> for <b>
- <b>IM_GRAY</b></b> images.<br>
- - <span style="color: #FF0000">Fixed:</span> &quot;<b><b>KRN</b></b>&quot; format, internal format is topdown.<br>
- - <span style="color: #FF0000">Fixed:</span> initialization of TGA image_count.</p>
-
-<h3>Version 3.0.1 (22/Apr/2004)</h3>
-
- <p>- Improved compatibility with the old version, it was missing the load of Map images with <b>
- <b>imLoadRGB</b></b>.<br>
- - The FFTW code was from version 2.1.3, not from 2.1.5 as suposed, it was updated. The FFT functions were condensed in
- only one file with an &quot;#ifdef&quot; for FFTW version 2 and 3. The FFT functions also were renamed to remove the &quot;W&quot; that
- belongs only to the FFTW library.<br>
- - The <b><b>SetAttribute</b></b> functions now accept NULL in data to remove the attribute.<br>
- - New: <b><b>imProcessCrossCorrelation</b></b> and <b><b>imProcessAutoCorrelation</b></b> functions.<br>
- - The <b><b>imCalcGrayHistogram</b></b> function now can calculate the histogram of <b>
- <b>IM_MAP</b></b>
- and <b><b>IM_BINARY</b></b> images.</p>
-
-<h3>Version 3.0 (April 2004)</h3>
-
- <p>A major rewrite of the library. Everything changed, check the manual, but backward compatibility is kept for old
- applications. A new API more flexible, new formats, support for attributes and video, image capture and image
- processing. New: color spaces and data types. The library now got a professional look for scientific applications.</p>
-
-<h3>Version 2.6 (May 2002)</h3>
-
- <p>Correction of bug in resolution reading and writing for format JPEG.</p>
-
-<h3>Version 2.5 (August 2001)</h3>
-
- <p>Correction of bug in the default GIF compression. Two new callbacks: transparency color index for GIF files and
- image description for TIFF files.</p>
-
-<h3>Version 2.4 (February 2000)</h3>
-
- <p>Change in the treatment of LZW compression in formats TIFF and GIF. Now compression is no longer the default.</p>
-
-<h3>Version 2.3 (June 1998)</h3>
-
- <p>Close function of the access driver for files in memory corrected. JPEG library updated to 6b. Correction of a
- problem with the reading of some JPEG files.</p>
-
-<h3>Version 2.2 (November 1997)</h3>
-
- <p>The definition of the counter callback was changed to inform, in a parameter, the type of access being performed,
- either reading or writing. Type <strong>imCallback</strong> defined to make type casting easier when using function
- <strong>imRegisterCallback</strong>. Correction of a problem with the makefile in UNIX, which was generating link
- errors in some platforms.</p>
-
-<h3>Version 2.1 (October 1997)</h3>
-
- <p>Correction of a problem with internal memory liberation when reading Map images in TIFF files. Conversion <b>RGB to
- Map</b> is now made using the algorithm implemented by LibJPEG. The algorithm of <strong>imResize</strong> was
- improved for cases in which the size is being reduced instead of increased. Correction of a problem with functions
- <strong>imImageInfo</strong> and <strong>imFileFormat</strong>: when the provided file was not in a format recognized
- by IM, there was an error in format TGA which caused these functions to access an invalid memory area.</p>
-
-<h3>Version 2.0 (September 1997)</h3>
-
- <p>The library was virtually rewritten to implement a new structure which allowed greater flexibility, simplifying the
- addition of new formats. Formats <strong>TGA</strong>, <strong>PCL</strong>, <strong>JPEG</strong> and <strong>LED</strong>
- were added to the list of supported formats, and new functions were added: <strong>imMap2RGB</strong>, <strong>
- imRGB2Gray</strong>, <strong>imMap2Gray</strong>, <strong>imResize</strong>, <strong>imStretch</strong>.</p>
-
-<h3>Version 1.1 (June 1996)</h3>
-
- <p>Small corrections to increase portability. Changes in return codes. Identifiers were created to return codes and
- predefined parameters. Online manual concluded.</p>
-
-<h3>Version 1.0 (October 1995)</h3>
+<body lang=PT-BR link=blue vlink=purple style='tab-interval:35.4pt'>
+
+<div class=Section1>
+
+<h1><span lang=EN-US style='mso-fareast-font-family:"Times New Roman";
+mso-ansi-language:EN-US'>History of Changes<o:p></o:p></span></h1>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>CVS (03/Dez/2008)<o:p></o:p></span></h3>
+
+</div>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> function <span class=SpellE><strong>imColorHSI_Smax</strong></span>
+removed from public, now it is used only internally. </span><span
+style='mso-fareast-font-family:"Times New Roman"'>HSI <span class=SpellE>space</span>
+<span class=SpellE>now</span> uses S <span class=SpellE>already</span> <span
+class=SpellE>normalized</span> <span class=SpellE>between</span> 0-<span
+class=SpellE>Smax</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:red'>Fixed</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:red'>:</span><span style='mso-fareast-font-family:"Times New Roman"'>
+<span class=GramE><strong>imColorHSI2RGB</strong></span> <span class=SpellE>conversion</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imConvertDataType</strong></span> when
+converting a floating point to integer, there were rounding problems.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed: </span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'>loading or saving two files of the same format at the same time.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span style='mso-fareast-font-family:"Times New Roman"'>Version
+3.4 (14/<span class=SpellE>Oct</span>/2008)<o:p></o:p></span></h3>
+
+</div>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>imlua_avi</span>, <span class=SpellE>imlua_wmv</span>
+and imlua_jp2 libraries so the respective formats can be dynamically loaded
+using require.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";color:blue;
+mso-ansi-language:EN-US'>:</span><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'> <strong><span style='color:red'>IMPORTANT</span></strong>
+- the &quot;<span class=SpellE>imlua_cd</span>&quot; library moved from IM to
+CD under the name &quot;<span class=SpellE>cdluaim</span>&quot;.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";color:blue;
+mso-ansi-language:EN-US'>:</span><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'> <strong><span style='color:red'>IMPORTANT</span></strong>
+- the support services (Downloads, Mailing List and CVS) moved from <span
+class=SpellE>LuaForge</span> to <span class=SpellE>SourceForge</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> All dll8 and dll9 DLLs now have a Manifest file that specifies the
+correct MSVCR*.DLL.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>Makefiles</span> for UNIX now uses a compact version
+of <span class=SpellE>Tecmake</span> that does not need any installation, just
+type &quot;make&quot;.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'>: <span class=SpellE>premake</span> files are used now only internally
+and were removed from the distribution.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";color:blue;
+mso-ansi-language:EN-US'>:</span><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'> Copyright notice modified to reflect
+the registration at INPI (National Institute of Intellectual Property in
+Brazil). </span><span class=SpellE><span style='mso-fareast-font-family:"Times New Roman"'>License</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=GramE>continues</span>
+<span class=SpellE>under</span> <span class=SpellE>the</span> <span
+class=SpellE>same</span> <span class=SpellE>terms</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> reviewed and fixed the parameter checking of all <span class=SpellE>IMLua</span>
+processing functions. Also reviewed all <span class=SpellE>IMLua</span>
+parameter checking. Thanks to Lucas <span class=SpellE>Lorensi</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> loading of TIFF format with old JPEG compression.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> loading and saving of PNM format when data in textual format and gray
+values are <span class=SpellE>greatter</span> than 255.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>Bicubic</span> and Zero order interpolation for all
+geometric operations for pixels near the image border when increasing image
+size.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:red'>Fixed</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:red'>:</span><span style='mso-fareast-font-family:"Times New Roman"'>
+Lua <span class=SpellE>samples</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> ICON format in 64 bits Linux.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span style='mso-fareast-font-family:"Times New Roman"'>Version
+3.3 (26/Nov/2007)<o:p></o:p></span></h3>
+
+</div>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> read support for ECW using the <span class=SpellE>ERMapper</span> ECW
+JPEG 2000 SDK.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>libTIFF</span> updated to version 3.8.2.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>libPNG</span> updated to version 1.2.22.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>libJasper</span> updated to <span class=SpellE>libGeoJasper</span>
+1.4.0 (using Jasper version 1.900.1). Better support for counter progress, Geo
+tags and several speed improvements. </span><span class=SpellE><span
+style='mso-fareast-font-family:"Times New Roman"'>New</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=SpellE><span
+class=GramE>GeoTIFFBox</span></span> <span class=SpellE>and</span> <span
+class=SpellE>XMLPacket</span> <span class=SpellE>attributes</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> renamed macro <span class=SpellE><b>imPutImage</b></span> to <span
+class=SpellE><b>imcdCanvasPutImage</b></span>, and added canvas as the first
+parameter. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> renamed the <span class=SpellE><b>imImage</b></span> <span
+class=SpellE>Lua</span> methods to <span class=SpellE><strong><i>image</i></strong><span
+class=GramE><b>:cdCanvasPutImageRect</b></span></span>, <span class=SpellE><strong><i>image</i></strong><b>:wdCanvasPutImageRect</b></span>
+and <span class=SpellE><strong><i>image</i></strong><b>:cdCanvasGetImage</b></span>,
+and added canvas as the first parameter. </span><span class=SpellE><span
+style='mso-fareast-font-family:"Times New Roman"'>Now</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=SpellE><i>imlua_cd</i></span>
+<span class=SpellE>depends</span> <span class=SpellE>on</span> <span
+class=SpellE><i>cdlua</i></span> <span class=SpellE>from</span> CD version 5.0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>metatable</span> names in <span class=SpellE>Lua</span>
+are now the same as the C <span class=SpellE>struct</span> names.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> new read EXIF tags support in TIFF format (no write support yet).
+Renamed attributes &quot;<span class=SpellE>GeoTransMatrix</span>&quot; and
+&quot;<span class=SpellE>IntergraphMatrix</span>&quot;, to &quot;<span
+class=SpellE>GeoTransformationMatrix</span>&quot; and &quot;Intergraph <span
+class=SpellE>TransformationMatrix</span>&quot; for <span class=SpellE>libGeoTIFF</span>
+compatibility. Better support for known TIFF tags. New support for reading one
+band of a multiband gray image in TIFF format. </span><span class=SpellE><span
+style='mso-fareast-font-family:"Times New Roman"'>New</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=SpellE>support</span>
+for DNG files.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>imConvertDataType</span></span></strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> gamma function when converting real to/from integer.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> </span></strong><span lang=EN-US style='mso-fareast-font-family:"Times New Roman";
+mso-ansi-language:EN-US'>small error at the image border when <span
+class=SpellE>resampling</span>, rotating or other geometric operations.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> </span></strong><span class=SpellE><b><span lang=EN-US
+style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:EN-US'>imProcessCanny</span></b></span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> invalid division by zero when input image is all zero.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> </span></strong><span class=SpellE><b><span lang=EN-US
+style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:EN-US'>imFileReadImageInfo</span></b></span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> when loading MAP images with a scrambled gray palette. </span><span
+class=SpellE><span style='mso-fareast-font-family:"Times New Roman"'>They</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=SpellE>were</span>
+<span class=SpellE>incorrectly</span> <span class=SpellE>converted</span> to
+GREY.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> </span></strong><span lang=EN-US style='mso-fareast-font-family:"Times New Roman";
+mso-ansi-language:EN-US'>support for IM_ALPHA and 32 <span class=SpellE>bpp</span>
+in ICO format.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo3;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><strong><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> </span></strong><span lang=EN-US style='mso-fareast-font-family:"Times New Roman";
+mso-ansi-language:EN-US'>number of lines returned in <span class=SpellE><b>imProcessHoughLinesDraw</b></span>.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span style='mso-fareast-font-family:"Times New Roman"'>Version
+3.2 (24/Nov/2006)<o:p></o:p></span></h3>
+
+</div>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessRotateRef</strong></span> to rotate
+relative to a reference point.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>geometric</span> <span class=SpellE>distortion</span>
+<span class=SpellE><span class=GramE><strong>imProcessSwirl</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE><span class=GramE><strong>imProcessInterlaceSplit</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>function</span> <span class=GramE><strong>imGaussianKernelSize2StdDev</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>convolutions</span> <span class=SpellE><span
+class=GramE><strong>imProcessBarlettConvolve</strong></span></span>, <span
+class=SpellE><strong>imProcessPrewittConvolve</strong></span>, <span
+class=SpellE><strong>imProcessSplineEdgeConvolve</strong></span>, <span
+class=SpellE><strong>imProcessConvolveDual</strong></span> <span class=SpellE>and</span>
+<span class=SpellE><strong>imProcessConvolveSep</strong></span>. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> &quot;<span class=SpellE><span class=GramE>im_kernel.h</span></span><span
+class=GramE>&quot; module with simple functions to create know</span>
+pre-defined kernels like <span class=SpellE>sobel</span>, <span class=SpellE>laplacian</span>,
+<span class=SpellE>gaussian</span>, etc.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imVideoCaptureSetInOut</strong></span> to
+control input and output in capture devices.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=GramE>function</span> <span class=SpellE><strong>imBinMemoryRelease</strong></span>
+to release internal memory allocated by the <span class=SpellE>BinMemory</span>
+file when saving.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> functions for capture device information: <span class=SpellE><strong>imVideoCaptureDeviceExDesc</strong></span>,
+<span class=SpellE><strong>imVideoCaptureDevicePath</strong></span> and <span
+class=SpellE><strong>imVideoCaptureDeviceVendorInfo</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=GramE>function</span> <span class=SpellE><strong>imFileOpenAs</strong></span>
+to open a file of a specific format.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> functions <span class=SpellE><strong>imFormatRegisterInternal</strong></span>
+and <span class=SpellE><strong>imFormatRemoveAll</strong></span> to control
+format registration.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessGaussianConvolve</strong></span> to
+used separable convolution and now is <span class=SpellE>stddev</span> is
+negative will use its magnitude as the kernel size. </span><span class=SpellE><span
+style='mso-fareast-font-family:"Times New Roman"'>Removed</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=SpellE>Rep</span>
+<span class=SpellE>functions</span> <span class=SpellE><span class=GramE><strong>imProcessGaussianConvolveRep</strong></span></span>,
+<span class=SpellE><strong>imProcessDiffOfGaussianConvolveRep</strong></span> <span
+class=SpellE>and</span> <strong>imGaussianStdDev2Repetitions</strong>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessBlend</strong></span> to use an
+image instead of a constant. Old function renamed to <span class=SpellE><strong>imProcessBlendConst</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imFileHandle</strong></span> prototype. Now
+the function has an index parameter to specify which handle it should return. <span
+class=GramE>index=</span>0 is always an <span class=SpellE>imBinFile</span>*
+handle. Use index=1 or greater to return other internal handles that are format
+dependent.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> the Removed the include &quot;<span class=SpellE>im.h</span>&quot; to
+not include &quot;<span class=SpellE>im_lib.h</span>&quot;. </span><span
+style='mso-fareast-font-family:"Times New Roman"'>&quot;<span class=SpellE><span
+class=GramE>im_lib</span></span><span class=GramE>.</span>h&quot; <span
+class=SpellE>must</span> <span class=SpellE>be</span> <span class=SpellE>included</span>
+<span class=SpellE>when</span> <span class=SpellE>necessary</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imAnalyzeMeasureArea</strong></span> and <span
+class=SpellE><strong>imAnalyzeMeasurePerimeter</strong></span> prototypes to
+include the number of regions as a parameter. Fixed: these functions to
+internally initialize the results array to zero (this was necessary and not
+documented).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessFlip</strong></span> and <span
+class=SpellE><strong>imProcessMirror</strong></span> so they can be done
+in-place.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> missing implementation of <span class=SpellE><strong>imVideoCaptureOneFrame</strong></span>
+in <span class=SpellE>Lua</span> 5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imAnalyzeFindRegions</strong></span> when
+pixel is at the width-1 column.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> file format identification when <strong>TIFF</strong> identification
+failed was not closing the file.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imAnalyzeMeasurePerimeter</strong></span>
+when perimeter line is at the first or last lines. </span><span class=SpellE><span
+style='mso-fareast-font-family:"Times New Roman"'>Thanks</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> to <span class=SpellE>Takeshi</span>
+<span class=SpellE>Mitsunaga</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> invalid return value in <span class=SpellE><strong>imVideoCaptureConnect</strong></span>
+in <span class=SpellE>Lua</span> 5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessRotate</strong></span> for IM_MAP
+images.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>Lua</strong></span> binding of <span
+class=SpellE><strong>imFileImageSave</strong></span>, wrong parameters order.
+New: <span class=SpellE>image<span class=GramE>:Save</span></span>(filename,
+format) alias for <span class=SpellE>imImage</span> objects.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <strong>BMP</strong> format implementation when reading and writing
+RGBA 32 bits images.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imFileLoadImageFrame</strong></span> and <span
+class=SpellE><strong>imFileLoadBitmapFrame</strong></span> index parameter in <span
+class=SpellE>Lua</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l3 level1 lfo4;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> alpha channel allocation in <span class=SpellE>imImage</span>.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span style='mso-fareast-font-family:"Times New Roman"'>Version
+3.1 (12/Dez/2005)<o:p></o:p></span></h3>
+
+</div>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> Download, Discussion List, Submission of Bugs, Support Requests and
+Feature Requests, are now available thanks to the <span class=SpellE>LuaForge</span>
+site.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>Binding</span> for Lua <span
+class=GramE>5</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> support for alpha in <span class=SpellE>imImage</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> organization of the documentation.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> in ICON format the <span class=SpellE>TransparencyIndex</span> is used
+to for IM_MAP images without an alpha channel.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> video capture functions: <span class=SpellE><strong>imVideoCaptureFormatCount</strong></span>,
+<span class=SpellE><strong>imVideoCaptureGetFormat</strong></span> and <span
+class=SpellE><strong>imVideoCaptureSetFormat</strong></span>, to access the
+available capture video formats.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> functions <span class=SpellE><strong>imFileLoadImageFrame</strong></span>
+and <span class=SpellE><strong>imFileLoadBitmapFrame</strong></span> to reuse
+the image data when loading.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>function</span> <span class=SpellE><span
+class=GramE><strong>imFileImageSave</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>function</span> <span class=SpellE><span
+class=GramE><strong>imImageCreateBased</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE><span class=GramE><strong>imProcessInsert</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> compression functions <span class=SpellE><strong>imCompressDataLZF</strong></span>
+and <span class=SpellE><strong>imCompressDataUnLZF</strong></span>, using <span
+class=SpellE>libLZF</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> module for <span class=SpellE>imBinFile</span>, <strong>IM_FILEHANDLE</strong>
+that allows <span class=GramE>to access</span> an already opened file using the
+system file handle as file name. </span><span class=SpellE><span
+style='mso-fareast-font-family:"Times New Roman"'>Thanks</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> to Frederico Abraham.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> in JPEG file format <span class=SpellE>YcbCr</span> are now
+automatically converted to RGB when loaded. RGB images were already
+automatically converted to <span class=SpellE>YCbCr</span> when saved. Now this
+behavior can be controlled by the <span class=SpellE>AutoYCbCr</span>
+attribute.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> the <span class=SpellE><strong>imAnalyzeFindRegions</strong></span> to
+include an additional parameter that control if regions touching the border are
+computed or not. The function <span class=SpellE><strong>imProcessPrune</strong></span>
+now will only eliminate the regions in the selected size range.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> third party libraries, updated to newest versions: <span class=SpellE>libExif</span>,
+<span class=SpellE>libTIFF</span>, <span class=SpellE>libPNG</span> and <span
+class=SpellE>zlib</span>. </span><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman"'>Added</span></span><span style='mso-fareast-font-family:
+"Times New Roman"'> OLD JPEG <span class=SpellE>support</span> in <span
+class=SpellE><span class=GramE>libTIFF</span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> optimization flags to ON when building the library in all platforms.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessPerimeterLine</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasurePerimeter</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasurePerimArea</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasureCentroid</strong></span> and <span
+class=SpellE><strong>imAnalyzeMeasurePrincipalAxis</strong></span> to consider
+pixels that touch the borders.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> macro name <span class=SpellE><strong>cdPutBitmap</strong></span> to <span
+class=SpellE><strong>imPutBitmap</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> function names <span class=SpellE>imImageLoad</span> and <span
+class=SpellE><strong>imImageLoadBitmap</strong></span>, to <span class=SpellE><strong>imFileImageLoad</strong></span>
+and <span class=SpellE><strong>imFileImageLoadBitmap</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> overflow in <span class=SpellE><strong>imCalcImageStatistics</strong></span>
+<span class=SpellE><span class=GramE>fo</span></span> IM_INT and IM_USHORT
+images.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> error management in system file I/O in <strong>UNIX</strong>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> some small defines for 64-bits compatibility in <span class=SpellE>libExif</span>,
+<span class=SpellE>libPNG</span> and <span class=SpellE>libJPEG</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> incorrect interpretation of 16 bit data from <strong>PNG</strong>
+files.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imFileReadImageInfo</strong></span> can be
+called many times with the same index that will return the correct result
+without accessing the file again.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> small bug in sample <span class=SpellE><strong>iupglcap</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <strong>TIFF</strong> format read for images with multiple bands in <span
+class=SpellE>ExtraSamples</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <strong>ICON</strong> format <span class=SpellE>can_sequence</span> was
+0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessMergeHSI</strong></span> and <span
+class=SpellE><strong>imProcessSplitHSI</strong></span> documentation, and implementation
+for <strong>IM_BYTE</strong> images.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessRangeContrastThreshold</strong></span>,
+<span class=SpellE><strong>imProcessLocalMaxThreshold</strong></span> and <span
+class=SpellE><strong>imProcessRankClosestConvolve</strong></span> when
+processing near the border.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> invalid file permissions in UNIX when saving a new file.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:red'>Fixed</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:red'>:</span><span style='mso-fareast-font-family:"Times New Roman"'>
+<span class=SpellE>name</span> for <span class=SpellE><span class=GramE><strong>imProcessLocalMaxThresEstimate</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <strong>imProcessReduceBy4</strong> for images with odd width and/or
+height.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imAttribTableSet</strong></span> when
+replacing an attribute (thanks to Takeshi <span class=SpellE>Mitsunaga</span>).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> memory leaks in <span class=SpellE><strong>imConvertToBitmap</strong></span>
+and <span class=SpellE><strong>imConvertDataType</strong></span> (thanks to
+Takeshi <span class=SpellE>Mitsunaga</span>).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessZeroCrossing</strong></span> for
+the last pixel column (thanks to Takeshi <span class=SpellE>Mitsunaga</span>). </span><span
+class=SpellE><span style='mso-fareast-font-family:"Times New Roman"'>Also</span></span><span
+style='mso-fareast-font-family:"Times New Roman"'> <span class=SpellE>fixed</span>
+for some <span class=SpellE>crossings</span> <span class=SpellE>that</span> <span
+class=SpellE>were</span> <span class=SpellE>lost</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l5 level1 lfo5;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessGrayMorphConvolve</strong></span>
+for <strong>IM_FLOAT</strong> images with <strong>IM_FLOAT</strong> kernel
+(thanks to Takeshi <span class=SpellE>Mitsunaga</span>).<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span style='mso-fareast-font-family:"Times New Roman"'>Version
+3.0.3 (14/<span class=SpellE>Oct</span>/2004)<o:p></o:p></span></h3>
+
+</div>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>Image</span> <span class=SpellE>Transform</span>
+<span class=SpellE><span class=GramE><strong>imProcessDistanceTransform</strong></span></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> group of functions Image Analysis: <span class=SpellE><strong>imAnalyzeFindRegions</strong></span>,
+<span class=SpellE><strong>imAnalyzeMeasureArea</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasurePerimArea</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasureCentroid</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasurePrincipalAxis</strong></span>, <span
+class=SpellE><strong>imAnalyzeMeasureHoles</strong></span>, <span class=SpellE>imProcessPerimeterLine</span>,
+<span class=SpellE><strong>imAnalyzeMeasurePerimeter</strong></span>, <span
+class=SpellE><strong>imProcessPrune</strong></span>, <span class=SpellE><strong>imProcessFillHoles</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:blue;mso-ansi-language:EN-US'>New:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imConvertMapToRGB</strong></span> to help
+loading data as RGB.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE>sample</span> <span class=SpellE>iupglcap</span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
+style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>New</span></span><span style='mso-fareast-font-family:
+"Times New Roman";color:blue'>:</span><span style='mso-fareast-font-family:
+"Times New Roman"'> <span class=SpellE><span class=GramE><strong>imProcessRenderChessboard</strong></span></span>
+<span class=SpellE>and</span> <span class=SpellE><strong>imProcessRenderGrid</strong></span>.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessThreshold</strong></span>, <span
+class=SpellE><strong>imProcessRangeContrastThreshold</strong></span> and <span
+class=SpellE><strong>imProcessLocalMaxThreshold</strong></span> now also <span
+class=GramE>supports</span> <strong>IM_USHORT</strong> and <strong>IM_INT</strong>
+data types. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> the default color conversion to binary so it can be done for all color
+spaces.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE>im_process.h</span> to split into 4 files: <span
+class=SpellE>im_process_pont.h</span>, <span class=SpellE>im_process_loc.h</span>,
+<span class=SpellE>im_process_glo.h</span>, <span class=SpellE>im_process_ana.h</span>.
+But it still exists and includes the new files for compatibility.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:green;mso-ansi-language:EN-US'>Changed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> the border extensions in several types of convolution. Rank <span
+class=GramE>convolution do</span> not extend the borders. Binary morphology <span
+class=GramE>use</span> zero extension. Gray morphology <span class=GramE>do</span>
+not extend the borders.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> file read with bitmap conversion when original data changes only data
+type. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> rank convolution operations that did not accept even kernel sizes.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+margin-left:24.0pt;text-indent:-18.0pt;mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'><![if !supportLists]><span
+lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;
+mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-ansi-language:
+EN-US'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";color:red;mso-ansi-language:EN-US'>Fixed:</span><span
+lang=EN-US style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
+EN-US'> <span class=SpellE><strong>imProcessHoughLinesDraw</strong></span> that
+was ignoring some lines.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 3.0.2 (25/Aug/2004)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>- <span style='color:blue'>New:</span>
+utility functions <span class=SpellE><b>imPaletteHighContrast</b></span>, <span
+class=SpellE><b>imImageLoadImage</b></span> and <span class=SpellE><b>imImageLoadBitmap</b></span>.
+<br>
+- <span style='color:blue'>New:</span> operation <span class=SpellE><b>imProcessNormalizeComponents</b></span>.<br>
+- <span style='color:green'>Changed:</span> name <span class=SpellE><b>imProcessGaussianConvolve</b></span>
+to <span class=SpellE><b>imProcessGaussianConvolveRep</b></span>. New:
+operation <span class=SpellE><b>imProcessGaussianConvolve</b></span> that uses
+a float kernel. New: utility functions <b>imGaussianStdDev2Repetitions</b> and <b>imGaussianStdDev2KernelSize</b>.<br>
+- <span style='color:green'>Changed:</span> name <span class=SpellE><b>imProcessDiffOfGaussianConvolve</b></span>
+to <span class=SpellE><b>imProcessDiffOfGaussianConvolveRep</b></span>. New:
+operation <span class=SpellE><b>imProcessDiffOfGaussianConvolve</b></span> that
+uses a float kernel. <br>
+- <span style='color:green'>Changed:</span> <b>IM_GAMUT_BRIGHTCONT</b>
+parameters to the interval [-100,100]. <span class=GramE>Fixed: <b>IM_GAMUT_EXPAND</b>
+and <b>IM_GAMUT_BRIGHTCONT</b> normalization.</span><br>
+- <span style='color:green'>Changed:</span> logical operations, flag <b>IM_BIT_NOT
+</b>replaced by operation <span class=SpellE><b>imProcessBitwiseNot</b></span>.<br>
+- <span style='color:green'>Changed:</span> <span class=SpellE><b>imImageSetAttribute</b></span>
+count can be -1 for zero terminated data.<br>
+- <span style='color:red'>Fixed:</span> operations <span class=SpellE><b>imProcessBitwiseNot</b></span>
+and <span class=SpellE><b>imProcessNegative</b></span> for <b>IM_BINARY</b>
+images.<br>
+- <span style='color:red'>Fixed:</span> the <span class=SpellE><b>color_mode_flags</b></span>
+parameter interpretation by <span class=SpellE><b>imFileReadImageData</b></span>.
+<br>
+- <span style='color:red'>Fixed:</span> <span class=SpellE><b>imProcessEqualizeHistogram</b></span>
+and <span class=SpellE><b>imProcessExpandHistogram</b></span> for color images.
+<br>
+- <span style='color:red'>Fixed:</span> <span class=SpellE><b>imProcessMultipleStdDev</b></span>.<br>
+- <span style='color:red'>Fixed:</span> <span class=SpellE><b>imProcessDifusionErrThreshold</b></span>
+for <b>IM_GRAY</b> images.<br>
+- <span style='color:red'>Fixed:</span> &quot;<b>KRN</b>&quot; format, internal
+format is <span class=SpellE>topdown</span>.<br>
+- <span style='color:red'>Fixed:</span> initialization of TGA <span
+class=SpellE>image_count</span>.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 3.0.1 (22/Apr/2004)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>- Improved compatibility
+with the old version, it was missing the load of Map images with <span
+class=SpellE><b>imLoadRGB</b></span>.<br>
+- The FFTW code was from version 2.1.3, not from 2.1.5 as <span class=SpellE>suposed</span>,
+it was updated. The FFT functions were condensed in only one file with <span
+class=GramE>an</span> &quot;#<span class=SpellE>ifdef</span>&quot; for FFTW
+version 2 and 3. The FFT functions also were renamed to remove the
+&quot;W&quot; that belongs only to the FFTW library.<br>
+- The <span class=SpellE><b>SetAttribute</b></span> functions now accept NULL
+in data to remove the attribute.<br>
+- New: <span class=SpellE><b>imProcessCrossCorrelation</b></span> and <span
+class=SpellE><b>imProcessAutoCorrelation</b></span> functions.<br>
+- The <span class=SpellE><b>imCalcGrayHistogram</b></span> function now can
+calculate the histogram of <b>IM_MAP</b> and <b>IM_BINARY</b> images.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 3.0 (April 2004)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span class=GramE><span lang=EN-US style='mso-ansi-language:EN-US'>A major
+rewrite of the library.</span></span><span lang=EN-US style='mso-ansi-language:
+EN-US'> Everything changed, check the manual, but backward compatibility is
+kept for old applications. A new API more flexible, new formats, support for
+attributes and video, image capture and image processing. New: color spaces and
+data types. The library now got a professional look for scientific
+applications.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.6 (May 2002)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span class=GramE><span lang=EN-US style='mso-ansi-language:EN-US'>Correction
+of bug in resolution reading and writing for format JPEG.</span></span><span
+lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.5 (August 2001)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span class=GramE><span lang=EN-US style='mso-ansi-language:EN-US'>Correction
+of bug in the default GIF compression.</span></span><span lang=EN-US
+style='mso-ansi-language:EN-US'> Two new callbacks: transparency color index
+for GIF files and image description for TIFF files.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.4 (February 2000)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>Change in the treatment of
+LZW compression in formats TIFF and GIF. Now compression is no longer the
+default.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.3 (June 1998)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>Close function of the
+access driver for files in memory corrected. JPEG library updated to 6b.
+Correction of a problem with the reading of some JPEG files.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.2 (November 1997)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>The definition of the
+counter callback was changed to inform, in a parameter, the type of access
+being performed, either reading or writing. Type <span class=SpellE><strong>imCallback</strong></span>
+defined to make type casting easier when using function <span class=SpellE><strong>imRegisterCallback</strong></span>.
+<span class=GramE>Correction of a problem with the <span class=SpellE>makefile</span>
+in UNIX, which was generating link errors in some platforms.</span><o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.1 (October 1997)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>Correction of a problem
+with internal memory liberation when reading Map images in TIFF files.
+Conversion <b>RGB to Map</b> is now made using the algorithm implemented by <span
+class=SpellE>LibJPEG</span>. The algorithm of <span class=SpellE><strong>imResize</strong></span>
+was improved for cases in which the size is being reduced instead of increased.
+Correction of a problem with functions <span class=SpellE><strong>imImageInfo</strong></span>
+and <span class=SpellE><strong>imFileFormat</strong></span>: when the provided
+file was not in a format recognized by IM, there was an error in format TGA
+which caused these functions to access an invalid memory area.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 2.0 (September 1997)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span lang=EN-US style='mso-ansi-language:EN-US'>The library was virtually
+rewritten to implement a new structure which allowed greater flexibility,
+simplifying the addition of new formats. Formats <strong>TGA</strong>, <strong>PCL</strong>,
+<strong>JPEG</strong> and <strong>LED</strong> were added to the list of
+supported formats, and new functions were added: <strong>imMap2RGB</strong>, <strong>imRGB2Gray</strong>,
+<strong>imMap2Gray</strong>, <span class=SpellE><strong>imResize</strong></span>,
+<span class=SpellE><strong>imStretch</strong></span>.<o:p></o:p></span></p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span lang=EN-US style='mso-fareast-font-family:
+"Times New Roman";mso-ansi-language:EN-US'>Version 1.1 (June 1996)<o:p></o:p></span></h3>
+
+</div>
+
+<p><span class=GramE><span lang=EN-US style='mso-ansi-language:EN-US'>Small
+corrections to increase portability.</span></span><span lang=EN-US
+style='mso-ansi-language:EN-US'> <span class=GramE>Changes in return codes.</span>
+Identifiers were created to return codes and predefined parameters. </span>Online
+manual <span class=SpellE>concluded</span>.</p>
+
+<div style='mso-element:para-border-div;border:solid gray 1.0pt;mso-border-alt:
+solid gray .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#E1E1E1'>
+
+<h3 style='background:#E1E1E1'><span style='mso-fareast-font-family:"Times New Roman"'>Version
+1.0 (<span class=SpellE>October</span> 1995)<o:p></o:p></span></h3>
+
+</div>
+
+</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/include/im_file.h b/include/im_file.h
index a35c82a..33ef12e 100644
--- a/include/im_file.h
+++ b/include/im_file.h
@@ -23,7 +23,7 @@ extern "C" {
* \ingroup file */
-/** \brief Image File Format Base (SDK Use Only)
+/** \brief Image File Format Base Class (SDK Use Only)
*
* \par
* Base container to hold format independent state variables.
diff --git a/include/im_format.h b/include/im_format.h
index 9120676..6ee0473 100644
--- a/include/im_format.h
+++ b/include/im_format.h
@@ -11,27 +11,20 @@
#define __IM_FORMAT_H
-/** \brief Image File Format Driver (SDK Use Only)
+class imFormat;
+
+/** \brief Image File Format Virtual Class (SDK Use Only)
*
* \par
* Virtual Base class for file formats. All file formats inherit from this class.
* \ingroup filesdk */
-class imFormat: public _imFile
+class imFileFormatBase: public _imFile
{
public:
- const char* format;
- const char* desc;
- const char* ext;
- const char** comp;
- int comp_count,
- can_sequence;
+ const imFormat* iformat;
- imFormat(const char* _format, const char* _desc, const char* _ext,
- const char** _comp, int _comp_count, int _can_sequence)
- :format(_format), desc(_desc), ext(_ext), comp(_comp),
- comp_count(_comp_count), can_sequence(_can_sequence)
- {}
- virtual ~imFormat() {}
+ imFileFormatBase(const imFormat* _iformat): iformat(_iformat) {}
+ virtual ~imFileFormatBase() {}
imAttribTable* AttribTable() {return (imAttribTable*)this->attrib_table;}
@@ -45,7 +38,32 @@ public:
virtual int ReadImageData(void* data) = 0;
virtual int WriteImageInfo() = 0; // Should update compression
virtual int WriteImageData(void* data) = 0; // Must update image_count
+};
+
+/** \brief Image File Format Descriptor (SDK Use Only)
+ *
+ * \par
+ * All file formats must define these informations. They are stored by \ref imFormatRegister.
+ * \ingroup filesdk */
+class imFormat
+{
+public:
+ const char* format;
+ const char* desc;
+ const char* ext;
+ const char** comp;
+ int comp_count,
+ can_sequence;
+
+ virtual imFileFormatBase* Create() const = 0;
virtual int CanWrite(const char* compression, int color_mode, int data_type) const = 0;
+
+ imFormat(const char* _format, const char* _desc, const char* _ext,
+ const char** _comp, int _comp_count, int _can_sequence)
+ :format(_format), desc(_desc), ext(_ext), comp(_comp),
+ comp_count(_comp_count), can_sequence(_can_sequence)
+ {}
+ virtual ~imFormat() {}
};
extern "C"
@@ -56,15 +74,15 @@ extern "C"
/* Opens a file with the respective format driver
* Uses the file extension to speed up the search for the format driver.
* Used by "im_file.cpp" only. */
-imFormat* imFormatOpen(const char* file_name, int *error);
+imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error);
/* Opens a file with the given format
* Used by "im_file.cpp" only. */
-imFormat* imFormatOpenAs(const char* file_name, const char* format, int *error);
+imFileFormatBase* imFileFormatBaseOpenAs(const char* file_name, const char* format, int *error);
/* Creates a file using the given format driver.
* Used by "im_file.cpp" only. */
-imFormat* imFormatNew(const char* file_name, const char* format, int *error);
+imFileFormatBase* imFileFormatBaseNew(const char* file_name, const char* format, int *error);
/* File Format SDK */
diff --git a/include/im_format_raw.h b/include/im_format_raw.h
index 8027f82..07cc81c 100644
--- a/include/im_format_raw.h
+++ b/include/im_format_raw.h
@@ -54,7 +54,7 @@ extern "C" {
StartOffset, SwitchType, ByteOrder, Padding IM_INT (1)
\endverbatim
* \ingroup format */
-imFormat* imFormatInitRAW(void);
+imFileFormatBase* imFormatInitRAW(void);
#if defined(__cplusplus)
diff --git a/mak.vc8/im.sln b/mak.vc8/im.sln
index 27a3077..201b401 100644
--- a/mak.vc8/im.sln
+++ b/mak.vc8/im.sln
@@ -105,13 +105,6 @@ Global
{CB86E507-6B6C-4FDF-9B6D-27AA123AE463}.Release|Win32.ActiveCfg = Debug|Win32
{CB86E507-6B6C-4FDF-9B6D-27AA123AE463}.Release|Win32.Build.0 = Debug|Win32
{CB86E507-6B6C-4FDF-9B6D-27AA123AE463}.Release|x64.ActiveCfg = Debug|Win32
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|Win32.ActiveCfg = Debug|Win32
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|Win32.Build.0 = Debug|Win32
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|x64.ActiveCfg = Debug|x64
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|x64.Build.0 = Debug|x64
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Release|Win32.ActiveCfg = Debug|x64
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Release|x64.ActiveCfg = Debug|x64
- {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Release|x64.Build.0 = Debug|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/mak.vc8/im_capture.vcproj b/mak.vc8/im_capture.vcproj
index e7a8555..1e16bef 100644
--- a/mak.vc8/im_capture.vcproj
+++ b/mak.vc8/im_capture.vcproj
@@ -4,7 +4,6 @@
Version="8,00"
Name="im_capture"
ProjectGUID="{CB868607-6B6C-4CDF-9B6D-27AA925AE473}"
- TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -42,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../include;../src;d:\LNG\DXSDK\Include"
+ AdditionalIncludeDirectories="../include;../src;d:\LNG\winSDK\Include;d:/lng/dxsdk/include"
PreprocessorDefinitions="WIN32,_DEBUG,_LIB,_CRT_SECURE_NO_DEPRECATE"
ExceptionHandling="0"
BasicRuntimeChecks="3"
diff --git a/mak.vc8/im_wmv.vcproj b/mak.vc8/im_wmv.vcproj
index f6d1b68..93241dc 100644
--- a/mak.vc8/im_wmv.vcproj
+++ b/mak.vc8/im_wmv.vcproj
@@ -4,7 +4,6 @@
Version="8,00"
Name="im_wmv"
ProjectGUID="{CB86E507-6B6C-4FDF-9B6D-27AA925AE463}"
- TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -43,7 +42,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../include;../src;d:\LNG\WMFSDK11\include"
- PreprocessorDefinitions="WIN32,_DEBUG,_LIB,_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="0"
diff --git a/src/im_file.cpp b/src/im_file.cpp
index 81e6128..a43b0d4 100644
--- a/src/im_file.cpp
+++ b/src/im_file.cpp
@@ -2,7 +2,7 @@
* \brief File Access
*
* See Copyright Notice in im_lib.h
- * $Id: im_file.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_file.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include <stdlib.h>
@@ -49,66 +49,66 @@ imFile* imFileOpen(const char* file_name, int *error)
{
assert(file_name);
- imFormat* iformat = imFormatOpen(file_name, error);
- if (!iformat)
+ imFileFormatBase* ifileformat = imFileFormatBaseOpen(file_name, error);
+ if (!ifileformat)
return NULL;
- imFileClear(iformat);
+ imFileClear(ifileformat);
- iformat->attrib_table = new imAttribTable(599);
+ ifileformat->attrib_table = new imAttribTable(599);
- iformat->counter = imCounterBegin(file_name);
+ ifileformat->counter = imCounterBegin(file_name);
- return iformat;
+ return ifileformat;
}
imFile* imFileOpenAs(const char* file_name, const char* format, int *error)
{
assert(file_name);
- imFormat* iformat = imFormatOpenAs(file_name, format, error);
- if (!iformat)
+ imFileFormatBase* ifileformat = imFileFormatBaseOpenAs(file_name, format, error);
+ if (!ifileformat)
return NULL;
- imFileClear(iformat);
+ imFileClear(ifileformat);
- iformat->attrib_table = new imAttribTable(599);
+ ifileformat->attrib_table = new imAttribTable(599);
- iformat->counter = imCounterBegin(file_name);
+ ifileformat->counter = imCounterBegin(file_name);
- return iformat;
+ return ifileformat;
}
imFile* imFileNew(const char* file_name, const char* format, int *error)
{
assert(file_name);
- imFormat* iformat = imFormatNew(file_name, format, error);
- if (!iformat)
+ imFileFormatBase* ifileformat = imFileFormatBaseNew(file_name, format, error);
+ if (!ifileformat)
return NULL;
- imFileClear(iformat);
+ imFileClear(ifileformat);
- iformat->is_new = 1;
- iformat->image_count = 0;
- iformat->compression[0] = 0;
+ ifileformat->is_new = 1;
+ ifileformat->image_count = 0;
+ ifileformat->compression[0] = 0;
- iformat->attrib_table = new imAttribTable(101);
+ ifileformat->attrib_table = new imAttribTable(101);
- iformat->counter = imCounterBegin(file_name);
+ ifileformat->counter = imCounterBegin(file_name);
- return iformat;
+ return ifileformat;
}
void imFileClose(imFile* ifile)
{
assert(ifile);
- imFormat* iformat = (imFormat*)ifile;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
imAttribTable* attrib_table = (imAttribTable*)ifile->attrib_table;
imCounterEnd(ifile->counter);
- iformat->Close();
+ ifileformat->Close();
if (ifile->line_buffer) free(ifile->line_buffer);
@@ -118,16 +118,16 @@ void imFileClose(imFile* ifile)
void* imFileHandle(imFile* ifile, int index)
{
assert(ifile);
- imFormat* iformat = (imFormat*)ifile;
- return iformat->Handle(index);
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
+ return ifileformat->Handle(index);
}
void imFileSetAttribute(imFile* ifile, const char* attrib, int data_type, int count, const void* data)
{
assert(ifile);
assert(attrib);
- imFormat* iformat = (imFormat*)ifile;
- imAttribTable* atable = (imAttribTable*)iformat->attrib_table;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
+ imAttribTable* atable = (imAttribTable*)ifileformat->attrib_table;
if (data)
atable->Set(attrib, data_type, count, data);
else
@@ -138,8 +138,8 @@ const void* imFileGetAttribute(imFile* ifile, const char* attrib, int *data_type
{
assert(ifile);
assert(attrib);
- imFormat* iformat = (imFormat*)ifile;
- imAttribTable* attrib_table = (imAttribTable*)iformat->attrib_table;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
+ imAttribTable* attrib_table = (imAttribTable*)ifileformat->attrib_table;
return attrib_table->Get(attrib, data_type, count);
}
@@ -167,10 +167,10 @@ void imFileGetAttributeList(imFile* ifile, char** attrib, int *attrib_count)
void imFileGetInfo(imFile* ifile, char* format, char* compression, int *image_count)
{
assert(ifile);
- imFormat* iformat = (imFormat*)ifile;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
if(compression) strcpy(compression, ifile->compression);
- if(format) strcpy(format, iformat->format);
+ if(format) strcpy(format, ifileformat->iformat->format);
if (image_count) *image_count = ifile->image_count;
}
@@ -214,7 +214,7 @@ int imFileReadImageInfo(imFile* ifile, int index, int *width, int *height, int *
{
assert(ifile);
assert(!ifile->is_new);
- imFormat* iformat = (imFormat*)ifile;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
if (index >= ifile->image_count)
return IM_ERR_DATA;
@@ -233,7 +233,7 @@ int imFileReadImageInfo(imFile* ifile, int index, int *width, int *height, int *
ifile->convert_bpp = 0;
ifile->switch_type = 0;
- int error = iformat->ReadImageInfo(index);
+ int error = ifileformat->ReadImageInfo(index);
if (error) return error;
if (!imImageCheckFormat(ifile->file_color_mode, ifile->file_data_type))
@@ -322,7 +322,7 @@ int imFileReadImageData(imFile* ifile, void* data, int convert2bitmap, int color
{
assert(ifile);
assert(!ifile->is_new);
- imFormat* iformat = (imFormat*)ifile;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
if (ifile->image_index == -1)
return IM_ERR_DATA;
@@ -350,7 +350,7 @@ int imFileReadImageData(imFile* ifile, void* data, int convert2bitmap, int color
imFileLineBufferInit(ifile);
- int ret = iformat->ReadImageData(data);
+ int ret = ifileformat->ReadImageData(data);
// here we can NOT change the file_color_mode we already returned to the user
// so just check for gray and binary consistency
@@ -389,12 +389,12 @@ int imFileWriteImageInfo(imFile* ifile, int width, int height, int user_color_mo
{
assert(ifile);
assert(ifile->is_new);
- imFormat* iformat = (imFormat*)ifile;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
if (!imImageCheckFormat(user_color_mode, user_data_type))
return IM_ERR_DATA;
- int error = iformat->CanWrite(ifile->compression, user_color_mode, user_data_type);
+ int error = ifileformat->iformat->CanWrite(ifile->compression, user_color_mode, user_data_type);
if (error) return error;
ifile->width = width;
@@ -409,7 +409,7 @@ int imFileWriteImageInfo(imFile* ifile, int width, int height, int user_color_mo
ifile->palette[1] = imColorEncode(255, 255, 255);
}
- return iformat->WriteImageInfo();
+ return ifileformat->WriteImageInfo();
}
int imFileWriteImageData(imFile* ifile, void* data)
@@ -417,12 +417,12 @@ int imFileWriteImageData(imFile* ifile, void* data)
assert(ifile);
assert(ifile->is_new);
assert(data);
- imFormat* iformat = (imFormat*)ifile;
+ imFileFormatBase* ifileformat = (imFileFormatBase*)ifile;
if (!imFileCheckConversion(ifile))
return IM_ERR_DATA;
imFileLineBufferInit(ifile);
- return iformat->WriteImageData(data);
+ return ifileformat->WriteImageData(data);
}
diff --git a/src/im_fileraw.cpp b/src/im_fileraw.cpp
index da7ef81..530b6c9 100644
--- a/src/im_fileraw.cpp
+++ b/src/im_fileraw.cpp
@@ -2,7 +2,7 @@
* \brief RAW File Format Open/New Functions
*
* See Copyright Notice in im_lib.h
- * $Id: im_fileraw.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_fileraw.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im.h"
@@ -21,7 +21,7 @@ imFile* imFileOpenRaw(const char* file_name, int *error)
{
assert(file_name);
- imFormat* iformat = imFormatInitRAW();
+ imFileFormatBase* iformat = imFormatInitRAW();
*error = iformat->Open(file_name);
if (*error)
{
@@ -42,7 +42,7 @@ imFile* imFileNewRaw(const char* file_name, int *error)
{
assert(file_name);
- imFormat* iformat = imFormatInitRAW();
+ imFileFormatBase* iformat = imFormatInitRAW();
*error = iformat->New(file_name);
if (*error)
{
diff --git a/src/im_format.cpp b/src/im_format.cpp
index be9892c..d389743 100644
--- a/src/im_format.cpp
+++ b/src/im_format.cpp
@@ -2,7 +2,7 @@
* \brief File Format Access
*
* See Copyright Notice in im_lib.h
- * $Id: im_format.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
@@ -163,7 +163,7 @@ static char* utlFileGetExt(const char *file_name)
return file_ext;
}
-imFormat* imFormatOpen(const char* file_name, int *error)
+imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error)
{
int i;
@@ -191,18 +191,20 @@ imFormat* imFormatOpen(const char* file_name, int *error)
{
ext_mark[i] = 1; // Mark this format to avoid testing it again in the next phase
- *error = iformat->Open(file_name);
+ imFileFormatBase* ifileformat = iformat->Create();
+ *error = ifileformat->Open(file_name);
if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT) // Error situation that must abort
{ // Only IM_ERR_FORMAT is a valid error here
free(extension);
delete [] ext_mark;
+ delete ifileformat;
return NULL;
}
else if (*error == IM_ERR_NONE) // Sucessfully oppened the file
{
free(extension);
delete [] ext_mark;
- return iformat;
+ return ifileformat;
}
}
}
@@ -218,17 +220,18 @@ imFormat* imFormatOpen(const char* file_name, int *error)
if (!ext_mark[i])
{
imFormat* iformat = iFormatList[i];
-
- *error = iformat->Open(file_name);
+ imFileFormatBase* ifileformat = iformat->Create();
+ *error = ifileformat->Open(file_name);
if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT) // Error situation that must abort
{ // Only IM_ERR_FORMAT is a valid error here
delete [] ext_mark;
+ delete ifileformat;
return NULL;
}
else if (*error == IM_ERR_NONE) // Sucessfully oppened the file
{
delete [] ext_mark;
- return iformat;
+ return ifileformat;
}
}
}
@@ -238,7 +241,7 @@ imFormat* imFormatOpen(const char* file_name, int *error)
return NULL;
}
-imFormat* imFormatOpenAs(const char* file_name, const char* format, int *error)
+imFileFormatBase* imFileFormatBaseOpenAs(const char* file_name, const char* format, int *error)
{
assert(file_name);
assert(format);
@@ -257,17 +260,21 @@ imFormat* imFormatOpenAs(const char* file_name, const char* format, int *error)
return NULL;
}
- *error = iformat->Open(file_name);
+ imFileFormatBase* ifileformat = iformat->Create();
+ *error = ifileformat->Open(file_name);
if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT) // Error situation that must abort
+ {
+ delete ifileformat;
return NULL;
+ }
else if (*error == IM_ERR_NONE) // Sucessfully oppened the file
- return iformat;
+ return ifileformat;
*error = IM_ERR_FORMAT;
return NULL;
}
-imFormat* imFormatNew(const char* file_name, const char* format, int *error)
+imFileFormatBase* imFileFormatBaseNew(const char* file_name, const char* format, int *error)
{
assert(file_name);
assert(format);
@@ -280,10 +287,13 @@ imFormat* imFormatNew(const char* file_name, const char* format, int *error)
return NULL;
}
- *error = iformat->New(file_name);
+ imFileFormatBase* ifileformat = iformat->Create();
+ *error = ifileformat->New(file_name);
if (*error)
+ {
+ delete ifileformat;
return NULL;
+ }
- return iformat;
+ return ifileformat;
}
-
diff --git a/src/im_format_avi.cpp b/src/im_format_avi.cpp
index 3de98d4..632e45b 100644
--- a/src/im_format_avi.cpp
+++ b/src/im_format_avi.cpp
@@ -2,7 +2,7 @@
* \brief AVI - Windows Audio-Video Interleaved RIFF
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_avi.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_avi.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -41,7 +41,7 @@ static const char* iAVICompTable[15] =
"CUSTOM" // (show compression dialog)
};
-class imFormatAVI: public imFormat
+class imFileFormatAVI: public imFileFormatBase
{
PAVIFILE file;
PAVISTREAM stream;
@@ -63,15 +63,8 @@ class imFormatAVI: public imFormat
void InitMasks(imDib* dib);
public:
- imFormatAVI()
- :imFormat("AVI",
- "Windows Audio-Video Interleaved RIFF",
- "*.avi;",
- iAVICompTable,
- 15,
- 1)
- {}
- ~imFormatAVI() {}
+ imFileFormatAVI(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatAVI() {}
int Open(const char* file_name);
int New(const char* file_name);
@@ -81,6 +74,22 @@ public:
int ReadImageData(void* data);
int WriteImageInfo();
int WriteImageData(void* data);
+};
+
+class imFormatAVI: public imFormat
+{
+public:
+ imFormatAVI()
+ :imFormat("AVI",
+ "Windows Audio-Video Interleaved RIFF",
+ "*.avi;",
+ iAVICompTable,
+ 15,
+ 1)
+ {}
+ ~imFormatAVI() {}
+
+ imFileFormatBase* Create(void) const { return new imFileFormatAVI(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -89,9 +98,9 @@ void imFormatRegisterAVI(void)
imFormatRegister(new imFormatAVI());
}
-int imFormatAVI::Open(const char* file_name)
+int imFileFormatAVI::Open(const char* file_name)
{
- /* initializes avi file library */
+ /* initializes avi file library, can be called many times */
AVIFileInit();
/* open existing file */
@@ -152,9 +161,9 @@ int imFormatAVI::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatAVI::New(const char* file_name)
+int imFileFormatAVI::New(const char* file_name)
{
- /* initializes avi file library */
+ /* initializes avi file library, can be called many times */
AVIFileInit();
/* creates a new file */
@@ -179,7 +188,7 @@ int imFormatAVI::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatAVI::Close()
+void imFileFormatAVI::Close()
{
if (this->dib) imDibDestroy(this->dib);
@@ -193,10 +202,10 @@ void imFormatAVI::Close()
if (this->stream) AVIStreamRelease(this->stream);
AVIFileRelease(this->file);
- AVIFileExit();
+ AVIFileExit(); /* called one for each AVIFileInit */
}
-void* imFormatAVI::Handle(int index)
+void* imFileFormatAVI::Handle(int index)
{
if (index == 1)
return (void*)this->file;
@@ -206,7 +215,7 @@ void* imFormatAVI::Handle(int index)
return NULL;
}
-int imFormatAVI::ReadImageInfo(int index)
+int imFileFormatAVI::ReadImageInfo(int index)
{
this->current_frame = index;
@@ -280,7 +289,7 @@ int imFormatAVI::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatAVI::WriteImageInfo()
+int imFileFormatAVI::WriteImageInfo()
{
if (dib)
{
@@ -423,7 +432,7 @@ int imFormatAVI::WriteImageInfo()
return IM_ERR_NONE;
}
-void imFormatAVI::ReadPalette(unsigned char* bmp_colors)
+void imFileFormatAVI::ReadPalette(unsigned char* bmp_colors)
{
/* convert the color map to the IM format */
for (int c = 0; c < this->palette_count; c++)
@@ -435,7 +444,7 @@ void imFormatAVI::ReadPalette(unsigned char* bmp_colors)
}
}
-void imFormatAVI::WritePalette(unsigned char* bmp_colors)
+void imFileFormatAVI::WritePalette(unsigned char* bmp_colors)
{
/* convert the color map to the IM format */
for (int c = 0; c < this->palette_count; c++)
@@ -446,7 +455,7 @@ void imFormatAVI::WritePalette(unsigned char* bmp_colors)
}
}
-void imFormatAVI::InitMasks(imDib* dib)
+void imFileFormatAVI::InitMasks(imDib* dib)
{
if (dib->bmih->biCompression == BI_BITFIELDS)
{
@@ -495,7 +504,7 @@ void imFormatAVI::InitMasks(imDib* dib)
}
}
-void imFormatAVI::FixRGB(int bpp)
+void imFileFormatAVI::FixRGB(int bpp)
{
int x;
@@ -552,7 +561,7 @@ void imFormatAVI::FixRGB(int bpp)
}
}
-int imFormatAVI::ReadImageData(void* data)
+int imFileFormatAVI::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading AVI Frame...");
@@ -596,7 +605,7 @@ int imFormatAVI::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatAVI::WriteImageData(void* data)
+int imFileFormatAVI::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing AVI Frame...");
diff --git a/src/im_format_bmp.cpp b/src/im_format_bmp.cpp
index 809169b..5ec4938 100644
--- a/src/im_format_bmp.cpp
+++ b/src/im_format_bmp.cpp
@@ -2,7 +2,7 @@
* \brief BMP - Windows Device Independent Bitmap
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_bmp.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_bmp.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -283,7 +283,7 @@ static const char* iBMPCompTable[2] =
"RLE"
};
-class imFormatBMP: public imFormat
+class imFileFormatBMP: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
unsigned short bpp; /* number of bits per pixel */
@@ -299,6 +299,22 @@ class imFormatBMP: public imFormat
void FixRGBOrder();
public:
+ imFileFormatBMP(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatBMP() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatBMP: public imFormat
+{
+public:
imFormatBMP()
:imFormat("BMP",
"Windows Device Independent Bitmap",
@@ -309,23 +325,17 @@ public:
{}
~imFormatBMP() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatBMP(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
+
void imFormatRegisterBMP(void)
{
imFormatRegister(new imFormatBMP());
}
-int imFormatBMP::Open(const char* file_name)
+int imFileFormatBMP::Open(const char* file_name)
{
unsigned short id;
unsigned int dword;
@@ -404,7 +414,7 @@ int imFormatBMP::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatBMP::New(const char* file_name)
+int imFileFormatBMP::New(const char* file_name)
{
/* opens the binary file for writing with intel byte order */
handle = imBinFileNew(file_name);
@@ -418,12 +428,12 @@ int imFormatBMP::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatBMP::Close()
+void imFileFormatBMP::Close()
{
imBinFileClose(handle);
}
-void* imFormatBMP::Handle(int index)
+void* imFileFormatBMP::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -431,7 +441,7 @@ void* imFormatBMP::Handle(int index)
return NULL;
}
-int imFormatBMP::ReadImageInfo(int index)
+int imFileFormatBMP::ReadImageInfo(int index)
{
(void)index;
unsigned int dword;
@@ -614,7 +624,7 @@ int imFormatBMP::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatBMP::WriteImageInfo()
+int imFileFormatBMP::WriteImageInfo()
{
// force bottom up orientation
this->file_data_type = IM_BYTE;
@@ -735,7 +745,7 @@ int imFormatBMP::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatBMP::ReadPalette()
+int imFileFormatBMP::ReadPalette()
{
int nc;
if (this->is_os2)
@@ -762,7 +772,7 @@ int imFormatBMP::ReadPalette()
return IM_ERR_NONE;
}
-int imFormatBMP::WritePalette()
+int imFileFormatBMP::WritePalette()
{
unsigned char bmp_colors[256 * 4];
@@ -783,7 +793,7 @@ int imFormatBMP::WritePalette()
return IM_ERR_NONE;
}
-void imFormatBMP::FixRGBOrder()
+void imFileFormatBMP::FixRGBOrder()
{
int x;
@@ -844,7 +854,7 @@ void imFormatBMP::FixRGBOrder()
}
}
-int imFormatBMP::ReadImageData(void* data)
+int imFileFormatBMP::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading BMP...");
@@ -879,7 +889,7 @@ int imFormatBMP::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatBMP::WriteImageData(void* data)
+int imFileFormatBMP::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing BMP...");
diff --git a/src/im_format_ecw.cpp b/src/im_format_ecw.cpp
index 0b77b56..bba99b0 100644
--- a/src/im_format_ecw.cpp
+++ b/src/im_format_ecw.cpp
@@ -23,20 +23,14 @@ static const char* iECWCompTable[2] =
"JPEG-2000",
};
-class imFormatECW: public imFormat
+class imFileFormatECW: public imFileFormatBase
{
NCSFileView *pNCSFileView;
// NCSEcwCompressClient *pClient;
public:
- imFormatECW()
- :imFormat("ECW",
- "ECW JPEG-2000 File Format",
- "*.ecw;*.jp2;*.j2k;*.jpc;*.j2c;",
- iECWCompTable,
- 2,
- 0)
- {}
+ imFileFormatECW(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatECW() {}
int Open(const char* file_name);
int New(const char* file_name);
@@ -46,6 +40,22 @@ public:
int ReadImageData(void* data);
int WriteImageInfo(){return 0;} // do nothing for now;
int WriteImageData(void* data){(void)data; return 0;} // do nothing for now;
+};
+
+class imFormatECW: public imFormat
+{
+public:
+ imFormatECW()
+ :imFormat("ECW",
+ "ECW JPEG-2000 File Format",
+ "*.ecw;*.jp2;*.j2k;*.jpc;*.j2c;",
+ iECWCompTable,
+ 2,
+ 0)
+ {}
+ ~imFormatECW() {}
+
+ imFileFormatBase* Create(void) const { return new imFileFormatECW(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -54,7 +64,7 @@ void imFormatRegisterECW(void)
imFormatRegister(new imFormatECW());
}
-int imFormatECW::Open(const char* file_name)
+int imFileFormatECW::Open(const char* file_name)
{
NCSError eError = NCScbmOpenFileView((char*)file_name, &this->pNCSFileView, NULL);
if (eError != NCS_SUCCESS)
@@ -82,7 +92,7 @@ int imFormatECW::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatECW::New(const char* file_name)
+int imFileFormatECW::New(const char* file_name)
{
strcpy(this->compression, "JPEG-2000");
this->image_count = 1;
@@ -91,7 +101,7 @@ int imFormatECW::New(const char* file_name)
return IM_ERR_FORMAT;
}
-void imFormatECW::Close()
+void imFileFormatECW::Close()
{
if (this->is_new)
;// NCSEcwCompressClose(this->pClient);
@@ -99,7 +109,7 @@ void imFormatECW::Close()
NCScbmCloseFileView(this->pNCSFileView);
}
-void* imFormatECW::Handle(int index)
+void* imFileFormatECW::Handle(int index)
{
(void)index;
@@ -109,7 +119,7 @@ void* imFormatECW::Handle(int index)
return (void*)this->pNCSFileView;
}
-int imFormatECW::ReadImageInfo(int index)
+int imFileFormatECW::ReadImageInfo(int index)
{
NCSFileViewFileInfoEx *pNCSFileInfo;
imAttribTable* attrib_table = AttribTable();
@@ -245,7 +255,7 @@ static void iCopyDataBuffer(UINT8 **ppOutputLine, imbyte* line_buffer, int nBand
memcpy(line_buffer, ppOutputLine[0], nBands*type_size*view_width);
}
-int imFormatECW::ReadImageData(void* data)
+int imFileFormatECW::ReadImageData(void* data)
{
imAttribTable* attrib_table = AttribTable();
int i, *attrib_data, view_width, view_height,
diff --git a/src/im_format_gif.cpp b/src/im_format_gif.cpp
index ce371ba..390271a 100644
--- a/src/im_format_gif.cpp
+++ b/src/im_format_gif.cpp
@@ -2,7 +2,7 @@
* \brief GIF - Graphics Interchange Format
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_gif.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_gif.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -932,7 +932,7 @@ static const char* iGIFCompTable[1] =
"LZW"
};
-class imFormatGIF: public imFormat
+class imFileFormatGIF: public imFileFormatBase
{
imBinFile* handle;
iGIFData gif_data;
@@ -941,6 +941,22 @@ class imFormatGIF: public imFormat
int GIFWriteImageInfo();
public:
+ imFileFormatGIF(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatGIF() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatGIF: public imFormat
+{
+public:
imFormatGIF()
:imFormat("GIF",
"Graphics Interchange Format",
@@ -951,14 +967,7 @@ public:
{}
~imFormatGIF() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatGIF(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -967,7 +976,7 @@ void imFormatRegisterGIF(void)
imFormatRegister(new imFormatGIF());
}
-int imFormatGIF::Open(const char* file_name)
+int imFileFormatGIF::Open(const char* file_name)
{
this->handle = imBinFileOpen(file_name);
if (this->handle == NULL)
@@ -1044,7 +1053,7 @@ int imFormatGIF::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatGIF::New(const char* file_name)
+int imFileFormatGIF::New(const char* file_name)
{
this->handle = imBinFileNew(file_name);
if (this->handle == NULL)
@@ -1070,7 +1079,7 @@ int imFormatGIF::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatGIF::Close()
+void imFileFormatGIF::Close()
{
if (this->is_new && !imBinFileError(this->handle))
imBinFileWrite(this->handle, (void*)";", 1, 1);
@@ -1078,7 +1087,7 @@ void imFormatGIF::Close()
imBinFileClose(this->handle);
}
-void* imFormatGIF::Handle(int index)
+void* imFileFormatGIF::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -1086,7 +1095,7 @@ void* imFormatGIF::Handle(int index)
return NULL;
}
-int imFormatGIF::GIFReadImageInfo()
+int imFileFormatGIF::GIFReadImageInfo()
{
imbyte byte_value;
imushort word_value;
@@ -1165,7 +1174,7 @@ int imFormatGIF::GIFReadImageInfo()
return IM_ERR_NONE;
}
-int imFormatGIF::GIFWriteImageInfo()
+int imFileFormatGIF::GIFWriteImageInfo()
{
this->file_data_type = IM_BYTE;
this->file_color_mode = imColorModeSpace(this->user_color_mode);
@@ -1235,7 +1244,7 @@ int imFormatGIF::GIFWriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatGIF::ReadImageInfo(int index)
+int imFileFormatGIF::ReadImageInfo(int index)
{
imAttribTable* attrib_table = AttribTable();
attrib_table->RemoveAll();
@@ -1316,7 +1325,7 @@ int imFormatGIF::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatGIF::WriteImageInfo()
+int imFileFormatGIF::WriteImageInfo()
{
this->file_color_mode = imColorModeSpace(this->user_color_mode);
this->file_color_mode |= IM_TOPDOWN;
@@ -1396,7 +1405,7 @@ int imFormatGIF::WriteImageInfo()
return iGIFCompressOutput(&gif_data, handle, gif_data.ClearCode);
}
-int imFormatGIF::ReadImageData(void* data)
+int imFileFormatGIF::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading GIF...");
@@ -1433,7 +1442,7 @@ int imFormatGIF::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatGIF::WriteImageData(void* data)
+int imFileFormatGIF::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing GIF...");
diff --git a/src/im_format_ico.cpp b/src/im_format_ico.cpp
index d4d1884..b10f30e 100644
--- a/src/im_format_ico.cpp
+++ b/src/im_format_ico.cpp
@@ -2,7 +2,7 @@
* \brief ICO - Windows Icon
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_ico.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_ico.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -49,7 +49,7 @@ static const char* iICOCompTable[1] =
"NONE"
};
-class imFormatICO: public imFormat
+class imFileFormatICO: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
unsigned short bpp; /* number of bits per pixel */
@@ -62,6 +62,22 @@ class imFormatICO: public imFormat
void FixRGBOrder();
public:
+ imFileFormatICO(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatICO() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatICO: public imFormat
+{
+public:
imFormatICO()
:imFormat("ICO",
"Windows Icon",
@@ -72,23 +88,17 @@ public:
{}
~imFormatICO() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatICO(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
+
void imFormatRegisterICO(void)
{
imFormatRegister(new imFormatICO());
}
-int imFormatICO::Open(const char* file_name)
+int imFileFormatICO::Open(const char* file_name)
{
unsigned short word;
@@ -145,7 +155,7 @@ int imFormatICO::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatICO::New(const char* file_name)
+int imFileFormatICO::New(const char* file_name)
{
/* opens the binary file for writing with intel byte order */
handle = imBinFileNew(file_name);
@@ -165,7 +175,7 @@ int imFormatICO::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatICO::Close()
+void imFileFormatICO::Close()
{
if (this->is_new)
{
@@ -180,7 +190,7 @@ void imFormatICO::Close()
imBinFileClose(handle);
}
-void* imFormatICO::Handle(int index)
+void* imFileFormatICO::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -188,7 +198,7 @@ void* imFormatICO::Handle(int index)
return NULL;
}
-int imFormatICO::ReadImageInfo(int index)
+int imFileFormatICO::ReadImageInfo(int index)
{
this->file_data_type = IM_BYTE;
unsigned int dword_value;
@@ -270,7 +280,7 @@ int imFormatICO::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatICO::WriteImageInfo()
+int imFileFormatICO::WriteImageInfo()
{
this->file_data_type = IM_BYTE;
this->file_color_mode = imColorModeSpace(this->user_color_mode);
@@ -368,7 +378,7 @@ int imFormatICO::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatICO::ReadPalette()
+int imFileFormatICO::ReadPalette()
{
/* reads the color palette */
unsigned char bmp_colors[256 * 4];
@@ -389,7 +399,7 @@ int imFormatICO::ReadPalette()
return IM_ERR_NONE;
}
-int imFormatICO::WritePalette()
+int imFileFormatICO::WritePalette()
{
unsigned char bmp_colors[256 * 4];
@@ -410,7 +420,7 @@ int imFormatICO::WritePalette()
return IM_ERR_NONE;
}
-void imFormatICO::FixRGBOrder()
+void imFileFormatICO::FixRGBOrder()
{
if (this->bpp == 24)
{
@@ -455,7 +465,7 @@ static inline int PixelOffset(int is_top_down, int is_packed, int width, int hei
return plane*width*height + row*width + col;
}
-int imFormatICO::ReadImageData(void* data)
+int imFileFormatICO::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading ICO...");
@@ -542,7 +552,7 @@ int imFormatICO::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatICO::WriteImageData(void* data)
+int imFileFormatICO::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing ICO...");
diff --git a/src/im_format_jp2.cpp b/src/im_format_jp2.cpp
index 16e2c60..de25e88 100644
--- a/src/im_format_jp2.cpp
+++ b/src/im_format_jp2.cpp
@@ -3,7 +3,7 @@
*
* See Copyright Notice in im_lib.h
* See libJaper Copyright Notice in jasper.h
- * $Id: im_format_jp2.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_jp2.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -103,6 +103,26 @@ static const char* iJP2CompTable[1] =
"JPEG-2000",
};
+class imFileFormatJP2: public imFileFormatBase
+{
+ int fmtid;
+ jas_stream_t *stream;
+ jas_image_t *image;
+
+public:
+ imFileFormatJP2(const imFormat* _iformat): imFileFormatBase(_iformat), image(0) {}
+ ~imFileFormatJP2() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
class imFormatJP2: public imFormat
{
int fmtid;
@@ -118,18 +138,10 @@ public:
1,
0)
{
- image = 0;
}
~imFormatJP2() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatJP2(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -166,7 +178,7 @@ void imFormatRegisterJP2(void)
imFormatRegister(new imFormatJP2());
}
-int imFormatJP2::Open(const char* file_name)
+int imFileFormatJP2::Open(const char* file_name)
{
this->stream = jas_binfile_open(file_name, 0);
if (this->stream == NULL)
@@ -185,7 +197,7 @@ int imFormatJP2::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatJP2::New(const char* file_name)
+int imFileFormatJP2::New(const char* file_name)
{
this->stream = jas_binfile_open(file_name, 1);
if (this->stream == NULL)
@@ -197,7 +209,7 @@ int imFormatJP2::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatJP2::Close()
+void imFileFormatJP2::Close()
{
if (this->image)
jas_image_destroy(this->image);
@@ -205,7 +217,7 @@ void imFormatJP2::Close()
jas_stream_close(this->stream);
}
-void* imFormatJP2::Handle(int index)
+void* imFileFormatJP2::Handle(int index)
{
if (index == 0)
return (void*)this->stream->obj_;
@@ -217,7 +229,7 @@ void* imFormatJP2::Handle(int index)
return NULL;
}
-int imFormatJP2::ReadImageInfo(int index)
+int imFileFormatJP2::ReadImageInfo(int index)
{
(void)index;
@@ -290,7 +302,7 @@ int imFormatJP2::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatJP2::WriteImageInfo()
+int imFileFormatJP2::WriteImageInfo()
{
this->file_data_type = this->user_data_type;
this->file_color_mode = imColorModeSpace(this->user_color_mode);
@@ -377,7 +389,7 @@ int imFormatJP2::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatJP2::ReadImageData(void* data)
+int imFileFormatJP2::ReadImageData(void* data)
{
int count = imFileLineBufferCount(this);
@@ -419,7 +431,7 @@ int imFormatJP2::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatJP2::WriteImageData(void* data)
+int imFileFormatJP2::WriteImageData(void* data)
{
int count = imFileLineBufferCount(this);
imCounterTotal(this->counter, count, "Writing JP2..."); /* first time count */
diff --git a/src/im_format_jpeg.cpp b/src/im_format_jpeg.cpp
index 91d0ae9..487db0b 100644
--- a/src/im_format_jpeg.cpp
+++ b/src/im_format_jpeg.cpp
@@ -3,7 +3,7 @@
*
* See Copyright Notice in im_lib.h
* See libJPEG Copyright Notice in jpeglib.h
- * $Id: im_format_jpeg.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_jpeg.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -69,7 +69,7 @@ static const char* iJPEGCompTable[1] =
"JPEG"
};
-class imFormatJPEG: public imFormat
+class imFileFormatJPEG: public imFileFormatBase
{
jpeg_decompress_struct dinfo;
jpeg_compress_struct cinfo;
@@ -84,6 +84,22 @@ class imFormatJPEG: public imFormat
#endif
public:
+ imFileFormatJPEG(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatJPEG() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatJPEG: public imFormat
+{
+public:
imFormatJPEG()
:imFormat("JPEG",
"JPEG File Interchange Format",
@@ -94,14 +110,7 @@ public:
{}
~imFormatJPEG() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatJPEG(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -110,7 +119,7 @@ void imFormatRegisterJPEG(void)
imFormatRegister(new imFormatJPEG());
}
-int imFormatJPEG::Open(const char* file_name)
+int imFileFormatJPEG::Open(const char* file_name)
{
this->handle = imBinFileOpen(file_name);
if (this->handle == NULL)
@@ -158,7 +167,7 @@ int imFormatJPEG::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatJPEG::New(const char* file_name)
+int imFileFormatJPEG::New(const char* file_name)
{
this->handle = imBinFileNew(file_name);
if (this->handle == NULL)
@@ -190,7 +199,7 @@ int imFormatJPEG::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatJPEG::Close()
+void imFileFormatJPEG::Close()
{
if (this->is_new)
jpeg_destroy_compress(&this->cinfo);
@@ -200,7 +209,7 @@ void imFormatJPEG::Close()
imBinFileClose(this->handle);
}
-void* imFormatJPEG::Handle(int index)
+void* imFileFormatJPEG::Handle(int index)
{
if (index == 0)
return this->handle;
@@ -216,7 +225,7 @@ void* imFormatJPEG::Handle(int index)
}
#ifdef USE_EXIF
-void imFormatJPEG::iReadExifAttrib(unsigned char* data, int data_length, imAttribTable* attrib_table)
+void imFileFormatJPEG::iReadExifAttrib(unsigned char* data, int data_length, imAttribTable* attrib_table)
{
ExifData* exif = exif_data_new_from_data(data, data_length);
if (!exif)
@@ -377,7 +386,7 @@ static void iGetRational(float fvalue, int *num, int *den, int sign)
*num = sign * imRound(fvalue);
}
-void imFormatJPEG::iWriteExifAttrib(imAttribTable* attrib_table)
+void imFileFormatJPEG::iWriteExifAttrib(imAttribTable* attrib_table)
{
ExifData* exif = exif_data_new();
@@ -525,7 +534,7 @@ void imFormatJPEG::iWriteExifAttrib(imAttribTable* attrib_table)
}
#endif
-int imFormatJPEG::ReadImageInfo(int index)
+int imFileFormatJPEG::ReadImageInfo(int index)
{
(void)index;
this->fix_adobe = 0;
@@ -635,7 +644,7 @@ int imFormatJPEG::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatJPEG::WriteImageInfo()
+int imFileFormatJPEG::WriteImageInfo()
{
this->file_color_mode = imColorModeSpace(this->user_color_mode);
this->file_color_mode |= IM_TOPDOWN;
@@ -737,7 +746,7 @@ static void iFixAdobe(unsigned char* line_buffer, int width)
}
}
-int imFormatJPEG::ReadImageData(void* data)
+int imFileFormatJPEG::ReadImageData(void* data)
{
if (setjmp(this->jerr.setjmp_buffer))
return IM_ERR_ACCESS;
@@ -769,7 +778,7 @@ int imFormatJPEG::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatJPEG::WriteImageData(void* data)
+int imFileFormatJPEG::WriteImageData(void* data)
{
if (setjmp(this->jerr.setjmp_buffer))
return IM_ERR_ACCESS;
diff --git a/src/im_format_krn.cpp b/src/im_format_krn.cpp
index 41c9be7..21261a8 100644
--- a/src/im_format_krn.cpp
+++ b/src/im_format_krn.cpp
@@ -2,7 +2,7 @@
* \brief KRN - IM Kernel File Format
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_krn.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_krn.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -124,11 +124,27 @@ static const char* iKRNCompTable[1] =
"NONE"
};
-class imFormatKRN: public imFormat
+class imFileFormatKRN: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
public:
+ imFileFormatKRN(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatKRN() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatKRN: public imFormat
+{
+public:
imFormatKRN()
:imFormat("KRN",
"IM Kernel File Format",
@@ -139,14 +155,7 @@ public:
{}
~imFormatKRN() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatKRN(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -155,7 +164,7 @@ void imFormatRegisterKRN(void)
imFormatRegister(new imFormatKRN());
}
-int imFormatKRN::Open(const char* file_name)
+int imFileFormatKRN::Open(const char* file_name)
{
char sig[9];
@@ -186,7 +195,7 @@ int imFormatKRN::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatKRN::New(const char* file_name)
+int imFileFormatKRN::New(const char* file_name)
{
/* opens the binary file for writing */
handle = imBinFileNew(file_name);
@@ -203,12 +212,12 @@ int imFormatKRN::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatKRN::Close()
+void imFileFormatKRN::Close()
{
imBinFileClose(handle);
}
-void* imFormatKRN::Handle(int index)
+void* imFileFormatKRN::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -216,7 +225,7 @@ void* imFormatKRN::Handle(int index)
return NULL;
}
-int imFormatKRN::ReadImageInfo(int index)
+int imFileFormatKRN::ReadImageInfo(int index)
{
(void)index;
this->file_color_mode = IM_GRAY|IM_TOPDOWN;
@@ -248,7 +257,7 @@ int imFormatKRN::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatKRN::WriteImageInfo()
+int imFileFormatKRN::WriteImageInfo()
{
this->file_data_type = this->user_data_type;
this->file_color_mode = IM_GRAY|IM_TOPDOWN;
@@ -283,7 +292,7 @@ int imFormatKRN::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatKRN::ReadImageData(void* data)
+int imFileFormatKRN::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading KRN...");
@@ -318,7 +327,7 @@ int imFormatKRN::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatKRN::WriteImageData(void* data)
+int imFileFormatKRN::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing KRN...");
diff --git a/src/im_format_led.cpp b/src/im_format_led.cpp
index d67ee8c..eb7173c 100644
--- a/src/im_format_led.cpp
+++ b/src/im_format_led.cpp
@@ -2,7 +2,7 @@
* \brief LED - IUP image in LED
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_led.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_led.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -81,7 +81,7 @@ static const char* iLEDCompTable[1] =
"NONE"
};
-class imFormatLED: public imFormat
+class imFileFormatLED: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
int pal_count;
@@ -90,6 +90,22 @@ class imFormatLED: public imFormat
int WritePalette();
public:
+ imFileFormatLED(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatLED() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatLED: public imFormat
+{
+public:
imFormatLED()
:imFormat("LED",
"IUP image in LED special format",
@@ -100,23 +116,17 @@ public:
{}
~imFormatLED() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatLED(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
+
void imFormatRegisterLED(void)
{
imFormatRegister(new imFormatLED());
}
-int imFormatLED::Open(const char* file_name)
+int imFileFormatLED::Open(const char* file_name)
{
char sig[4];
unsigned char byte_value;
@@ -171,7 +181,7 @@ int imFormatLED::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatLED::New(const char* file_name)
+int imFileFormatLED::New(const char* file_name)
{
/* opens the binary file for writing */
handle = imBinFileNew(file_name);
@@ -190,12 +200,12 @@ int imFormatLED::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatLED::Close()
+void imFileFormatLED::Close()
{
imBinFileClose(handle);
}
-void* imFormatLED::Handle(int index)
+void* imFileFormatLED::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -203,7 +213,7 @@ void* imFormatLED::Handle(int index)
return NULL;
}
-int imFormatLED::ReadImageInfo(int index)
+int imFileFormatLED::ReadImageInfo(int index)
{
(void)index;
@@ -225,7 +235,7 @@ int imFormatLED::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatLED::WriteImageInfo()
+int imFileFormatLED::WriteImageInfo()
{
this->file_data_type = IM_BYTE;
this->file_color_mode = imColorModeSpace(this->user_color_mode);
@@ -239,7 +249,7 @@ int imFormatLED::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatLED::ReadPalette()
+int imFileFormatLED::ReadPalette()
{
int c, r, g, b, i;
@@ -260,7 +270,7 @@ int imFormatLED::ReadPalette()
return IM_ERR_NONE;
}
-int imFormatLED::WritePalette()
+int imFileFormatLED::WritePalette()
{
int c;
unsigned char r, g, b;
@@ -285,7 +295,7 @@ int imFormatLED::WritePalette()
return IM_ERR_NONE;
}
-int imFormatLED::ReadImageData(void* data)
+int imFileFormatLED::ReadImageData(void* data)
{
int value;
@@ -310,7 +320,7 @@ int imFormatLED::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatLED::WriteImageData(void* data)
+int imFileFormatLED::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing LED...");
diff --git a/src/im_format_pcx.cpp b/src/im_format_pcx.cpp
index 32487bc..fd206ae 100644
--- a/src/im_format_pcx.cpp
+++ b/src/im_format_pcx.cpp
@@ -2,7 +2,7 @@
* \brief PCX - ZSoft Picture
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_pcx.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_pcx.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -145,7 +145,7 @@ static const char* iPCXCompTable[2] =
"RLE"
};
-class imFormatPCX: public imFormat
+class imFileFormatPCX: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
int bpp; /* number of bits per pixel */
@@ -160,6 +160,22 @@ class imFormatPCX: public imFormat
void Unpack24bpp();
public:
+ imFileFormatPCX(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatPCX() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatPCX: public imFormat
+{
+public:
imFormatPCX()
:imFormat("PCX",
"ZSoft Picture",
@@ -170,23 +186,17 @@ public:
{}
~imFormatPCX() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatPCX(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
+
void imFormatRegisterPCX(void)
{
imFormatRegister(new imFormatPCX());
}
-int imFormatPCX::Open(const char* file_name)
+int imFileFormatPCX::Open(const char* file_name)
{
unsigned char id;
@@ -226,7 +236,7 @@ int imFormatPCX::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatPCX::New(const char* file_name)
+int imFileFormatPCX::New(const char* file_name)
{
/* opens the binary file for writing with intel byte order */
handle = imBinFileNew(file_name);
@@ -238,12 +248,12 @@ int imFormatPCX::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatPCX::Close()
+void imFileFormatPCX::Close()
{
imBinFileClose(handle);
}
-void* imFormatPCX::Handle(int index)
+void* imFileFormatPCX::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -251,7 +261,7 @@ void* imFormatPCX::Handle(int index)
return NULL;
}
-int imFormatPCX::ReadImageInfo(int index)
+int imFileFormatPCX::ReadImageInfo(int index)
{
unsigned char bppp, planes;
unsigned short xmin, xmax, ymax, ymin, word, bplp;
@@ -339,7 +349,7 @@ int imFormatPCX::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatPCX::WriteImageInfo()
+int imFileFormatPCX::WriteImageInfo()
{
unsigned short word_value, bplp;
unsigned char byte_value, filler[54+3*2];
@@ -447,7 +457,7 @@ int imFormatPCX::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatPCX::ReadPalette()
+int imFileFormatPCX::ReadPalette()
{
unsigned char pcx_colors[256 * 3];
@@ -498,7 +508,7 @@ int imFormatPCX::ReadPalette()
return IM_ERR_NONE;
}
-int imFormatPCX::WritePalette()
+int imFileFormatPCX::WritePalette()
{
unsigned char ExtPal = (unsigned char)12;
unsigned char pcx_colors[256 * 3];
@@ -522,7 +532,7 @@ int imFormatPCX::WritePalette()
return IM_ERR_NONE;
}
-void imFormatPCX::Expand4bpp()
+void imFileFormatPCX::Expand4bpp()
{
int num_bits = 8, WidthDiv8 = (this->width + 7) / 8;
@@ -559,7 +569,7 @@ void imFormatPCX::Expand4bpp()
memcpy(this->line_buffer, in_data + this->line_buffer_size+2, this->width);
}
-void imFormatPCX::Pack24bpp()
+void imFileFormatPCX::Pack24bpp()
{
imbyte *in_data = (unsigned char*)this->line_buffer;
imbyte *out_data = in_data + this->line_buffer_size+2;
@@ -580,7 +590,7 @@ void imFormatPCX::Pack24bpp()
memcpy(in_data, in_data + this->line_buffer_size+2, this->line_raw_size);
}
-void imFormatPCX::Unpack24bpp()
+void imFileFormatPCX::Unpack24bpp()
{
imbyte *in_data = (unsigned char*)this->line_buffer;
imbyte *out_data = in_data + this->line_buffer_size+2;
@@ -601,7 +611,7 @@ void imFormatPCX::Unpack24bpp()
memcpy(out_data - (this->line_buffer_size+2), out_data, this->line_raw_size);
}
-int imFormatPCX::ReadImageData(void* data)
+int imFileFormatPCX::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading PCX...");
@@ -637,7 +647,7 @@ int imFormatPCX::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatPCX::WriteImageData(void* data)
+int imFileFormatPCX::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing PCX...");
diff --git a/src/im_format_png.cpp b/src/im_format_png.cpp
index 1e7f8ba..314f07f 100644
--- a/src/im_format_png.cpp
+++ b/src/im_format_png.cpp
@@ -3,7 +3,7 @@
*
* See Copyright Notice in im_lib.h
* See libPNG Copyright Notice in png.h
- * $Id: im_format_png.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_png.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -42,7 +42,7 @@ static const char* iPNGCompTable[1] =
"DEFLATE"
};
-class imFormatPNG: public imFormat
+class imFileFormatPNG: public imFileFormatBase
{
png_structp png_ptr;
png_infop info_ptr;
@@ -54,6 +54,22 @@ class imFormatPNG: public imFormat
void iWriteAttrib(imAttribTable* attrib_table);
public:
+ imFileFormatPNG(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatPNG() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatPNG: public imFormat
+{
+public:
imFormatPNG()
:imFormat("PNG",
"Portable Network Graphic Format",
@@ -64,14 +80,7 @@ public:
{}
~imFormatPNG() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatPNG(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -80,7 +89,7 @@ void imFormatRegisterPNG(void)
imFormatRegister(new imFormatPNG());
}
-int imFormatPNG::Open(const char* file_name)
+int imFileFormatPNG::Open(const char* file_name)
{
this->handle = imBinFileOpen(file_name);
if (this->handle == NULL)
@@ -115,7 +124,7 @@ int imFormatPNG::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatPNG::New(const char* file_name)
+int imFileFormatPNG::New(const char* file_name)
{
this->handle = imBinFileNew(file_name);
if (this->handle == NULL)
@@ -134,7 +143,7 @@ int imFormatPNG::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatPNG::Close()
+void imFileFormatPNG::Close()
{
if (this->is_new)
png_destroy_write_struct(&this->png_ptr, &this->info_ptr);
@@ -144,7 +153,7 @@ void imFormatPNG::Close()
imBinFileClose(this->handle);
}
-void* imFormatPNG::Handle(int index)
+void* imFileFormatPNG::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -154,7 +163,7 @@ void* imFormatPNG::Handle(int index)
return 0;
}
-void imFormatPNG::iReadAttrib(imAttribTable* attrib_table)
+void imFileFormatPNG::iReadAttrib(imAttribTable* attrib_table)
{
double gamma;
if (png_get_gAMA(png_ptr, info_ptr, &gamma))
@@ -377,7 +386,7 @@ static int iFindAttribString(void* user_data, int index, const char* name, int d
return 1;
}
-void imFormatPNG::iWriteAttrib(imAttribTable* attrib_table)
+void imFileFormatPNG::iWriteAttrib(imAttribTable* attrib_table)
{
const void* attrib_data = attrib_table->Get("Gamma");
if (attrib_data)
@@ -563,7 +572,7 @@ void imFormatPNG::iWriteAttrib(imAttribTable* attrib_table)
}
}
-int imFormatPNG::ReadImageInfo(int index)
+int imFileFormatPNG::ReadImageInfo(int index)
{
(void)index;
@@ -678,7 +687,7 @@ int imFormatPNG::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatPNG::WriteImageInfo()
+int imFileFormatPNG::WriteImageInfo()
{
this->file_color_mode = imColorModeSpace(this->user_color_mode);
this->file_color_mode |= IM_TOPDOWN;
@@ -805,7 +814,7 @@ static int iInterlaceRowCheck(int row_step, int pass)
return 0;
}
-int imFormatPNG::ReadImageData(void* data)
+int imFileFormatPNG::ReadImageData(void* data)
{
if (setjmp(this->png_ptr->jmpbuf))
return IM_ERR_ACCESS;
@@ -856,7 +865,7 @@ int imFormatPNG::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatPNG::WriteImageData(void* data)
+int imFileFormatPNG::WriteImageData(void* data)
{
if (setjmp(this->png_ptr->jmpbuf))
return IM_ERR_ACCESS;
diff --git a/src/im_format_pnm.cpp b/src/im_format_pnm.cpp
index 1c7832a..bd034ad 100644
--- a/src/im_format_pnm.cpp
+++ b/src/im_format_pnm.cpp
@@ -2,7 +2,7 @@
* \brief PNM - Netpbm Portable Image Map
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_pnm.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_pnm.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -98,7 +98,7 @@ static const char* iPNMCompTable[2] =
"ASCII"
};
-class imFormatPNM: public imFormat
+class imFileFormatPNM: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
unsigned char image_type;
@@ -106,6 +106,22 @@ class imFormatPNM: public imFormat
void FixBinary();
public:
+ imFileFormatPNM(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatPNM() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatPNM: public imFormat
+{
+public:
imFormatPNM()
:imFormat("PNM",
"Netpbm Portable Image Map",
@@ -116,23 +132,17 @@ public:
{}
~imFormatPNM() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatPNM(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
+
void imFormatRegisterPNM(void)
{
imFormatRegister(new imFormatPNM());
}
-int imFormatPNM::Open(const char* file_name)
+int imFileFormatPNM::Open(const char* file_name)
{
unsigned char sig[2];
@@ -168,7 +178,7 @@ int imFormatPNM::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatPNM::New(const char* file_name)
+int imFileFormatPNM::New(const char* file_name)
{
/* opens the binary file for writing */
handle = imBinFileNew(file_name);
@@ -180,12 +190,12 @@ int imFormatPNM::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatPNM::Close()
+void imFileFormatPNM::Close()
{
imBinFileClose(handle);
}
-void* imFormatPNM::Handle(int index)
+void* imFileFormatPNM::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -193,7 +203,7 @@ void* imFormatPNM::Handle(int index)
return NULL;
}
-int imFormatPNM::ReadImageInfo(int index)
+int imFileFormatPNM::ReadImageInfo(int index)
{
(void)index;
@@ -249,7 +259,7 @@ int imFormatPNM::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatPNM::WriteImageInfo()
+int imFileFormatPNM::WriteImageInfo()
{
this->file_data_type = this->user_data_type;
this->file_color_mode = imColorModeSpace(this->user_color_mode);
@@ -328,7 +338,7 @@ int imFormatPNM::WriteImageInfo()
return IM_ERR_NONE;
}
-void imFormatPNM::FixBinary()
+void imFileFormatPNM::FixBinary()
{
unsigned char* buf = (unsigned char*)this->line_buffer;
for (int b = 0; b < this->line_buffer_size; b++)
@@ -338,7 +348,7 @@ void imFormatPNM::FixBinary()
}
}
-int imFormatPNM::ReadImageData(void* data)
+int imFileFormatPNM::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading PNM...");
@@ -414,7 +424,7 @@ int imFormatPNM::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatPNM::WriteImageData(void* data)
+int imFileFormatPNM::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing PNM...");
diff --git a/src/im_format_ras.cpp b/src/im_format_ras.cpp
index bab074a..1960c49 100644
--- a/src/im_format_ras.cpp
+++ b/src/im_format_ras.cpp
@@ -2,7 +2,7 @@
* \brief RAS - Sun Raster File
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_ras.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_ras.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -153,7 +153,7 @@ static const char* iRASCompTable[2] =
"RLE"
};
-class imFormatRAS: public imFormat
+class imFileFormatRAS: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
unsigned int bpp, /* number of bits per pixel */
@@ -166,6 +166,22 @@ class imFormatRAS: public imFormat
void FixRGB();
public:
+ imFileFormatRAS(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatRAS() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatRAS: public imFormat
+{
+public:
imFormatRAS()
:imFormat("RAS",
"Sun Raster File",
@@ -176,23 +192,17 @@ public:
{}
~imFormatRAS() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatRAS(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
+
void imFormatRegisterRAS(void)
{
imFormatRegister(new imFormatRAS());
}
-int imFormatRAS::Open(const char* file_name)
+int imFileFormatRAS::Open(const char* file_name)
{
unsigned int dword_value;
@@ -238,7 +248,7 @@ int imFormatRAS::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatRAS::New(const char* file_name)
+int imFileFormatRAS::New(const char* file_name)
{
/* opens the binary file for writing with motorola byte order */
handle = imBinFileNew(file_name);
@@ -252,12 +262,12 @@ int imFormatRAS::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatRAS::Close()
+void imFileFormatRAS::Close()
{
imBinFileClose(handle);
}
-void* imFormatRAS::Handle(int index)
+void* imFileFormatRAS::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -265,7 +275,7 @@ void* imFormatRAS::Handle(int index)
return NULL;
}
-int imFormatRAS::ReadImageInfo(int index)
+int imFileFormatRAS::ReadImageInfo(int index)
{
(void)index;
unsigned int dword_value;
@@ -347,7 +357,7 @@ int imFormatRAS::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatRAS::WriteImageInfo()
+int imFileFormatRAS::WriteImageInfo()
{
this->file_data_type = IM_BYTE;
this->file_color_mode = imColorModeSpace(this->user_color_mode);
@@ -420,7 +430,7 @@ int imFormatRAS::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatRAS::ReadPalette()
+int imFileFormatRAS::ReadPalette()
{
unsigned char ras_colors[256 * 3];
@@ -451,7 +461,7 @@ int imFormatRAS::ReadPalette()
return IM_ERR_NONE;
}
-int imFormatRAS::WritePalette()
+int imFileFormatRAS::WritePalette()
{
int c;
unsigned char ras_colors[256 * 3];
@@ -471,7 +481,7 @@ int imFormatRAS::WritePalette()
return IM_ERR_NONE;
}
-void imFormatRAS::FixRGB()
+void imFileFormatRAS::FixRGB()
{
int x;
imbyte* byte_data = (imbyte*)this->line_buffer;
@@ -509,7 +519,7 @@ void imFormatRAS::FixRGB()
}
}
-int imFormatRAS::ReadImageData(void* data)
+int imFileFormatRAS::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading RAS...");
@@ -541,7 +551,7 @@ int imFormatRAS::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatRAS::WriteImageData(void* data)
+int imFileFormatRAS::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing RAS...");
diff --git a/src/im_format_raw.cpp b/src/im_format_raw.cpp
index 83ffadb..a7b7934 100644
--- a/src/im_format_raw.cpp
+++ b/src/im_format_raw.cpp
@@ -2,7 +2,7 @@
* \brief RAW File Format
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_raw.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_raw.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -20,7 +20,7 @@ static const char* iRAWCompTable[1] =
"NONE"
};
-class imFormatRAW: public imFormat
+class imFileFormatRAW: public imFileFormatBase
{
imBinFile* handle;
int padding;
@@ -28,6 +28,22 @@ class imFormatRAW: public imFormat
int iRawUpdateParam(int index);
public:
+ imFileFormatRAW(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatRAW() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatRAW: public imFormat
+{
+public:
imFormatRAW()
:imFormat("RAW",
"RAW File Format",
@@ -38,23 +54,18 @@ public:
{}
~imFormatRAW() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatRAW(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
-imFormat* imFormatInitRAW(void)
+
+imFileFormatBase* imFormatInitRAW(void)
{
- return new imFormatRAW();
+ imFormatRAW iformat;
+ return iformat.Create();
}
-int imFormatRAW::Open(const char* file_name)
+int imFileFormatRAW::Open(const char* file_name)
{
this->handle = imBinFileOpen(file_name);
if (this->handle == NULL)
@@ -68,7 +79,7 @@ int imFormatRAW::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatRAW::New(const char* file_name)
+int imFileFormatRAW::New(const char* file_name)
{
this->handle = imBinFileNew(file_name);
if (this->handle == NULL)
@@ -79,12 +90,12 @@ int imFormatRAW::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatRAW::Close()
+void imFileFormatRAW::Close()
{
imBinFileClose(this->handle);
}
-void* imFormatRAW::Handle(int index)
+void* imFileFormatRAW::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -106,7 +117,7 @@ static int iCalcPad(int padding, int line_size)
}
}
-int imFormatRAW::iRawUpdateParam(int index)
+int imFileFormatRAW::iRawUpdateParam(int index)
{
(void)index;
@@ -156,12 +167,12 @@ int imFormatRAW::iRawUpdateParam(int index)
return IM_ERR_NONE;
}
-int imFormatRAW::ReadImageInfo(int index)
+int imFileFormatRAW::ReadImageInfo(int index)
{
return iRawUpdateParam(index);
}
-int imFormatRAW::WriteImageInfo()
+int imFileFormatRAW::WriteImageInfo()
{
this->file_color_mode = this->user_color_mode;
this->file_data_type = this->user_data_type;
@@ -177,7 +188,7 @@ static int iFileDataTypeSize(int file_data_type, int switch_type)
return type_size;
}
-int imFormatRAW::ReadImageData(void* data)
+int imFileFormatRAW::ReadImageData(void* data)
{
int count = imFileLineBufferCount(this);
int line_count = imImageLineCount(this->width, this->file_color_mode);
@@ -214,7 +225,7 @@ int imFormatRAW::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatRAW::WriteImageData(void* data)
+int imFileFormatRAW::WriteImageData(void* data)
{
int count = imFileLineBufferCount(this);
int line_count = imImageLineCount(this->width, this->file_color_mode);
@@ -267,4 +278,3 @@ int imFormatRAW::CanWrite(const char* compression, int color_mode, int data_type
return IM_ERR_NONE;
}
-
diff --git a/src/im_format_sgi.cpp b/src/im_format_sgi.cpp
index 1b0ac0a..08bbf4d 100644
--- a/src/im_format_sgi.cpp
+++ b/src/im_format_sgi.cpp
@@ -2,7 +2,7 @@
* \brief SGI - Silicon Graphics Image File Format
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_sgi.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_sgi.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -133,15 +133,31 @@ static const char* iSGICompTable[2] =
"RLE"
};
-class imFormatSGI: public imFormat
+class imFileFormatSGI: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
unsigned char comp_type, /* sgi compression information */
bpc; /* bytes per channels */
- unsigned int *starttab, /* compression control buffer */
- *lengthtab; /* compression control buffer */
+ unsigned int *starttab, /* compression control buffer */
+ *lengthtab; /* compression control buffer */
public:
+ imFileFormatSGI(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatSGI() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatSGI: public imFormat
+{
+public:
imFormatSGI()
:imFormat("SGI",
"Silicon Graphics Image File Format",
@@ -152,14 +168,7 @@ public:
{}
~imFormatSGI() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatSGI(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -168,7 +177,7 @@ void imFormatRegisterSGI(void)
imFormatRegister(new imFormatSGI());
}
-int imFormatSGI::Open(const char* file_name)
+int imFileFormatSGI::Open(const char* file_name)
{
unsigned short word_value;
@@ -213,7 +222,7 @@ int imFormatSGI::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatSGI::New(const char* file_name)
+int imFileFormatSGI::New(const char* file_name)
{
/* opens the binary file for writing with motorola byte order */
handle = imBinFileNew(file_name);
@@ -230,14 +239,14 @@ int imFormatSGI::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatSGI::Close()
+void imFileFormatSGI::Close()
{
if (this->starttab) free(this->starttab);
if (this->lengthtab) free(this->lengthtab);
imBinFileClose(handle);
}
-void* imFormatSGI::Handle(int index)
+void* imFileFormatSGI::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -245,7 +254,7 @@ void* imFormatSGI::Handle(int index)
return NULL;
}
-int imFormatSGI::ReadImageInfo(int index)
+int imFileFormatSGI::ReadImageInfo(int index)
{
(void)index;
unsigned short word_value, dimension, depth;
@@ -378,7 +387,7 @@ int imFormatSGI::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatSGI::WriteImageInfo()
+int imFileFormatSGI::WriteImageInfo()
{
unsigned int dword_value;
unsigned short word_value;
@@ -487,7 +496,7 @@ int imFormatSGI::WriteImageInfo()
return IM_ERR_NONE;
}
-int imFormatSGI::ReadImageData(void* data)
+int imFileFormatSGI::ReadImageData(void* data)
{
int count = imFileLineBufferCount(this);
@@ -533,7 +542,7 @@ int imFormatSGI::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatSGI::WriteImageData(void* data)
+int imFileFormatSGI::WriteImageData(void* data)
{
int count = imFileLineBufferCount(this);
diff --git a/src/im_format_tga.cpp b/src/im_format_tga.cpp
index 8e8e176..86e968a 100644
--- a/src/im_format_tga.cpp
+++ b/src/im_format_tga.cpp
@@ -2,7 +2,7 @@
* \brief TGA - Truevision Graphics Adapter File
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_tga.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_tga.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -207,7 +207,7 @@ static const char* iTGACompTable[2] =
"RLE"
};
-class imFormatTGA: public imFormat
+class imFileFormatTGA: public imFileFormatBase
{
imBinFile* handle; /* the binary file handle */
unsigned char id_lenght;
@@ -220,6 +220,22 @@ class imFormatTGA: public imFormat
int SaveExtensionArea();
public:
+ imFileFormatTGA(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatTGA() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatTGA: public imFormat
+{
+public:
imFormatTGA()
:imFormat("TGA",
"Truevision Graphics Adapter File",
@@ -230,14 +246,7 @@ public:
{}
~imFormatTGA() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatTGA(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -246,7 +255,7 @@ void imFormatRegisterTGA(void)
imFormatRegister(new imFormatTGA());
}
-int imFormatTGA::Open(const char* file_name)
+int imFileFormatTGA::Open(const char* file_name)
{
/* opens the binary file for reading with intel byte order */
handle = imBinFileOpen(file_name);
@@ -294,7 +303,7 @@ int imFormatTGA::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatTGA::New(const char* file_name)
+int imFileFormatTGA::New(const char* file_name)
{
/* opens the binary file for writing with intel byte order */
handle = imBinFileNew(file_name);
@@ -306,12 +315,12 @@ int imFormatTGA::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatTGA::Close()
+void imFileFormatTGA::Close()
{
imBinFileClose(handle);
}
-void* imFormatTGA::Handle(int index)
+void* imFileFormatTGA::Handle(int index)
{
if (index == 0)
return (void*)this->handle;
@@ -319,7 +328,7 @@ void* imFormatTGA::Handle(int index)
return NULL;
}
-int imFormatTGA::ReadImageInfo(int index)
+int imFileFormatTGA::ReadImageInfo(int index)
{
(void)index;
unsigned char byte_value;
@@ -436,7 +445,7 @@ int imFormatTGA::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatTGA::WriteImageInfo()
+int imFileFormatTGA::WriteImageInfo()
{
unsigned char byte_value;
unsigned short word_value;
@@ -487,7 +496,7 @@ int imFormatTGA::WriteImageInfo()
int length = 0;
const char* desc_attrib = (const char*)attrib_table->Get("Title", NULL, &length);
- if (desc)
+ if (desc_attrib)
{
if (length > 255)
this->id_lenght = 255;
@@ -600,7 +609,7 @@ static long iTGARGB2Color(int c, unsigned char *colors, int map_bpp)
return imColorEncode(r, g, b);
}
-int imFormatTGA::ReadPalette()
+int imFileFormatTGA::ReadPalette()
{
int map_size = imFileLineSizeAligned(this->palette_count, this->map_bpp, 1);
unsigned char* tga_colors = (unsigned char*) malloc(map_size);
@@ -622,7 +631,7 @@ int imFormatTGA::ReadPalette()
return 1;
}
-int imFormatTGA::WritePalette()
+int imFileFormatTGA::WritePalette()
{
unsigned char tga_color[256*3];
@@ -642,7 +651,7 @@ int imFormatTGA::WritePalette()
return 1;
}
-int imFormatTGA::LoadExtensionArea()
+int imFileFormatTGA::LoadExtensionArea()
{
unsigned int dword_value;
imBinFileSeekFrom(handle, -26);
@@ -807,7 +816,7 @@ static void iGetRational(float fvalue, int *num, int *den)
*num = imRound(fvalue);
}
-int imFormatTGA::SaveExtensionArea()
+int imFileFormatTGA::SaveExtensionArea()
{
unsigned int dword_value;
unsigned short word_value;
@@ -971,7 +980,7 @@ int imFormatTGA::SaveExtensionArea()
return 1;
}
-void imFormatTGA::FixRGB()
+void imFileFormatTGA::FixRGB()
{
int x;
imbyte* byte_data = (imbyte*)this->line_buffer;
@@ -1010,7 +1019,7 @@ void imFormatTGA::FixRGB()
}
}
-int imFormatTGA::ReadImageData(void* data)
+int imFileFormatTGA::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading TGA...");
@@ -1044,7 +1053,7 @@ int imFormatTGA::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatTGA::WriteImageData(void* data)
+int imFileFormatTGA::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing TGA...");
diff --git a/src/im_format_tiff.cpp b/src/im_format_tiff.cpp
index 98467f9..1c55a55 100644
--- a/src/im_format_tiff.cpp
+++ b/src/im_format_tiff.cpp
@@ -3,7 +3,7 @@
*
* See Copyright Notice in im_lib.h
* See libTIFF Copyright Notice in tiff.h
- * $Id: im_format_tiff.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_tiff.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -590,7 +590,7 @@ static void iTIFFWriteAttributes(TIFF* tiff, imAttribTable* attrib_table)
iTIFFWriteCustomTags(tiff, attrib_table);
}
-class imFormatTIFF: public imFormat
+class imFileFormatTIFF: public imFileFormatBase
{
TIFF* tiff;
int invert, // must invert black and white reference
@@ -606,6 +606,22 @@ class imFormatTIFF: public imFormat
int ReadTileline(void* line_buffer, int row, int plane);
public:
+ imFileFormatTIFF(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatTIFF() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatTIFF: public imFormat
+{
+public:
imFormatTIFF()
:imFormat("TIFF",
"Tagged Image File Format",
@@ -616,14 +632,7 @@ public:
{}
~imFormatTIFF() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatTIFF(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -639,7 +648,7 @@ void imFormatRegisterTIFF(void)
imFormatRegister(new imFormatTIFF());
}
-int imFormatTIFF::Open(const char* file_name)
+int imFileFormatTIFF::Open(const char* file_name)
{
this->tiff = TIFFOpen(file_name, "r");
if (this->tiff == NULL)
@@ -659,7 +668,7 @@ int imFormatTIFF::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatTIFF::New(const char* file_name)
+int imFileFormatTIFF::New(const char* file_name)
{
this->tiff = TIFFOpen(file_name, "w");
if (this->tiff == NULL)
@@ -670,7 +679,7 @@ int imFormatTIFF::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatTIFF::Close()
+void imFileFormatTIFF::Close()
{
if (this->tile_buf)
{
@@ -682,7 +691,7 @@ void imFormatTIFF::Close()
TIFFClose(this->tiff);
}
-void* imFormatTIFF::Handle(int index)
+void* imFileFormatTIFF::Handle(int index)
{
if (index == 0)
return (void*)this->tiff->tif_fd;
@@ -692,7 +701,7 @@ void* imFormatTIFF::Handle(int index)
return NULL;
}
-int imFormatTIFF::ReadImageInfo(int index)
+int imFileFormatTIFF::ReadImageInfo(int index)
{
this->cpx_int = 0;
this->invert = 0;
@@ -1011,7 +1020,7 @@ int imFormatTIFF::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatTIFF::WriteImageInfo()
+int imFileFormatTIFF::WriteImageInfo()
{
this->file_color_mode = this->user_color_mode;
this->file_data_type = this->user_data_type;
@@ -1254,7 +1263,7 @@ static void iTIFFLabFix(void* line_buffer, int width, int data_type, int is_new)
// Do NOT know how it is encoded for other data types.
}
-int imFormatTIFF::ReadTileline(void* line_buffer, int row, int plane)
+int imFileFormatTIFF::ReadTileline(void* line_buffer, int row, int plane)
{
int t;
@@ -1295,7 +1304,7 @@ int imFormatTIFF::ReadTileline(void* line_buffer, int row, int plane)
return 1;
}
-int imFormatTIFF::ReadImageData(void* data)
+int imFileFormatTIFF::ReadImageData(void* data)
{
int count = imFileLineBufferCount(this);
@@ -1348,7 +1357,7 @@ int imFormatTIFF::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatTIFF::WriteImageData(void* data)
+int imFileFormatTIFF::WriteImageData(void* data)
{
int count = imFileLineBufferCount(this);
diff --git a/src/im_format_wmv.cpp b/src/im_format_wmv.cpp
index 3b411c3..a4733a5 100644
--- a/src/im_format_wmv.cpp
+++ b/src/im_format_wmv.cpp
@@ -2,7 +2,7 @@
* \brief WMV - Windows Media Video Format
*
* See Copyright Notice in im_lib.h
- * $Id: im_format_wmv.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_format_wmv.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
*/
#include "im_format.h"
@@ -494,7 +494,7 @@ static GUID iWMFCompFindSubType(const char* compression)
return WMMEDIASUBTYPE_Base;
}
-class imFormatWMV: public imFormat
+class imFileFormatWMV: public imFileFormatBase
{
IWMSyncReader* Reader; // When reading
WM_MEDIA_TYPE* MediaType;
@@ -526,6 +526,22 @@ class imFormatWMV: public imFormat
int SetProfile();
public:
+ imFileFormatWMV(const imFormat* _iformat): imFileFormatBase(_iformat) {}
+ ~imFileFormatWMV() {}
+
+ int Open(const char* file_name);
+ int New(const char* file_name);
+ void Close();
+ void* Handle(int index);
+ int ReadImageInfo(int index);
+ int ReadImageData(void* data);
+ int WriteImageInfo();
+ int WriteImageData(void* data);
+};
+
+class imFormatWMV: public imFormat
+{
+public:
imFormatWMV()
:imFormat("WMV",
"Windows Media Video Format",
@@ -536,14 +552,7 @@ public:
{}
~imFormatWMV() {}
- int Open(const char* file_name);
- int New(const char* file_name);
- void Close();
- void* Handle(int index);
- int ReadImageInfo(int index);
- int ReadImageData(void* data);
- int WriteImageInfo();
- int WriteImageData(void* data);
+ imFileFormatBase* Create(void) const { return new imFileFormatWMV(this); }
int CanWrite(const char* compression, int color_mode, int data_type) const;
};
@@ -552,7 +561,7 @@ void imFormatRegisterWMV(void)
imFormatRegister(new imFormatWMV());
}
-int imFormatWMV::Open(const char* file_name)
+int imFileFormatWMV::Open(const char* file_name)
{
/* initializes COM */
CoInitialize(NULL);
@@ -675,7 +684,7 @@ int imFormatWMV::Open(const char* file_name)
return IM_ERR_NONE;
}
-int imFormatWMV::New(const char* file_name)
+int imFileFormatWMV::New(const char* file_name)
{
/* initializes COM */
CoInitialize(NULL);
@@ -698,7 +707,7 @@ int imFormatWMV::New(const char* file_name)
return IM_ERR_NONE;
}
-void imFormatWMV::Close()
+void imFileFormatWMV::Close()
{
HeaderInfo->Release();
@@ -720,7 +729,7 @@ void imFormatWMV::Close()
CoUninitialize();
}
-void* imFormatWMV::Handle(int index)
+void* imFileFormatWMV::Handle(int index)
{
if (index == 1)
{
@@ -733,7 +742,7 @@ void* imFormatWMV::Handle(int index)
return NULL;
}
-void imFormatWMV::iReadAttrib(imAttribTable* attrib_table)
+void imFileFormatWMV::iReadAttrib(imAttribTable* attrib_table)
{
WORD StreamNumber = 0;
WORD attrib_list_count = 0;
@@ -916,12 +925,12 @@ static int iAttribSet(void* user_data, int index, const char* name, int data_typ
return 1;
}
-void imFormatWMV::iWriteAttrib(imAttribTable* attrib_table)
+void imFileFormatWMV::iWriteAttrib(imAttribTable* attrib_table)
{
attrib_table->ForEach((void*)HeaderInfo, iAttribSet);
}
-void imFormatWMV::CalcFPS()
+void imFileFormatWMV::CalcFPS()
{
LONGLONG AvgTimePerFrame = 0;
@@ -970,7 +979,7 @@ void imFormatWMV::CalcFPS()
}
}
-void imFormatWMV::SetOutputProps()
+void imFileFormatWMV::SetOutputProps()
{
DWORD output_number;
Reader->GetOutputNumberForStream(stream_number, &output_number);
@@ -1002,7 +1011,7 @@ void imFormatWMV::SetOutputProps()
}
}
-int imFormatWMV::SetInputProps()
+int imFileFormatWMV::SetInputProps()
{
DWORD input_count;
Writer->GetInputCount(&input_count);
@@ -1078,7 +1087,7 @@ int imFormatWMV::SetInputProps()
return 1;
}
-int imFormatWMV::SetProfile()
+int imFileFormatWMV::SetProfile()
{
HRESULT hr;
@@ -1144,7 +1153,7 @@ int imFormatWMV::SetProfile()
return 1;
}
-int imFormatWMV::ReadImageInfo(int index)
+int imFileFormatWMV::ReadImageInfo(int index)
{
if (this->seekable && this->current_frame != index)
{
@@ -1268,7 +1277,7 @@ int imFormatWMV::ReadImageInfo(int index)
return IM_ERR_NONE;
}
-int imFormatWMV::WriteImageInfo()
+int imFileFormatWMV::WriteImageInfo()
{
if (this->bmiHeader)
{
@@ -1357,7 +1366,7 @@ int imFormatWMV::WriteImageInfo()
return IM_ERR_NONE;
}
-void imFormatWMV::ReadPalette(unsigned char* bmp_colors)
+void imFileFormatWMV::ReadPalette(unsigned char* bmp_colors)
{
/* convert the color map to the IM format */
for (int c = 0; c < this->palette_count; c++)
@@ -1369,7 +1378,7 @@ void imFormatWMV::ReadPalette(unsigned char* bmp_colors)
}
}
-void imFormatWMV::WritePalette(unsigned char* bmp_colors)
+void imFileFormatWMV::WritePalette(unsigned char* bmp_colors)
{
/* convert the color map to the IM format */
for (int c = 0; c < this->palette_count; c++)
@@ -1380,7 +1389,7 @@ void imFormatWMV::WritePalette(unsigned char* bmp_colors)
}
}
-void imFormatWMV::InitMasks(imDib* dib)
+void imFileFormatWMV::InitMasks(imDib* dib)
{
if (dib->bmih->biCompression == BI_BITFIELDS)
{
@@ -1429,7 +1438,7 @@ void imFormatWMV::InitMasks(imDib* dib)
}
}
-void imFormatWMV::FixRGB(int bpp)
+void imFileFormatWMV::FixRGB(int bpp)
{
int x;
@@ -1486,7 +1495,7 @@ void imFormatWMV::FixRGB(int bpp)
}
}
-int imFormatWMV::ReadImageData(void* data)
+int imFileFormatWMV::ReadImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Reading WMV Frame...");
@@ -1552,7 +1561,7 @@ int imFormatWMV::ReadImageData(void* data)
return IM_ERR_NONE;
}
-int imFormatWMV::WriteImageData(void* data)
+int imFileFormatWMV::WriteImageData(void* data)
{
imCounterTotal(this->counter, this->height, "Writing WMV Frame...");
diff --git a/test/im_copy.cpp b/test/im_copy.cpp
index dd0b82e..6663a32 100644
--- a/test/im_copy.cpp
+++ b/test/im_copy.cpp
@@ -54,7 +54,7 @@ int main(int argc, char* argv[])
}
imFormatRegisterAVI();
- imFormatRegisterWMV();
+// imFormatRegisterWMV();
void* data = NULL;
imFile* ifile = NULL;
diff --git a/test/im_copy.vcproj b/test/im_copy.vcproj
index 051b110..c2e9102 100644
--- a/test/im_copy.vcproj
+++ b/test/im_copy.vcproj
@@ -1,111 +1,175 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="7.10"
+ Version="8.00"
Name="im_copy"
ProjectGUID="{909637FA-8229-45A9-9F42-53D8ED5F91C5}"
- Keyword="Win32Proj">
+ Keyword="Win32Proj"
+ >
<Platforms>
<Platform
- Name="Win32"/>
+ Name="Win32"
+ />
</Platforms>
+ <ToolFiles>
+ </ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
- CharacterSet="2">
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="../../include"
+ AdditionalIncludeDirectories="../include"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
+ MinimalRebuild="true"
BasicRuntimeChecks="3"
- RuntimeLibrary="4"
+ RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
<Tool
- Name="VCCustomBuildTool"/>
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="im.lib im_avi.lib im_wmv.lib vfw32.lib wmvcore.lib"
+ AdditionalDependencies="im.lib im_avi.lib vfw32.lib"
OutputFile="$(OutDir)/im_copy.exe"
LinkIncremental="2"
- AdditionalLibraryDirectories="C:\APP\LNG\WMFSDK9\lib;../../lib/vc7"
- GenerateDebugInformation="TRUE"
+ AdditionalLibraryDirectories="D:\LNG\WMFSDK9\lib;../lib"
+ GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/im_copy.pdb"
SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
+ TargetMachine="1"
+ />
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCALinkTool"
+ />
<Tool
- Name="VCPreLinkEventTool"/>
+ Name="VCManifestTool"
+ />
<Tool
- Name="VCResourceCompilerTool"/>
+ Name="VCXDCMakeTool"
+ />
<Tool
- Name="VCWebServiceProxyGeneratorTool"/>
+ Name="VCBscMakeTool"
+ />
<Tool
- Name="VCXMLDataGeneratorTool"/>
+ Name="VCFxCopTool"
+ />
<Tool
- Name="VCWebDeploymentTool"/>
+ Name="VCAppVerifierTool"
+ />
<Tool
- Name="VCManagedWrapperGeneratorTool"/>
+ Name="VCWebDeploymentTool"
+ />
<Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
- CharacterSet="2">
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="4"
+ RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
<Tool
- Name="VCCustomBuildTool"/>
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/im_copy.exe"
LinkIncremental="1"
- GenerateDebugInformation="TRUE"
+ GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
+ TargetMachine="1"
+ />
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCALinkTool"
+ />
<Tool
- Name="VCPreLinkEventTool"/>
+ Name="VCManifestTool"
+ />
<Tool
- Name="VCResourceCompilerTool"/>
+ Name="VCXDCMakeTool"
+ />
<Tool
- Name="VCWebServiceProxyGeneratorTool"/>
+ Name="VCBscMakeTool"
+ />
<Tool
- Name="VCXMLDataGeneratorTool"/>
+ Name="VCFxCopTool"
+ />
<Tool
- Name="VCWebDeploymentTool"/>
+ Name="VCAppVerifierTool"
+ />
<Tool
- Name="VCManagedWrapperGeneratorTool"/>
+ Name="VCWebDeploymentTool"
+ />
<Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
</Configurations>
<References>
@@ -114,9 +178,11 @@
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
<File
- RelativePath=".\im_copy.cpp">
+ RelativePath=".\im_copy.cpp"
+ >
</File>
</Filter>
</Files>