tag:blogger.com,1999:blog-17797155378078297082024-03-14T16:13:09.653-07:00NAF Delphi BlogUnknownnoreply@blogger.comBlogger40125tag:blogger.com,1999:blog-1779715537807829708.post-83057105968553718152024-03-14T14:57:00.000-07:002024-03-14T16:12:38.048-07:00Local Neural Networks to classify objects, detect text and increase resolution in your images with ImageEn v13.1.0 and IEVision 8.1.0<p><span style="font-family: arial;"><span style="font-size: small;">We have now released ImageEn v13.1.0, the latest update to our image editing and display library for Delphi/C++Builder, and IEVision Advanced Tools Add-on 8.1.0. These updates are free if you purchased or extended in the last 12 months. Download from: <a href="http://www.imageen.com/support/download/">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration at: <a href="http://www.imageen.com/order/#Extensions">http://www.imageen.com/order/#Extensions</a></span></span></p><p> </p><h2><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><h3 style="text-align: left;"><span style="color: #bf9000;"><span style="font-size: large;">Top Ten Enhancements in ImageEn v13.1.0</span></span></h3></span></span></h2><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"> </span></span></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">1. New TIEEditControls component: A pre-built set of controls for image editing and effects<br /><br /><img border="0" src="https://www.imageen.com/screenshots/History/IEEditingFunctions.png" /><br /><br /><br />2.
Many improvements to Proc Previews dialog (and effects chain) including
support for Transparency and Choma Key removal, and shape cropping<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/Previews/Previews_Transparency.png" /><br /><br /><br />3. Optimizations to speed and stability of ImageEn Debugging Visualizers, plus support for visualizing TBitmap<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/VisualizerMerged.jpg" /><br /><br /><br />4. Enhancements to PDFium Plug-in, including font embedding, and adding images, text, lines and shapes to PDF pages<br /><br />5. ImageEnView allows Rounded and Polygonal selections of any ImageEn shape, e.g. explosions, dinosaurs, stars, etc.<br /><br /><img border="0" src="https://www.imageen.com/screenshots/History/SelectExplosion.jpg" /><br /><br /><br />6. TImageEnProc.Crop supports shape cropping<br /><br />7. Auto-curving property for TIEShapeLayer and TIEPolylineLayer<br /><br /><img border="0" src="https://www.imageen.com/screenshots/History/AutoCurving.gif" /><br /><br /><br />8. ImageEn can now save legacy layer files (supported by older versions of ImageEn)<br /><br />9. Enhancements to ImageMagick support: including unicode filenames, multi-frame support and GIF optimization<br /><br />10. Warp Brush adds alpha channel support<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/warp.jpg" /><br /><br /><span style="font-size: xx-small;">Full Change History: <a href="https://www.imageen.com/info/HistoryFull.html" target="_blank">https://www.imageen.com/info/HistoryFull.html</a></span><br /><br /><br /></span></span></p><h3><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span style="color: #bf9000;"><span style="font-size: large;">Top Five Enhancements in IEVision 8.1.0</span></span></span></h3><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"> </span><p></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><a href="http://www.imageen.com/info/#IEVision">IEVision</a> is our advanced features add-on for ImageEn. V8.1.0 implements local neural net processing, and more:<br /><br />1. Support for local neural networks to classify objects, detect text and increase resolution<br /><br /><img border="0" src="https://www.imageen.com/screenshots/NeuralNet.webp" /><br /><br /><br />2. Searchable PDF documents can now be created without images<br /><br />3. New HAAR classifiers: Eye pair, Nose, Mouth, Stop Sign<br /><br />4. New method to check successful language loading for OCR<br /><br />5. Improved exception messages for OCR<br /><br /><span style="font-size: xx-small;">Full Change History: <a href="https://www.imageen.com/ievision/History.html" target="_blank">https://www.imageen.com/ievision/History.html</a></span><br /><br /><br />Nigel <br />Xequte Software<br /><a href="http://www.imageen.com" target="_blank">www.imageen.com</a></span></span> <br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-40507385630488226722023-11-15T12:38:00.000-08:002023-11-15T12:38:16.612-08:00Debugging Visualizers, PDF Object Editing, Improved Stitching and OCR, and much more in ImageEn 13.0.0<p> <span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">We
have now released ImageEn, v13.0.0, the latest update to our <b><a href="http://www.imageen.com">image editing and display library</a></b> for Delphi/BCB, and IEVision Advanced Tools
Add-on 8.0.0. These updates are free if you purchased a license or
extension after 15 November 2022:<br /><br /><a href="http://www.imageen.com/support/download/" target="_blank">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /><br /></span></span></p><h2><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><h3 style="text-align: left;">Top Ten Enhancements in ImageEn v13.0.0</h3></span></span></h2><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><br />1.
ImageEn now includes visualizers that allow you to preview bitmaps,
multi-bitmaps, layers, colors and control properties while debugging<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/VisualizerMerged.jpg" /><br /><br /><br />2.
Fifteen helper methods that with single call allow you to perform
advanced tasks with IEVision: Extract text with OCR, find content,
detect faces, people and other objects, deskew images, remove
backgrounds, stitch photos and documents and create searchable PDF files<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEHelp/Proc2/Faces2_IEVision_findIn.jpg" /><br /><br /><br />3.
Many improvements to PDF support to make it the most complete PDFium
implementation for Delphi. With v13, objects in PDF pages (images, text
or paths) can be parsed, edited and removed. PDF support is now
available from Delphi 7<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/PdfPageObjects.jpg" /><br /><br /><br />4. PDF pages can be imported as layers, so all objects become editable image, text or polyline layers<br /><br />5.
Enhanced TIERichEdit with new features to save the selected image,
insert links, get/set the RTF formatting of a selection and new actions<br /><br /><img border="0" src="https://www.imageen.com/screenshots/RichText.gif" /><br /><br /><br />6.
Many new layer features including MoveTo and Closing breaks for
TIEPolylineLayer to create more complex shapes, performance
optimizations and memory handling improvements with large images, full
rotation of formatted text layers, marking of grouped layers, and new
vector shapes: Balloon, Link and "Delphi" Gladiator<br /><br /><img border="0" src="https://www.imageen.com/screenshots/history/Shape_BalloonLinkGladiator.gif" /><br /><br /><br />7. AutoCrop now supports inner cropping to remove all border from rotated or stitched images<br /><br /><img border="0" src="https://www.imageen.com/screenshots/history/InnerCrop.jpg" /><br /><br /><br />8. SVG and WebP are now automatically supported on Delphi 12 if Skia is enabled<br /><br />9.
Four new demos: Find Objects in Image, Screen Capturing, Custom User
Interactions and PDF Object editing, plus thirty functions added to
"Every Editing Method" demo<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/EveryMethodSm.gif" /><br /><br /><br />10. Zip plug-in also supports ZipX, 7z and Rar<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/ZipContentSm.jpg" /><br /><br />+ Support for Delphi/BCB 12 Athens<br /><br /><span style="font-size: xx-small;">Full Change History: <a href="https://www.imageen.com/info/HistoryFull.html" target="_blank">https://www.imageen.com/info/HistoryFull.html</a></span><br /><br /><br /></span></span></p><h2><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><h3 style="text-align: left;">Top Five Enhancements in IEVision 8.0.0</h3></span></span></h2><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><br />IEVision is our advanced features add-on for ImageEn. V8.0.0 improves OCR, image and photo stitching, and more:<br /><br />1.
OCR now built on Tesseract 5 for greater performance using less system
memory, and improved accuracy, particularly with images of low
resolution or contrast<br />2. OCR results can be returned in hOCR, ALTO (XML) and text-seperated value formats<br />3. Other new OCR features including support for Black and White lists, analysis constructor and confidence values<br />4. Many enhancements to stitching including new thresholding options and improved performance with documents<br /><br /><img border="0" src="https://www.imageen.com/screenshots/Stitching.jpg" /><br /><br />5. Other fixes and improvements<br /><br /><span style="font-size: xx-small;">Full Change History: <a href="https://www.imageen.com/ievision/History.html" target="_blank">https://www.imageen.com/ievision/History.html</a></span></span></span></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="font-size: xx-small;"> </span></span></span></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">Xequte Software<br /><a href="http://www.imageen.com" target="_blank">www.imageen.com</a></span></span><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="font-size: xx-small;"> <br /></span></span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-89858190400251544082023-10-18T20:47:00.004-07:002023-10-20T11:32:24.082-07:00Improvements in the Delphi 12 Yukon Beta<p>Yesterday I downloaded and installed the Delphi 12 Beta. We're hoping to issue an update for <a href="https://www.ImageEn.com">our imaging display and editing library</a> in the days after the Delphi 12 release, so I wanted to be sure there were no issues.</p><p>The first change that I noticed was the new "Features" dialog:</p><p></p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhNYcetOB6kja2d4yq5Ne01lK8Xr1jUVsZiCM8OGroY2cKcqeez55p67Nhj0-Wmw6M6VYfFipeqdLRjeNNIeKo2oiFofdUovO9PH2n0LKEpp0FYt_mbkfZg_uN_qYYjPZ6Opu0n2GeA7MBnLWg9scbCFurRtRjqNR4BUyQ2ojnrObf7aj09GtME32KuqBM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="694" data-original-width="985" height="225" src="https://blogger.googleusercontent.com/img/a/AVvXsEhNYcetOB6kja2d4yq5Ne01lK8Xr1jUVsZiCM8OGroY2cKcqeez55p67Nhj0-Wmw6M6VYfFipeqdLRjeNNIeKo2oiFofdUovO9PH2n0LKEpp0FYt_mbkfZg_uN_qYYjPZ6Opu0n2GeA7MBnLWg9scbCFurRtRjqNR4BUyQ2ojnrObf7aj09GtME32KuqBM" width="320" /></a></div><br />Which now puts all installation information on the same screen. (This dialog is also available under Tools > Manage Features, so you can easily add functionality later).<br /><p></p><p>I intended to tell you how long it took to complete the installation, but by the time I got back from morning tea it was all done, so at best I can say it was faster than I recall some earlier Delphi versions taking.</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi3tDGK8lu4BQUz4n6CIPOKHiE1h_W-R2z7RAfqc3XiuwsIQH_YyvJK5l_nukDsnfPpTjlDY-MLIuXQC4zOMh_1_vgdtxP1dts2LwUaigCTclXmQerfNmrFRXLpKik_mrqMPPbXNDciRrnRvwxpz4OYnu6qPDouNYKXRkgStS98jKyTI2vQQ4K6z7-hDfQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="400" data-original-width="632" height="203" src="https://blogger.googleusercontent.com/img/a/AVvXsEi3tDGK8lu4BQUz4n6CIPOKHiE1h_W-R2z7RAfqc3XiuwsIQH_YyvJK5l_nukDsnfPpTjlDY-MLIuXQC4zOMh_1_vgdtxP1dts2LwUaigCTclXmQerfNmrFRXLpKik_mrqMPPbXNDciRrnRvwxpz4OYnu6qPDouNYKXRkgStS98jKyTI2vQQ4K6z7-hDfQ" width="320" /></a></div><br /><p></p><p>The most important <i>feature</i> for me in an IDE is stability, and in this, I have been happy with Delphi 11. It is certainly is one of the the most stable versions I have ever used (I started with Delphi 3). The beta documentation reports resolution of over 700 issues from <a href="https://quality.embarcadero.com">quality.embarcadero.com</a>, but in D11, I only ever encountered a few quirks around searching ("Search Whole Words" always mysteriously enabling, for example).</p><p>So those were the first things I tested and I'm glad to report that all those quirks appear to have been resolved, and search itself has been improved.</p><p>Here's the new "Find in Files" dialog:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjmp30uKRs5r6b_LouM13g3EYwpDdoOJdSwm4DNxU41WBtG4w2di-mXX1BkVmf0sDMEosywktyyFMkRl7K3a-Tq4jHADZK1_BJyqHUXihnzxEED4GVkEIk3FsKAbTkKQMPUwu8CHLltxPAkO_XWZwCsQZxQrzoKJf3Oh8jaZff4S5g7y0YvK2TnoQ-QTG4" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="393" data-original-width="789" height="159" src="https://blogger.googleusercontent.com/img/a/AVvXsEjmp30uKRs5r6b_LouM13g3EYwpDdoOJdSwm4DNxU41WBtG4w2di-mXX1BkVmf0sDMEosywktyyFMkRl7K3a-Tq4jHADZK1_BJyqHUXihnzxEED4GVkEIk3FsKAbTkKQMPUwu8CHLltxPAkO_XWZwCsQZxQrzoKJf3Oh8jaZff4S5g7y0YvK2TnoQ-QTG4" width="320" /></a></div><br />You'll notice the new mask to exclude named sub-directories, which is nice.<p></p><p><br /></p><p>Another new feature that I tried was instant code insight.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiqQHzKGDYZR3XY5Jg9l8_ELv7nF3tDERTDpEmbu4DMlfBBgCKzttc7InBwNlNbe0u1dBaKx3Y-j3kgHcNV2Hg9DjCA1TLXh4tWzAZ8FXZpCYNIfy59jAtzQ4wLmWeEFZ5r98--ch-pHV20Kyca6yWRQousXLVSnXuk-AQJhT378lDJhgxYpZvKfVOD8kI" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="572" data-original-width="771" height="237" src="https://blogger.googleusercontent.com/img/a/AVvXsEiqQHzKGDYZR3XY5Jg9l8_ELv7nF3tDERTDpEmbu4DMlfBBgCKzttc7InBwNlNbe0u1dBaKx3Y-j3kgHcNV2Hg9DjCA1TLXh4tWzAZ8FXZpCYNIfy59jAtzQ4wLmWeEFZ5r98--ch-pHV20Kyca6yWRQousXLVSnXuk-AQJhT378lDJhgxYpZvKfVOD8kI" width="320" /></a></div><p></p><p>So you might start typing "image" and it immediately suggests the form's ImageEnView1 control. Click "." to insert it, then the first few letters of the member that you want... This is much quicker than the old Ctrl+Space. <br /></p><p><br /></p><p>Most importantly, I wanted to test the compilation and running of our ImageEn library, and only encountered one minor change under 64bit that needed resolving (a one minute fix). Also, I noted that EXE size only increased by an insignificant 0.5%, which is pleasing.<br /></p><p><br /></p><p>That's all that I have for now. I won't be using it as my main IDE until the <a href="https://www.mmx-delphi.de">MMX Code Explorer</a> is updated, but I am excited for the new release.<br /></p><p><br /></p><p><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-NZ</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:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<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="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="376">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hashtag"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Unresolved Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Link"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
</style>
<![endif]--><b><i><span style="font-family: "Calibri",sans-serif; font-size: 11.0pt; mso-ansi-language: EN-NZ; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-NZ; mso-fareast-theme-font: minor-latin;">This blog post is
based on a pre-release version of the RAD Studio software and it has been
written with specific permission by Embarcadero. No feature is committed until
the product GA release.</span></i></b></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-31675282309850238522023-08-27T00:36:00.002-07:002023-08-27T00:36:34.515-07:00Warping, Zip support and PDF form field support in ImageEn 12.5.0<p> <span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">We
have now released ImageEn, v12.5.0, the latest update to our image
editing and display library for Delphi/BCB, and IEVision Advanced Tools
Add-on 7.1.0. These updates are free if you purchased a license or
extension after 26 August 2022:<br /><br /><a href="http://www.imageen.com/support/download/" target="_blank">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a></span></span></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"> <br /></span><span class="spnMessageText" id="msg">A trial of ImageEn is available at:<br /><br /><a href="http://www.imageen.com/download/">http://www.imageen.com/download/</a></span></span></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><br /></span></span></p><h3><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;">Top Ten Enhancements in ImageEn 12.5.0</span></h3><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><br />1. New Retouch Tool to warp the image by pushing with the cursor<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/warp.jpg" /><br /><br />2. New Selection Tool to warp images using a Thin Plate Spline Shape Transformation (Requires <a href="https://www.imageen.com/IEVision/" target="_blank">IEVision</a>)<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/ShapeTransform.jpg" /><br /><br />3.
Loading of images and extraction of files from Zip files, including
support for AES encryption, dynamic thumbnails and zip folders<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/ZipContentSm.jpg" /><br /><br />4. Programmatically read and set the form fields of PDF files<br /><br /><img border="0" src="https://www.imageen.com/screenshots/PDF_FormEditing.gif" /><br /><br />5. Line and Polyline layers support pen styles like dashes and dots (including via the Layer Properties dialog)<br /><br /><img border="0" src="https://www.imageen.com/screenshots/history/penstylessm.gif" /><br /><br />6. Automatically prompts for password when opening encrypted PDF and ZIP files (or optionally via an event)<br /><br />7.
Other PDF improvements including document navigating by clicking page
links, and validation of the alpha channel when saving to create smaller
files<br /><br />8. Various improvements to internal dialogs, including tab
navigation using the mouse wheel, and layout and localization
enhancements<br /><br />9. Dune AAI and OpenRaster ORA formats supported by ImageMagick plug-in<br /><br />10. TImageEnMView/TImageEnIO support AutoSetBitDepth to optimize bit depth and other properties when saving<br /><br /><span style="font-size: xx-small;">Full Change History: <a href="https://www.imageen.com/info/HistoryFull.html" target="_blank">https://www.imageen.com/info/HistoryFull.html</a></span><br /><br /><br /><h3>IEVision 7.1.0</h3><br />IEVision
is our advanced features add-on for ImageEn. V7.1.0 implements Thin
Plate Spline shape transformations and other improvements.<br /><br /><span style="font-size: xx-small;">Full Change History: <a href="https://www.imageen.com/ievision/History.html" target="_blank">https://www.imageen.com/ievision/History.html</a></span></span><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-36337483085412229682023-03-07T19:03:00.000-08:002023-03-07T19:03:15.470-08:00Enhanced Transitions, Filtering and searching for multiple matches within an Image in ImageEn v12.0.0 and IEVision v7.0.0<span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">We
have now released ImageEn, v12.0.0, the latest update to our image
editing and display library for Delphi/BCB, and IEVision Advanced Tools
Add-on 7.0.0. These updates are free if you purchased a license or
extension after 6 March 2022:<br /><br /><a href="http://www.imageen.com/support/download/" target="_blank">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /><br /><h3>Top Fifteen Enhancements in ImageEn 12.0.0</h3><br />1. Many improvements to <b>transition effects</b>,
including new zig-zag wipes, custom transitions in TImageEnMView, and a
single property to apply transition effect when loading images in
TImageEnView<br /><br /><img border="0" src="https://www.imageen.com/screenshots/CubeTransition.jpg" /><br /><br />2. <b>Filtering</b> in TImageEnMView by all text fields, file size, image dimensions and dates<br /><br />3. <b>Enhanced TIEColorPalette</b> with default colors, hue palette, bitmap exporting, and auto selection of closest color<br /><br /><img border="0" src="https://www.imageen.com/screenshots/ColorPalette.png" /><br /><br />4. <b>Advanced TIECanvas drawing methods</b> for stylized text, shapes, polygons, angles and lines<br /><br /><img border="0" src="https://www.imageen.com/screenshots/InnerGlow2.jpg" /><br /><br />5. Full <b>VCL theming support</b> for TIEColorCurve, TIEColorPalette, THistogramBox and TImageEnProc.DoPreviews()<br /><br />6. <b>Improved text editing</b> of TIETextLayers including auto-sizing of editor and support for hard returns<br /><br />7. TImageEnProc.GetDominantColor() can return a <b>list of most used colors</b><br /><br />8. "<b>Large thumbnail style</b>" for TImageEnMView<br /><br />9. <b>Improved TIEMetaListView</b> with design-time preview and new properties and methods for group headers<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEMetaListView.gif" /><br /><br />10. Many <b>improvements to documentation</b>,
including more methods in the ImageEnProc Preview section and more
detail in the TImageEnVect to TIELayer Transition Info and Updating and
Compatibility sections<br /><br />11. <b>Updated LibRaw</b> to v0.21.1 to support newer Canon, Nikon, Sony and other camera formats<br /><br />12. New method to <b>join bitmaps </b>with any overlapping content automatically removed<br /><br />13. TImageEnProc.CompareWith() supports <b>comparing of image rectangles</b>, and includes a new <br />coverage parameter to improve performance with large images<br /><br />14. More <b>built-in vector shapes</b>, such as Flag, Dinosaur and Palm Tree<br /><br /><img border="0" src="https://www.imageen.com/screenshots/history/Shape_PineTree.gif" /> <img border="0" src="https://www.imageen.com/screenshots/history/Shape_Dinosaur.gif" /> <img border="0" src="https://www.imageen.com/screenshots/history/Shape_PineTree.gif" /> <img border="0" src="https://www.imageen.com/screenshots/history/Shape_Flag.gif" /><br /><br />15. <b>Fifty new methods</b> in Every Editing Method demo, such as: CalcImagePalette, TextOut(), StretchValues, IEVision.inpaint(), etc.<br /><br /><br />Full Change History: <a href="https://www.imageen.com/info/HistoryFull.html" target="_blank">https://www.imageen.com/info/HistoryFull.html</a><br /><br /><br /><h3>IEVision 7.0.0</h3>IEVision
is our advanced features add-on for ImageEn. V7.0.0 implements the
latest OpenCV, adds support for multiple image matching and more.<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/MatchMulti.jpg" /><br /><br />Full Change History: <a href="https://www.imageen.com/ievision/History.html" target="_blank">https://www.imageen.com/ievision/History.html</a><br /></span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-5222300215005185232022-12-18T21:20:00.005-08:002022-12-20T18:03:54.657-08:00Playing with AI Delphi code generation<p>Inspired by <a href="https://castle-engine.io/wp/2022/12/17/my-mind-is-blown-i-can-use-ai-to-generate-castle-game-engine-code-to-integrate-it-with-physx-i-can-use-ai-to-generate-html-documentation-from-comments-in-pascal-code/">Michalis</a>, I have been playing with the Open AI chat bot today:</p><p><a href="https://chat.openai.com/chat">https://chat.openai.com</a></p><p> </p><p>It's early days, I suppose, but my results were decidedly mixed:</p><p> </p><p><b>Query 1: <span style="color: #38761d;">How can I display thumbnails of images using Delphi?</span></b></p><p><b><span style="color: #38761d;"> </span></b></p><p><b>Result:</b></p><p><span style="color: #38761d;">To display thumbnails of images using Delphi, you can use the <code>TImageEnMView</code> component from the ImageEn library. This component is designed specifically for displaying and managing a collection of images, including the ability to display thumbnails of the images.</span></p><p><span style="color: #38761d;">Here is an example of Delphi code that demonstrates how to use the <code>TImageEnMView</code> component to display thumbnails of images:</span></p><pre><div class="bg-black mb-4 rounded-md"><div class="p-4"><span style="color: #38761d;"><code class="!whitespace-pre-wrap hljs language-css">uses
ImageEnMView, Graphics;
<span class="hljs-selector-tag">var</span>
ImageEnMView: TImageEnMView;
Bitmap: TBitmap;
<span class="hljs-selector-tag">i</span>: Integer;
begin
ImageEnMView := TImageEnMView.<span class="hljs-built_in">Create</span>(self);
try
// Set the thumbnail size
ImageEnMView<span class="hljs-selector-class">.ThumbWidth</span> := <span class="hljs-number">128</span>;
ImageEnMView<span class="hljs-selector-class">.ThumbHeight</span> := <span class="hljs-number">128</span>;
// Add the images <span class="hljs-selector-tag">to</span> the TImageEnMView
for <span class="hljs-selector-tag">i</span> := <span class="hljs-number">0</span> to ImageCount - <span class="hljs-number">1</span> do
begin
Bitmap := TBitmap.Create;
try
// Load the image <span class="hljs-selector-tag">from</span> <span class="hljs-selector-tag">a</span> file or stream
Bitmap<span class="hljs-selector-class">.LoadFromFile</span>(ImageFilename<span class="hljs-selector-attr">[i]</span>);
// Add the image <span class="hljs-selector-tag">to</span> the TImageEnMView
ImageEnMView<span class="hljs-selector-class">.IO</span><span class="hljs-selector-class">.AddGraphic</span>(Bitmap);
finally
Bitmap<span class="hljs-selector-class">.Free</span>;
end;
end;
// <span class="hljs-attribute">Display</span> the TImageEnMView on the <span class="hljs-selector-tag">form</span>
ImageEnMView<span class="hljs-selector-class">.Parent</span> := Self;
ImageEnMView<span class="hljs-selector-class">.Align</span> := alClient;
finally
ImageEnMView<span class="hljs-selector-class">.Free</span>;
end;
end;
</code></span></div></div></pre><p><span style="color: #38761d;">This code creates a new <code>TImageEnMView</code> component and sets the <code>ThumbWidth</code> and <code>ThumbHeight</code> properties to specify the size of the thumbnails. It then loads the images from a file or stream and adds them to the <code>TImageEnMView</code> using the <code>AddGraphic</code> method. Finally, it displays the <code>TImageEnMView</code> on the form by assigning it to the <code>Parent</code> property and setting the <code>Align</code> property to <code>alClient</code>.</span></p><p><span style="color: #38761d;">You can customize the appearance of the thumbnails by setting various properties of the <code>TImageEnMView</code> component, such as the background color, border style, and spacing between the thumbnails. You can also handle events of the <code>TImageEnMView</code> component, such as <code>OnThumbClick</code>, to perform actions when the user clicks on a thumbnail.</span></p><p><b> </b></p><p><b>Analysis: <br /></b></p><p>So it's not a bad result for an engine. It points the user to a valid component for it (our <a href="http://www.imageen.com/help/TImageEnMView.html">TImageEnMView</a> *Blush*), and some of the code is correct, but is certainly won't work. Firstly, if you use a TBitmap you'd be limited to the formats that it supports, and more importantly TImageEnMView does not have an IO property or AddGraphic method.</p><p> The correct code would be:</p><p><span style="color: #666666;">uses<br /> IEMView, Graphics;<br /><br />var<br /> ImageEnMView: TImageEnMView;<br /> Bitmap: TBitmap;<br /> i: Integer;<br />begin<br /> ImageEnMView := TImageEnMView.Create(self);<br /> try<br /> // Set the thumbnail size<br /> ImageEnMView.ThumbWidth := 128;<br /> ImageEnMView.ThumbHeight := 128;<br /><br /> // Add the images to the TImageEnMView<br /> for i := 0 to ImageCount - 1 do<br /> ImageEnMView.AppendImage(ImageFilename[i]);<br /><br /> // Display the TImageEnMView on the form<br /> ImageEnMView.Parent := Self;<br /> ImageEnMView.Align := alClient;<br /> finally<br /> ImageEnMView.Free;<br /> end;<br />end;</span></p><p><span style="color: #666666;"> </span></p><p><span style="color: #666666;"><span style="color: black;"><b> Query 2: </b></span></span><span style="color: #38761d;"><b>How can I display a PSD image with Delphi?</b></span></p><p><span style="color: #666666;"><span style="color: black;"><b><span style="color: #38761d;"> </span></b></span><br /></span></p><p><b> Result</b></p><div class="flex flex-col gap-3"><div class="min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap"><div class="markdown prose break-words dark:prose-invert light"><p><span style="color: #38761d;">To display a PSD (Photoshop Document) file with Delphi, you can use the <code>TImage</code> component from the VCL (Visual Component Library) or the <code>TImageEnView</code> component from the ImageEn library. Both of these components include support for displaying a wide variety of image formats, including PSD.</span></p><p><span style="color: #38761d;">Here is an example of Delphi code that demonstrates how to use the <code>TImage</code> component to display a PSD file:</span></p><pre><div class="bg-black mb-4 rounded-md"><div class="p-4"><span style="color: #38761d;"><code class="!whitespace-pre-wrap hljs language-go">uses
Graphics;
<span class="hljs-keyword">var</span>
Bitmap: TBitmap;
FileName: <span class="hljs-type">string</span>;
begin
FileName := <span class="hljs-string">'C:\path\to\image.psd'</span>;
Bitmap := TBitmap.Create;
try
<span class="hljs-comment">// Load the PSD image from a file</span>
Bitmap.LoadFromFile(FileName);
<span class="hljs-comment">// Display the image on the TImage component</span>
Image.Picture.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;
</code></span></div></div></pre><p><span style="color: #38761d;">This code creates a new <code>TBitmap</code> object and uses the <code>LoadFromFile</code> method to load the PSD image from a file. It then assigns the <code>TBitmap</code> object to the <code>Picture</code> property of the <code>TImage</code> component to display the image.</span></p><p><span style="color: #38761d;">Alternatively, you can use the <code>TImageEnView</code> component from the ImageEn library to display the PSD image. The <code>TImageEnView</code> component provides additional features and capabilities for displaying and manipulating images, such as support for zooming and panning. Here is an example of Delphi code that demonstrates how to use the <code>TImageEnView</code> component to display a PSD file:</span></p><pre><div class="bg-black mb-4 rounded-md"><div class="p-4"><span style="color: #38761d;"><code class="!whitespace-pre-wrap hljs language-css">uses
ImageEnView;
<span class="hljs-selector-tag">var</span>
ImageEnView: TImageEnView;
FileName: string;
begin
FileName := <span class="hljs-string">'C:\path\to\image.psd'</span>;
ImageEnView := TImageEnView.<span class="hljs-built_in">Create</span>(self);
try
// Load the PSD image <span class="hljs-selector-tag">from</span> <span class="hljs-selector-tag">a</span> file
ImageEnView<span class="hljs-selector-class">.IO</span><span class="hljs-selector-class">.LoadFromFile</span>(FileName);
// <span class="hljs-attribute">Display</span> the image on the TImageEnView component
ImageEnView<span class="hljs-selector-class">.Parent</span> := Self;
ImageEnView<span class="hljs-selector-class">.Align</span> := alClient;
finally
ImageEnView<span class="hljs-selector-class">.Free</span>;
end;
end;
</code></span></div></div></pre><p><span style="color: #38761d;">This code creates a new <code>TImageEnView</code> object and uses the <code>LoadFromFile</code> method of the <code>IO</code> property to load the PSD image from a file. It then displays the <code>TImageEnView</code> component on the form by assigning it to the <code>Parent</code> property and setting the <code>Align</code> property to <code>alClient</code>.</span></p></div></div></div><p><b> </b><b> </b></p><p><b>Analysis:</b></p><p>I don't believe it is possible to load PSD files with TImage, so I guess that part is all wrong. The ImageEn code on the other hand, is spot on (though it would obviously easier just to a TImageEnView component to your form at design time).</p><p><b><br /></b></p><p><b>Query 3: <span style="color: #38761d;">Suggest a Delphi component that allows user to select an area of the image</span><br /></b></p><p><b><br /></b></p><p><b>Result (Second attempt):</b></p><p><span style="color: #38761d;">One Delphi component that you can use to allow users to select a region of an image is the TImageEnView component from the ImageEn library.</span></p><p><span style="color: #38761d;">The TImageEnView component is a single-image view that displays an image and allows users to select a region of the image using various selection modes. You can use it to allow the user to select a region of an image using the mouse or other input device.</span></p><p><span style="color: #38761d;">Here is an example of how you can use the TImageEnView component to allow users to select a region of an image in Delphi:</span></p><pre><div class="bg-black mb-4 rounded-md"><div class="p-4"><span style="color: #38761d;"><code class="!whitespace-pre-wrap hljs language-go">uses
ImageEn;
<span class="hljs-keyword">var</span>
ImageEnView: TImageEnView;
Selection: TRect;
begin
ImageEnView := TImageEnView.Create(Self);
ImageEnView.Parent := Self;
ImageEnView.Align := alClient;
ImageEnView.SelectionMode := smRectangle;
ImageEnView.ShowSelectionRect := True;
<span class="hljs-comment">// Load an image into the TImageEnView component</span>
ImageEnView.IO.LoadFromFile(<span class="hljs-string">'image.jpg'</span>);
<span class="hljs-comment">// Wait for the user to select a region of the image</span>
while ImageEnView.SelectionCount = <span class="hljs-number">0</span> do
begin
Application.ProcessMessages;
Sleep(<span class="hljs-number">10</span>);
end;
<span class="hljs-comment">// Get the selected region of the image</span>
Selection := ImageEnView.SelectionRect[<span class="hljs-number">0</span>];
end;
</code></span></div></div></pre><p><span style="color: #38761d;">This code creates a new instance of the TImageEnView component, sets the <code>SelectionMode</code> property to allow the user to select a region of the image using the mouse, and loads an image into the component. It then waits for the user to select a region of the image and retrieves the selected region using the <code>SelectionRect</code> property.</span></p><p><span style="color: #38761d;">I hope this helps! Let me know if you have any questions.</span></p><p> </p><p><b>Analysis</b></p><p>So the first result offered a TImageEnMView (our control that displays a grid of images) when really a TImageEnView is needed (displays a single image that supports selection).</p><p>So I clicked the "Regenerate Response" button and the second option was for TImageEnView. OK, good, but the code is pretty iffy. There are a few properties that are invalid, and it's almost a console type solution anyway (blocking the code while waiting for a selection).<br /></p><p>Working code would be (persisting with the same blocking approach):</p><pre><span style="color: #666666;"><span style="font-size: small;"><span style="font-family: courier;"><code class="!whitespace-pre-wrap hljs language-go">uses
ImageEn;</code></span></span></span></pre><p><span style="color: #666666;"><span style="font-size: small;"><span style="font-family: courier;">var<br /> ImageEnView: TImageEnView;<br /> Selection: TRect;<br />begin<br /> ImageEnView := TImageEnView.Create(Self);<br /> ImageEnView.Parent := Self;<br /> ImageEnView.Align := alClient;<br /> ImageEnView.MouseInteractGeneral := [miSelect];<br /><br /> // Load an image into the TImageEnView component<br /> ImageEnView.IO.LoadFromFile('D:\im.jpg');<br /><br /> // Wait for the user to select a region of the image<br /> // NOTE: Normally you would just use the OnSelectionChange event,<br /> // not a forever loop<br /> while ( ImageEnView.Selected = False ) or IEIsLeftMouseButtonPressed() do<br /> begin<br /> Application.ProcessMessages;<br /> Sleep(10);<br /> end;<br /><br /> // Get the selected region of the image<br /> ShowMessage( IERectangleToStr( ImageEnView.SelectedRect ));<br />end; </span></span></span></p><p><span style="font-size: small;"><span style="font-family: courier;"><br /></span></span></p><span style="font-size: small;"><span style="font-family: courier;"></span></span><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-15136045531428935222022-09-29T21:10:00.000-07:002022-09-29T21:10:00.490-07:00Using the Google Vision API to analyze images in Delphi<p>With ImageEn 11.4.0 you can now use the <a href="https://cloud.google.com/vision/docs/features-list">Google Vision API</a> to recognize objects, text, handwriting, faces, famous landmarks and logos in images.</p><p> </p><h3 style="text-align: left;">Google Vision API Features</h3><h4 style="text-align: left;"><span class="h5">Object localization</span></h4><p style="text-align: left;">Detect objects in an image, and returns their label and bounding box</p><p style="text-align: left;"><img src="https://www.imageen.com/help/GoogleApi_Objects.jpg" /> </p><h4 style="text-align: left;"><span class="h5">Face detection</span></h4><p style="text-align: left;">Locate
faces with bounding polygons, and identifies specific facial "landmarks"
such as eyes, ears, nose, mouth, etc. along with their corresponding
confidence values.<br />Also, returns likelihood ratings for emotion (joy,
sorrow, anger, surprise) and general image properties (underexposed,
blurred, headwear present).<br /><br /><img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_Faces.jpg" /><br /><br /><br /></p><h4 style="text-align: left;"><span class="h5">Landmark detection</span></h4><p style="text-align: left;">Detect
popular natural and human-made structures within an image, returning
the name, GPS coordinates and bounding box for the landmark.<br /><br /><br /> <img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_Landmark.jpg" /><br /><br /> <img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_Map.png" /><br /><br /><br /></p><h4 style="text-align: left;"><span class="h5">Logo detection</span></h4><p style="text-align: left;">Recognize popular product logos within an image, returning their name and bounding box.<br /><br /> <img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_Logos.jpg" /><br /><br /><br /></p><h4 style="text-align: left;"><span class="h5">Text detection</span></h4><p style="text-align: left;">Recognize text and handwriting within an image (OCR), returning the text and location.<br />Returns text in all Google-supported languages.<br /><br /> <img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_Text.jpg" /><br /><br /> <img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_Handwriting.jpg" /><br /><br /><br /></p><h4 style="text-align: left;"><span class="h5">Web Entities and Pages</span></h4><p style="text-align: left;">Detect references and related web information for an image, including:<br />- Best guess label: A best guess as to the topic of the requested image inferred from similar images on the Internet<br />- Inferred entities (labels/descriptions) from similar images on the Web<br />- Full matching images: A list of URLs for fully matching images of any size on the Internet<br />-
Partial matching images: A list of URLs for images that share key-point
features, such as a cropped version of the original image<br />- Pages with matching images: A list of Webpages with an image that matches one of the above rules<br />- Visually similar images: A list of URLs for images that share some features with the original image<br /><br /> <img src="http://www.imageen.com/screenshots/iehelp/GoogleApi_WebEntities.png" /><br /><br /><br /></p><h4 style="text-align: left;"><span class="h5">SafeSearch: Explicit content detection</span></h4><p style="text-align: left;">Detects explicit content such as adult content or violent content within an image.<br />Provides likelihood ratings for the following explicit content categories: adult, spoof, medical, violence, and racy.<br /></p><p style="text-align: left;"> </p><p style="text-align: left;"><b>For more information on ImageEn, visit:</b></p><p style="text-align: left;"><b><a href="http://www.ImageEn.com">www.ImageEn.com</a></b><br /></p><p style="text-align: left;"> <br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-39237278633442951372022-08-29T21:18:00.001-07:002022-08-29T21:18:23.848-07:00ImageEn Imaging Library v11.3.0 and IEVision Advanced Tools Add-on v6.0.4 Released<p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">We
have now released ImageEn, v11.3.0, the latest update to our image
editing and display library for Delphi/BCB. There is also an update to
IEVision. These updates are free if you purchased a license or extension
after 25 August 2021:<br /><br /><a href="http://www.imageen.com/support/download/" target="_blank">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /></span></span></p><h2><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"></span></span></h2><h2 style="text-align: left;"><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><h3><span style="color: #bf9000;">Top Fifteen Enhancements in ImageEn 11.3.0</span></h3></span></span></h2><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">1.
<b>Support for "Effects Chains"</b>: A list of effects, editing and color
operations to apply to an image (allowing effects to be seen on the
image before modifying it, for example)<br /><br /><img border="0" src="https://www.imageen.com/screenshots/EffectsChain.png" /><br /><br /><br />2.
Effects specified in TImageEnProc.DoPreviews() (and effects chains) can
be <b>applied to other images</b> (e.g. for batch operations)<br /><br />3. <b>Many
new effects available to your user</b> in TImageEnProc.DoPreviews():
AdjustGainOffset(), AutoSharp(), UnsharpMask(),
fastNlMeansDenoisingColored(), smooth(), ConvertToGray(),
ConvertToSepia(), Colorize(), Negative(), WhiteBalance_GrayWorld(),
Reflection(), PencilSketch(), WallisFilter() and
WhiteBalance_AutoWhite()<br /><br /><img border="0" src="https://www.imageen.com/screenshots/AdjustColors.gif" /><br /><br /><br />4. <b>Many improvements to localization</b> in Proc.DoPreviews(), IO.DoPreviews(), Brush Properties and Layer Properties dialogs<br /><br />5. TImageEnIO can load now images <b>directly from attached devices</b><br /><br />6. <b>Advanced text drawing method</b> for TImageEnProc with support for gradient, bordered and partially transparent text<br /><br /><img border="0" src="https://www.imageen.com/screenshots/TextStyle4.jpg" /> <img border="0" src="https://www.imageen.com/screenshots/TextStyle5.jpg" /><br /><img border="0" src="https://www.imageen.com/screenshots/TextStyle6.jpg" /> <img border="0" src="https://www.imageen.com/screenshots/TextStyle7.jpg" /><br /><br />7. PdfViewer can output pages as <b>formatted text</b><br /><br />8. New <b>double-click to zoom interaction</b> for TImageEnView<br /><br />9. TImageEnView.FitMode allows<b> fit to width, height, or both</b>, with associated fit actions for the PDFViewer<br /><br />10. Other<b> improvements to actions</b>, including smoothing, inpainting and alternative Auto-Enhancement option<br /><br />11. Over 500 images added to documentation to show preview of <b>all available image editing and effect methods</b><br /><br />12. Methods to show a <b>preview window for an image</b> (with zoom and popup menu support)<br /><br />13. TIECanvas helper methods to make it simpler to <b>draw a list of rects or lines</b> (e.g. from IEVision)<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEHelp/Proc2/lines1_IEVision_detectLines_BinaryDescriptor.jpg" /><br /><br /><br />14. New properties to allow specifying the compression quality and other custom defines for <b>ImageMagick</b><br /><br />15. New demo previewing the <b>effect of every ImageEnProc method</b><br /><br /><br /><span style="font-size: x-small;">Full Change History: <a href="https://www.imageen.com/info/HistoryFull.html" target="_blank">https://www.imageen.com/info/HistoryFull.html</a></span></span></span></p><p><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"> </span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-7243507004545036542022-05-23T00:07:00.004-07:002022-05-23T00:07:48.175-07:00 ImageEn, Image Editing and Display Library, v11.0.0 Released<p><span style="font-size: small;"> <span style="color: black; font-family: Lato, Arial, Helvetica;"><span class="spnMessageText" id="msg">We
have now released ImageEn, v11.0.0, the latest update to our image
editing and display library for Delphi/BCB. These updates are free if
you purchased a license or extension after 22 May 2021:<br /><br /><a href="http://www.imageen.com/support/download/" target="_blank">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /><br /></span></span></span></p><h2><span style="font-size: small;"><span style="color: black; font-family: Lato, Arial, Helvetica;"><span class="spnMessageText" id="msg"><h3 style="text-align: left;">Top Ten Enhancements in ImageEn 11.0.0</h3></span></span></span></h2><p><span style="font-size: small;"><span style="color: black; font-family: Lato, Arial, Helvetica;"><span class="spnMessageText" id="msg"><br />1. New component to display and edit DICOM tags, EXIF and IPTC data, as well as viewing XMP, PDF and File information<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEMetaListView.gif" /><br /><br />2. Significant improvements to DICOM tag editing, including unicode support and tag injection for multi-frame files<br /><br />3. New component to configure ImageEn global settings at design-time<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEGlobalSettings.gif" /><br /><br />4.
Wider format support including reading and writing of JPEG XL and WebP
format and reading of HEIF, AVIF, TTF, OTF and PICT files (via plug-in)<br /><br />5. Updated to PDFium v5065 for improved PDF display, including unicode password support<br /><br />6.
Many meta-data enhancements, including output of image and PDF
properties to TStringGrid, TListView or TStringList, and exporting to
JSON and text<br /><br />7. Alternative background can be specified for the
non-image area of TImageEnView, as well as the direction of gradient
backgrounds<br /><br /><img border="0" src="https://www.imageen.com/screenshots/iehelp/BackgroundOuter.jpg" /><br /><br />8. ImageEnView now supports file dropping for quick display<br /><br />9. TIEFolderTree can display attached phones and other devices<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEFolderTree2.png" /><br /><br />10. ImageEn windows remember their position<br /><br /><br />We have also included the latest BCB 5/6 versions in this release.<br /><br /><span style="font-size: x-small;">Full Change History: <a href="https://www.imageen.com/info/HistoryFull.html" target="_blank">https://www.imageen.com/info/HistoryFull.html</a></span><br /></span></span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-31218003260803916922021-12-19T14:50:00.001-08:002021-12-19T14:50:46.462-08:00Virtual multi-bitmaps, enhanced Image Processing Dialog, PDF bookmarks, and more in ImageEn v10.3.0<p><span style="font-family: helvetica;">We
have now released updates to ImageEn, our image editing and display
library for Delphi/BCB, and IEVision, our advanced imaging features
add-on. These updates are free if you purchased a license or extension
after 17 December 2020:<br /><br /><a href="http://www.imageen.com/support/download/">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions">http://www.imageen.com/order/</a><br /><br /><br />More info and a free trial of ImageEn are available at:<br /><br /><a href="http://www.imageen.com">http://www.imageen.com</a></span></p><p><span style="font-family: helvetica;"> </span></p><h3 style="text-align: left;"><span style="font-family: helvetica;"><span style="color: #e69138;">Top Ten Enhancements in ImageEn 10.3.0 </span></span></h3><p style="text-align: left;"><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">1. Now supports virtual multi-bitmaps allowing large multi-frame files to be rapidly generate in memory<br /><br />2.
Improved "Image Processing" dialog with better layout and new
functions: Rotate and Crop, Pixelize and "Symmetric Nearest Neighbour"
smoothing<br /><br /><img border="0" src="https://www.imageen.com/screenshots/ImageProcess_Pixelize.gif" /><br /></span></span></p><p style="text-align: left;"><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><br />3. Reads PDF bookmarks for document navigation in the PDF viewer<br /><br /><img border="0" src="https://www.imageen.com/screenshots/PdfBookmarks.gif" /><br /></span></span></p><p style="text-align: left;"><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><br />4. Layer snapping: Easier to position and align layers by snapping to a virtual grid<br /><br />5. New resampling/zoom filter, which is both fast and hiqh quality: "WIC High Quality Bicubic"<br /><br />6.
Many PDF enhancments including exporting of pages to file, improved
styling of selections in PDF documents with auto-merging, property to
determine whether document contains a form, etc.<br /><br />7. Much improved TIEFolderTree with keyboard shortcuts and better dragging and dropping<br /><br /><img border="0" src="https://www.imageen.com/screenshots/IEFolderTree.gif" /><br /></span></span></p><p style="text-align: left;"><span style="color: black; font-family: Lato, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><br />8.
New ImageEnProc functions, including flood filling of an alpha area
with color and inverting (Negative) of individual color channels<br /><br />9. Improved accuracy of angles with TIEAngleLayer<br /><br /><img border="0" src="https://www.imageen.com/screenshots/AngleLayer.gif" /><br /><br />10. Automatic smoothing of the edges of anti-aliased layers</span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-23774220015504939262021-09-26T14:40:00.000-07:002021-09-26T14:40:06.754-07:00New PDF editing toolbar, high quality PDF printing and support for eight extra languages in ImageEn 10.2.0 <p><span style="font-family: helvetica;">ImageEn, image editing and display library for Delphi/BCB, </span><span style="font-family: helvetica;">v10.2.0 is now generally available.This update is free if you purchased a license or extension after 15 September 2020:<br /><br /><a href="http://www.imageen.com/support/download/">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions">http://www.imageen.com/order/</a><br /><br /><br />More info and a free trial of ImageEn are available at:<br /><br /><a href="http://www.imageen.com">http://www.imageen.com</a></span></p><p><span style="font-family: helvetica;"> </span></p><h3 style="text-align: left;"><span style="font-family: helvetica;"><span style="color: #e69138;">Top Ten Enhancements in ImageEn 10.2.0 </span></span></h3><div style="text-align: left;"><ol class="goldul"><li><span> <span style="font-family: arial;">ImageEn now uses a DLL for localization support. If you
do not need localization it reduces your the EXE size by 780KB. If you
use localization it adds support for eight more languages: Czech,
Danish, Finnish, Hungarian, Norwegian, Polish, Swedish, Slovenian <br /><br /></span></span></li><p>
<span style="font-family: arial;"><img class="HistoryScreenshot" src="https://www.imageen.com/screenshots/LanguageSelect.gif" /></span> <br /> <br /></p><li><span style="font-family: arial;"> The ImageEnViewToolbar can now be used to view and edit PDF files
<br /><br /><p>
<img class="HistoryScreenshot" src="https://www.imageen.com/screenshots/PdfViewerToolbar.gif" />
</p></span></li><li><span style="font-family: arial;"> Now supports high quality PDF printing, including via ImageEn TAction classes <br /> <br /></span></li><li><span style="font-family: arial;"> Various improves to measurement, including new
interactions to measure areas and lengths with a polyline and more
detail in hover hints, e.g. perimeters when measuring by rectangular or
circular areas <br /><br /></span></li><li><span style="font-family: arial;"> Masks can now be applied to non-image layers, like text and shapes <br /><br /></span></li><li><span style="font-family: arial;"> TIERichEdit adds support for all RichEdit 8.0 features, including spell checking <br /><br /></span></li><li><span style="font-family: arial;"> All ImageEn keyboard shortcuts can now be easily customized or disabled <br /><br /></span></li><li><span style="font-family: arial;"> New mouse interaction allows selection of text or images
in a PDF files (with automatic detection based on what is under cursor),
plus it is much easier to switch to pan and zoom mode
<br /><br /><p>
<img class="HistoryScreenshot" src="https://www.imageen.com/screenshots/PDF_ImageCutSm.jpg" />
</p></span></li><li><span style="font-family: arial;"> Many other improvements for PDF file viewing, including
new options for selection, highlight and form field colors, and
performance enhancements <br /><br /></span></li><li><span><span style="font-family: arial;"> Now supports <b>Delphi 11</b></span> </span></li></ol><span style="font-family: helvetica;"><span style="color: #e69138;"> </span></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-89740707889017677722021-08-03T22:45:00.000-07:002021-08-03T22:45:28.071-07:00New PDF and DICOM Features, UI Enhancements and automatic image rotation in ImageEn 10.1.0 and IEVision 6.0.0<p><span style="font-family: helvetica;">We have now released updates to ImageEn, our image editing and display library for Delphi/BCB and IEVision, our advanced imaging features add-on. These updates are free if you purchased a license or extension after 1 August 2020:<br /><br /><a href="http://www.imageen.com/support/download/">http://www.imageen.com/support/download/</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions">http://www.imageen.com/order/</a><br /><br /><br />More info and a free trial of ImageEn are available at:<br /><br /><a href="http://www.imageen.com">http://www.imageen.com</a><br /> <br /><br /></span></p><h3 style="text-align: left;"><span style="font-family: helvetica;">Top Ten Enhancements in ImageEn 10.1.0</span></h3><h3><span style="font-family: helvetica;"></span></h3><p><span style="font-family: helvetica;">1. Numerous enhancements to PDF support, including significantly improved performance with large files, eleven PDF events, annotation rendering, corrupt file handling and much more</span><br /><span style="font-family: helvetica;"><span style="font-family: helvetica;"></span></span></p><p><span style="font-family: helvetica;"><span style="font-family: helvetica;"></span></span></p><p><span style="font-family: helvetica;"><span style="font-family: helvetica;"><a href="https://www.imageen.com/screenshots/PDF_Selection.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="398" data-original-width="678" height="398" src="https://www.imageen.com/screenshots/PDF_Selection.gif" width="678" /></a></span><br /> </span></p><p><span style="font-family: helvetica;">2. DICOM images can now be displayed with alternative color palettes, with five standard medical palettes included<br /></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.imageen.com/screenshots/iehelp/ColorTable_HotIron.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="599" height="500" src="https://www.imageen.com/screenshots/iehelp/ColorTable_HotIron.jpg" width="599" /></a></div><br /><span style="font-family: helvetica;"><br /></span><p></p><p><span style="font-family: helvetica;"></span></p><p><span style="font-family: helvetica;">3. Improved styling for many built-in dialogs, including enhanced print preview dialogs, gradient preview in Layer and Brush Property dialogs, and new devices glyphs in Acquisition dialog<br /><br />4. Improved support for VCL theming, particular with ImageEn toolbars, TIEFolderTree and TIEColorButton. Also, all control types are now available on themed toolbars<br /><br />5. Many performance improvements, including with animated GIFs, TIEFolder tree and general processing. Also, TIEMultiBitmap can now load frames on demand<br /><br />6. Mouse interaction to adjust the window level and width (brightness and contrast) of an image, e.g. for DICOM<br /><br />7. Mouse and keyboard can be used to increase/decrease curvature of TIELineLayer. Also curve line quality is much improved<br /></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.imageen.com/screenshots/LineLayer_Curve.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="209" height="104" src="https://www.imageen.com/screenshots/LineLayer_Curve.gif" width="209" /></a></div><br /><span style="font-family: helvetica;"><br /><br />8. TImageEnFolderMView can show file preview when dragging to/from Windows Explorer<br /><br />9. 12 new built-in shapes (arrows and chevrons)<br /><br />10. "Fit Cropping" in ImageEnView to better fill the control with the image<br /><br /><br /></span><p></p><h3 style="text-align: left;"><span style="font-family: helvetica;">Top Five Enhancements in IEVision 6.0.0</span></h3><h2><span style="font-family: helvetica;"></span></h2><p><span style="font-family: helvetica;">1. Orb Feature Detector: Find matching points in a pair of images<br /><br />2. Find Homography: Find the alignment matrix between points in a pair of images (e.g. for automatic image alignment)</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.imageen.com/screenshots/Homography.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="318" data-original-width="800" height="318" src="https://www.imageen.com/screenshots/Homography.jpg" width="800" /></a></div><br /><span style="font-family: helvetica;"><br /></span><p></p><p><span style="font-family: helvetica;"></span></p><p><span style="font-family: helvetica;"></span></p><p><span style="font-family: helvetica;">3. Warp Perspective: Adjust the perspective of an image based on a matrix<br /><br />4. Exposure Fusion: Merge images taken with multiple exposures into a single image<br /></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.imageen.com/screenshots/ExposureFusion.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="309" data-original-width="800" height="309" src="https://www.imageen.com/screenshots/ExposureFusion.jpg" width="800" /></a></div><br /><span style="font-family: helvetica;"><br /><br />5. Updated all OCR language files and added OCR script files (e.g. all Latin languages)<br /><br /></span><br /><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-67598571739142264782021-05-17T19:06:00.005-07:002021-05-17T19:10:33.036-07:00 PDF Features, Optimizations and High DPI Enhancements in ImageEn v10.0.1<p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">ImageEn
v10.0.1 has now been released. This update is free if you purchased a license or extension after 15 May 2020. You
can access the download from:</span></span><br /><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"></span></span></p><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /></span></span><span style="font-size: small;"><br /><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg">More info on ImageEn and a free trial is available at:<br /><br /><a href="http://www.imageen.com/" target="_blank">http://www.imageen.com</a></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"> </span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"> </span></span></span></span></div><div style="text-align: left;"><h1 style="text-align: left;"><span style="color: #990000;"><span style="font-size: large;"><span style="font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span style="font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg">Top Ten Enhancements</span></span></span></span></span></span></h1></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg">1. PDF Viewer supports an "All Pages" view</span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><br /></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><div class="separator" style="clear: both; text-align: center;"><a href="https://www.imageen.com/info/Screenshots/PDFShowAllImages.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="533" data-original-width="273" src="https://www.imageen.com/info/Screenshots/PDFShowAllImages.gif" /></a></div><br /><span class="spnMessageText" id="msg">2. Find Text can search the entire PDF document and scroll located text into view<br /><br />3. TImageEnMView uses on demand loading with large PDF documents for much faster performance<br /><br />4. Further high DPI improvements, including scaling of the ImageEn Open/Save dialogs and better support for multiple monitors<br /><br />5. Global methods to add, merge and delete pages from PDF files<br /><br />6.
Many other PDF enhancements including adding and removing attachments,
meta-data support, page rotation, and form editing improvements<br /><br />7. Aspect ratio now considered when scaling JPEG for optimized loading<br /><br />8. All Russian text is now natively translated<br /><br />9. Now uses custom GDI+ dash drawing for improved selection styling (e.g. when cropping)<br /><br />10. Various stability fixes and improvements </span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><br /></span></span></span></span></div><div style="text-align: left;"><br /><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown; font-size: medium;"><b><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="font-size: xx-small;">Complete Change History: <a href="http://www.imageen.com/info/HistoryFull.html" target="_blank">http://www.imageen.com/info/HistoryFull.html</a></span></span></span></b></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown; font-size: medium;"><b><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="font-size: xx-small;"> </span></span></span></b></span></span></span></span></span></span></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-41019341374100674722021-04-22T16:09:00.002-07:002021-04-22T16:11:46.834-07:00PDF viewing and editing, text borders and gradient fills, DICOM tag injection and enhancements to IERichEdit and OCR in ImageEn v10.0<div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">ImageEn
v10.0.0 and IEVision 5.5.0 have now been released. These updates are
free if you purchased a license or extension after 21 April 2020. You
can access the downloads from:<br /><br /><a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /></span></span><span style="font-size: small;"><br /><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg">More info on ImageEn and a free trial is available at:<br /><br /><a href="http://www.imageen.com/" target="_blank">http://www.imageen.com</a></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"> </span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"> </span></span><br /></span></span><h2 style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: large;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span><b>Top Fifteen Enhancements </b></span></span></span></span></h2><h2><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"></span></span></h2><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">1.
Support for PDFium for loading of rendered PDF pages, viewing and
editing of PDF documents (moving, importing and deleting pages),
selection of text and editing of form fields<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/PDF_Selection.gif" /><br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/PDF_FormEditing.gif" /><br /><br />2. Text layers and text drawing methods now support borders and gradient fills<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/TextStyle4.jpg" /><br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/TextStyle5.jpg" /><br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/TextStyle6.jpg" /><br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/TextStyle7.jpg" /><br /><br />3. Advanced features added to TIERichEdit: Find, Replace, Insert Image, Insert Object, Paste Special, and more<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/RichText.gif" /><br /><br />4. Tags can be injected into DICOM files without modifying the image<br /><br />5. DICOM tags can be anonymized (based on official recommendations)<br /><br />6. Loading of large images in TImageEnView can be deprioritized or loaded as thumbnails to prevent them slowing display<br /><br />7.
Many improvements for ImageEn toolbars, including custom buttons,
custom status and click actions and optional keyboard shortcuts<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/HoverToolbar.gif" /><br /><br />8. 21 new actions, including eleven PDF Viewer actions, six TIERichEdit actions, and more<br /><br />9. Improved ImageMagick support, particularly with SVG, with support for Alpha channel and scaled loading<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/SVG_Layer.gif" /><br /><br />10. Layers now support linking to create web links and clickable objects<br /><br />11.
Major optimization of XMP/Dict assignment code (up to 20x faster)
significantly speeding up loading of images with large XMP data blocks,
such as PSD<br /><br />12. Improved styling of CropTool with anti-aliasing and all TImageEnView selection properties<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/CropToolRotated.jpg" /><br /><br />13. Eight new gradient effects<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/IEGradients.gif" /><br /><br />14. Single method to automatically register all available plug-ins<br /><br />15. ImageEn toolbars can now be used in DLLs<br /><br /><span style="font-size: xx-small;">Complete Change History: <a href="http://www.imageen.com/info/HistoryFull.html" target="_blank">http://www.imageen.com/info/HistoryFull.html</a></span></span></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-40293671443049092562021-01-20T19:10:00.002-08:002021-01-20T19:15:12.631-08:00High DPI Support, Improved TIFF and New Performance Demo in ImageEn Imaging Library v9.3.0<p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">ImageEn
v9.3.0 has now been released. It is a free update if you purchased a license or extension after 20 January 2020.
You can access the downloads from:<br /><br /><a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"> </span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">For more information on ImageEn and free trial, visit: <br /></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com</a></span></span></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"> </span></span><br /><span style="color: brown; font-size: medium;"><b>Top Ten Enhancements</b></span></span></span><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></p><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>1. All ImageEn toolbars and dialogs support High DPI </span></span></span></span></span></span></p><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"></span></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"><img alt="Layer Properties dialog" border="0" src="https://www.imageen.com/info/Screenshots/LayerProperties.gif" /></span></span> <br /></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>2. Many enhancements to WIC support, including EXIF reading, 32bit PNG and alpha suppor</span></span></span></span></span><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>t</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>3. TImageEnMView and TImageEnFolderMView support natural filename sorting (e.g. numbered filenames are better sorted)</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>4. ImageEn Open/Save dialogs support all multi-select and Open Options when using modern Windows styling, and offer faster preview</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"></span></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"></span></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"></span></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"></span></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"></span></span></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"><img alt="Image Open and Save dialogs" border="0" src="https://www.imageen.com/info/Screenshots/OpenSaveDialog_Modern.jpg" /></span></span> <br /></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>5. Improvements to TIFF support including 32 bit (HDR) TIFFs and Planar tiffs containing gray scale and alpha</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>6. Smooth zooming interaction for TImageEnView</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>7. ImageEn toolbars can be custom scaled</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span><span style="font-size: small;"><span style="font-family: arial;"><img alt="Fully customizable toolbar components for TImageEnView" border="0" src="https://www.imageen.com/info/Screenshots/HoverToolbar.gif" /></span></span> <br /></span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>8. When pasting from the clipboard to a selection it supports transparency</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span>9. New demo showing all ImageEn Dialogs (\Demos\Other\ImageEn_Dialogs\ImageEn_Dialogs.dpr)</span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica;"><span class="spnMessageText" id="msg"><span> </span></span></span></span></span></span></div><div style="text-align: left;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown; font-size: medium;"><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span>10. Enhanced demo to compare performance of three imaging engines: Native, WIC and DLL (\Demos\InputOutput\IEViewPerformance\Performance.dpr)</span></span></span><b><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="font-size: xx-small;"> </span></span></span></b></span></span></span></div><p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown; font-size: medium;"><b><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><span style="font-size: xx-small;">Complete Change History: <a href="http://www.imageen.com/info/HistoryFull.html" target="_blank">http://www.imageen.com/info/HistoryFull.html</a></span></span></span> <br /></b></span></span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-33435498019624980122020-09-24T21:28:00.003-07:002020-09-24T21:28:46.408-07:00Improved Design-Time State and new Camera Raw Formats in ImageEn v9.2.0<p><span style="color: black; font-family: Segoe UI, Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg">ImageEn
v9.2.0 and IEVision 5.4.0 have now been released. These updates are
free if you purchased a license or extension after 25 September 2019.
You can access the downloads from:<br /><br /><a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a><br /><br /><br /><span style="color: brown; font-size: medium;"><b>Top Ten Enhancements </b></span><br /><br />1. New Brush Properties dialog available via code, actions and in-built toolbar<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/BrushProperties.gif" /><br /><br /><br />2. Image levels adjustment in code and Proc Properties dialog<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/ImageLevels.gif" /><br /><br /><br />3. Design-time preview of TImageEnView and TImageEnMView with either live or demo content<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/DesignTimePreview.gif" /><br /><br /><br />4. Published more visual properties and improved background styles for TImageEnView and TImageEnMView<br /><br />5. Improved LibRaw support with latest library and can now read EXIF from Raw images<br /><br />6. New AutoSetBitDepth property will automatically update bit depth settings just by specifying the PixelFormat<br /><br />7. Improved layout for TIELayerProps and Layer Properties dialog and copes better with narrow layout<br /><br />8. TPicture can be assigned directly to TIEBitmap or TImageEnView and alpha channel is supported<br /><br />9. Various performance enhancements to clone, brush and retouch tools, GDI+ functions and TImageEnView navigator<br /><br />10.
Run all compiled demos directly from the help documentation, plus new
"Large TIFF Viewer and Editor" demo and redo of TIFF Handler demo<br /><br /><span style="font-size: xx-small;">Complete Change History: <a href="http://www.imageen.com/info/HistoryFull.html" target="_blank">http://www.imageen.com/info/HistoryFull.html</a></span></span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-331828806392804332020-05-27T20:16:00.000-07:002020-05-27T20:18:08.376-07:00ImageEn 9.1.0 and IEVision 5.3.0 Performance Updates Released<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><b><a href="http://www.imageen.com/">ImageEn</a> v9.1.0</b> and <b><a href="http://www.imageen.com/IEVision/">IEVision</a> v5.3.0 </b>have now been released. For this update we focused on ways we could improve performance.</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">You
will now notice significant speed enhancements with Camera Raw files,
TImageEnMView (particularly if you enable disk caching) and play
animated GIFs in TImageEnView, as well as other optimizations such as
loading images into TImageEnView in the background.</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">IEVision v5.3.0 can now use multiprocessing which more than doubles OCR processing speed on modern systems.</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">These updates are free if you purchased a license or extension after 28 May 2019. You can access the downloads from:</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">Other users can extend their registration for 12 months at:</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a></span><span class="spnMessageText" id="msg"><br /></span></span><br />
<h4>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><b>Top Five Performance Enhancements </b></span></span></span></h4>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">1. TImageEnMView can use a persistent disk cache for much improved performance</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">2.
When loading the embedded JPEG and thumbnails in RAW files, they can
now be scale loaded to a desired size for better performance,
particularly in TImageEnMView</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">3. TImageEnView now offers Asyncronous Loading load images in a background thread without affecting the UI</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">4. Much better performance when playing animated GIF files in TImageEnView</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">5. Various code optimizations to improve performance </span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><br /></span></span>
<br />
<h4>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><b>Top Ten General Enhancements </b></span></span></span></h4>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">1. New Retouch tools: Interactive brushes to fix image content: Smudge, Inpaint, Blur, Smooth, Sharpen, etc.</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><img border="0" src="https://www.imageen.com/info/Screenshots/Smudge.jpg" /></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><img border="0" src="https://www.imageen.com/IEVision/Screenshots/Inpaint2.jpg" /></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><img border="0" src="https://www.imageen.com/info/Screenshots/MotionBlur.jpg" /></span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">2.
Improvements to TImageEnMView including automatically padding thumbnail
spacing for improved styling, navigation by clicking the first letter
of a filename and support for folder shortcuts</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">3. Many enhancements to built-in toolbars, including full support for theming</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><img border="0" src="https://www.imageen.com/info/Screenshots/ThemedToolbar.gif" /></span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">4. New Smart Eraser Tool removes background without erasing subject</span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><img border="0" src="https://www.imageen.com/info/Screenshots/BackgroundErase.jpg" /></span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">5. ImageEn can now automatically use Windows 10 style open/save dialogs with preview support and automatic filters</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">6. Added "Effects" section to Layer properties (which includes support for the new InnerGlow style)</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">7. Many improvement to brush tools, including anti-aliased brushes and asymmetrial cloning</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">8. IELib64 DLL is not needed for 64bit apps. ImageEn can automatically use WIC to load JPEG and PNG images</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">9. Now fully supports reading and writing of DICOM files without images (tag only files)</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">10. Support for Canon CR3 Raw images</span></span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg">+ Support for <b>Delphi/BCB 10.4 Sydney</b></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: small;"><span class="spnMessageText" id="msg"><br />Complete Change History: <a href="http://www.imageen.com/info/history.html" target="_blank">http://www.imageen.com/info/history.html</a></span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-47146471530684129222020-04-12T18:31:00.001-07:002020-04-12T18:31:54.551-07:00Huge V9.0.0 Release of ImageEn Imaging Library<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><span style="font-size: small;">ImageEn v9.0.0 has now been released. It is a major updates that focuses on UI features, like toolbar, popup menus, plus over 50 new actions.</span><br /></span></span><br />
<h2>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="font-size: medium;"><b>Top Fifteen Enhancements </b></span></span></span></span></h2>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><span style="font-size: small;">1. Fully customizable toolbar components for TImageEnView and TIERichEdit<br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/HoverToolbar.gif" /><br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/RichEditToolbar.gif" /><br /><br /> </span></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><span style="font-size: small;">2. Automatic hover toolbars for ImageEnView for viewing, editing, selections and layers<br /><br />3.
Customizable, context sensitive popup menus for TImageEnView,
TImageEnMView, TImageEnFolderMView, TImageEnLayerMView and TIERichEdit<br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/ImageEnPopup.gif" /> <img border="0" src="https://www.ImageEn.com/info/Screenshots/IEMViewPopup.gif" /><br /><br /><br />4. New TIELayerProps component to view and edit properties of selected layer<br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/IELayerProps.gif" /><br /><br /><br />5. 28 new actions for TImageEnView, TImageEnMView and TImageEnFolderMView, plus you no longer need to attach an ImageEn control<br /><br />6. Twenty-seven actions for TIERichEdit for rapid development<br /><br />7. TImageEnView can be attached to a TImageEnMView to show a preview of the selected image (with navigation)<br /><br />8. TImageEnMView can be filtered by filename or custom code<br /><br />9. Rotation grip to make it easier and more obvious to rotate layers<br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/RotationGrip.gif" /><br /><br />10. TIELineLayers can now be curved<br /><br />11.
Numerous other layer improvements: horizontal and vertical flipping,
graduated masks, more accurate rotation and sizing, and transparent
background for rich text layers<br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/GradientMask.jpg" /><br /><br />12. Full Greek translation (partial computer generation)<br /><br />13. Easily create curved selections in code<br /><br /><img border="0" src="https://www.ImageEn.com/info/Screenshots/CurvedSel.jpg" /><br /><br />14. CaptureFromScreen allows capturing of specific monitors<br /><br />15. Improved memory handling and other optimizations</span></span></span><br />
<br />
<span style="font-size: small;"><span style="font-family: "arial" , "helvetica";"><br /></span></span>
<h3>
<span style="font-family: "arial" , "helvetica"; font-size: large;">Upgrading to 9.0.0 </span></h3>
<br />
<span style="font-size: small;"><span style="font-family: "arial" , "helvetica";">This update is free if you purchased a license or extension after 12 April 2019. You can access the download from:<br /><br /><a href="http://www.imageen.com/support/downloadrequest.html">http://www.imageen.com/support/downloadrequest.html</a><br /><br />Other users can extend their registration for 12 months at:<br /><br /><a href="http://www.imageen.com/order/index.html#Extensions">http://www.imageen.com/order/index.html#Extensions</a><br /><br /><br /><br />Trials are available from:<br /><br /><a href="http://www.imageen.com/download/">http://www.imageen.com/download/</a></span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-84290066632750423732019-11-03T17:18:00.000-08:002019-11-03T17:18:48.396-08:00FireMonkey Beta for ImageEn, Imaging LibraryWe have now released a beta version of ImageEn/FireMonkey. At this time, only Windows targets are supported. Other platforms are planned.<br /><br />It is a direct port of our VCL version, but does NOT include:<br /><br /><b>Any Dialogs</b><br />- ImageEn open/save dialogs<br />- Built-in image effects dialog (TImageEnProc.DoPreviews)<br />- Built-in image I/O properties dialog (TImageEnIO.DoPreviews)<br />- Layer Properties dialog<br />- Printing and Print Preview dialogs<br /><br /><b>Any Windows Features</b><br />- Windows shell components and features (such as video thumbnails)<br />- TIEFolderMView<br />- WIC file formats and features<br />- GDI+<br />- Rich formatting for text layers<br />- AVI and Meta-File support<br /><br /><b>Other</b><br />- Image Acquisition (Twain, WIA, WPD)<br />- Video Acquisition (DirectShow, MMF)<br />- Support for plug-ins like ImageMagick and WpViewPDF<br />- Legacy components: TImageEnVect, THSVBox and TGradientBox<br /><br /><br />Naturally being a beta, it will have bugs and incompatibilities. Beta testers are expected to test and report issues.<br /><br />The beta is open to anyone with an active ImageEn license (as it includes all ImageEn source code). For more information, visit:<br /><br /><a href="http://www.imageen.com/fmx/">www.imageen.com/fmx/</a><br />
<br />
<br />
<br />
<span style="color: black; font-family: Arial, Helvetica; font-size: x-small;"><span class="spnMessageText" id="msg"><b><span style="color: brown;"><span style="font-size: large;">Sample Compiled Demos</span></span></b><br /><br /><span style="font-size: small;"><b>Complete Editor:</b><br />Image display and editing application<br /><a href="http://www.imageen.com/FMX/Demos/ImageEditing/CompleteEditor/PhotoEn.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/ImageEditing/CompleteEditor/PhotoEn.exe</a><br /><br /><b>Thumbnail Viewer:</b><br />Using TImageEnMView to show thumbnails for images in a folder<br /><a href="http://www.imageen.com/FMX/Demos/Multi/Thumbnails2/Thumbnails2.zip" target="_blank">http://www.ImageEn.com/FMX/Demos/Multi/Thumbnails2/Thumbnails2.zip</a><br /><br /><b>All Layer Editing:</b><br />Usage of image, shape, text and line layers<br /><a href="http://www.imageen.com/FMX/Demos/LayerEditing/Layers_AllTypes/Layers.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/LayerEditing/Layers_AllTypes/Layers.exe</a><br /><br /><b>Image Editor Actions Demo:</b><br />Complete image display and editing application built using only the TImageEnView Action set<br /><a href="http://www.imageen.com/FMX/Demos/Actions/Actions_Viewer/Actions.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Actions/Actions_Viewer/Actions.exe</a><br /><br /><img border="0" src="https://www.imageen.com/info/screenshots/LayersActions.jpg" /><br /><br /><b>Layer Actions Demo:</b><br />Complete image layer editing application built using only the TImageEnView Action set<br /><a href="http://www.imageen.com/FMX/Demos/Actions/Actions_Layers/Actions.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Actions/Actions_Layers/Actions.exe</a><br /><br /><b>Thumbnail Actions Demo:</b><br />Multiple image display and editing application built using only the TImageEnMView Action set<br /><a href="http://www.imageen.com/FMX/Demos/Actions/Actions_MView/MViewActions.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Actions/Actions_MView/MViewActions.exe</a><br /><br /><b>All Actions Demo:</b><br />Demo showing all ImageEn actions (230+) available to rapidly build applications<br /><a href="http://www.imageen.com/FMX/Demos/Actions/AllActions/AllActions.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Actions/AllActions/AllActions.exe</a><br /><br /><b>Brush Tool Demo:</b><br />Using the in-built Brush tool to paint onto an image<br /><a href="http://www.imageen.com/FMX/Demos/ImageEditing/BrushTool/PaintBrush.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/ImageEditing/BrushTool/PaintBrush.exe</a><br /><br /><img border="0" src="https://www.imageen.com/info/screenshots/CloneBrushSm.jpg" /><br /><br /><b>Clone Tool Demo:</b><br />Using the in-built Clone Brush tool to copy and erase content within an image<br /><a href="http://www.imageen.com/FMX/Demos/ImageEditing/CloneTool/CloneBrush.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/ImageEditing/CloneTool/CloneBrush.exe</a><br /><br /><b>Flood Fill Tool:</b><br />Using the Fill tool to replace the color within an image with a new color or transparency<br /><a href="http://www.imageen.com/FMX/Demos/ImageEditing/FillTool/FillTool.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/ImageEditing/FillTool/FillTool.exe</a><br /><br /><b>Transition Effects:</b><br />Use of transition effects to smooth the changing of images during a slideshow<br /><a href="http://www.imageen.com/FMX/Demos/Display/Transitions/Transitions.zip" target="_blank">http://www.ImageEn.com/FMX/Demos/Display/Transitions/Transitions.zip</a></span></span></span><br />
<br />
<span style="color: black; font-family: Arial, Helvetica; font-size: small;"><span class="spnMessageText" id="msg"><img alt="Transition effects" border="0" height="286" src="https://www.imageen.com/info/Screenshots/Transition.jpg" width="391" /> <br /><br /><b>Photosphere Viewer:</b><br />Interactive display of "Equirectangular" images (Google Android PhotoSphere 360° panoramic images)<br /><a href="http://www.imageen.com/FMX/Demos/Display/PhotoSphere/PhotoSphere.zip" target="_blank">http://www.ImageEn.com/FMX/Demos/Display/PhotoSphere/PhotoSphere.zip</a><br /><br /><b>Zoom Filter Comparison:</b><br />Display of all the available ZoomFilter effects for image smoothing<br /><a href="http://www.imageen.com/FMX/Demos/Display/ZoomFilter/ZoomFilter.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Display/ZoomFilter/ZoomFilter.exe</a><br /><br /><b>Magic Fill to Polygon:</b><br />Creates a polygon by performing a magic selection on an image (matching a color range)<br /><a href="http://www.imageen.com/FMX/Demos/LayerEditing/MagicFillToPolygon/Magic2Polygon.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/LayerEditing/MagicFillToPolygon/Magic2Polygon.exe</a><br /><br /><b>Navigator Demo:</b><br />Use of TImageEnView.SetNavigator to show the currently viewable portion of the image<br /><a href="http://www.imageen.com/FMX/Demos/Display/Navigator/Navigator.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Display/Navigator/Navigator.exe</a><br /><br /><b>Cells and Grid Demo:</b><br />Divide an image into a grid and allow selection of individual cells<br /><a href="http://www.imageen.com/FMX/Demos/Display/CellsAndGrid/CellsAndGrid.exe" target="_blank">http://www.ImageEn.com/FMX/Demos/Display/CellsAndGrid/CellsAndGrid.exe</a></span></span> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-61860008105127517722019-11-03T16:27:00.000-08:002019-11-04T13:08:13.754-08:00Recent Updates to ImageEn Imaging LibraryWe've just released v8.7.5, an update to the recent v8.7.0 release of ImageEn, our Image Display and Editing Library for Delphi and C++.<br />
<br />
Top Five Enhancements in v8.7.*:<br />
<br />
1. Text Layers now support Rich Text formatting, with optional pop-up toolbar<br />
<br />
<img alt="TIETextLayer now supports Rich Text formatting" border="0" src="https://www.imageen.com/info/Screenshots/RichText.gif" /><br />
<br />
2. New Rich Editing control with an optional hover toolbar<br />
<br />
3. New Windows components to select Windows folders and drag and drop files to/from Windows Explorer<br />
<br />
<img alt="TIEOpenFolderDialog" border="0" src="https://www.imageen.com/info/Screenshots/IEOpenFolderDialog.gif" /><br />
<br />
4. Database Bitmap supports Layer saving and image annotations (with new FireDac demo)<br />
<br />
5. Area, perimeter and centroid can be calculated for selections and polyline layers<br />
<br />
<img border="0" src="https://www.imageen.com/info/Screenshots/PointEditing.gif" /><br />
<br />
<br />
<br />
More information:<br />
<br />
<a href="http://www.imageen.com/">http://www.imageen.com</a><br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-8766395065775378572019-07-04T14:20:00.000-07:002019-07-04T14:20:26.281-07:00Delphi and C++Builder Version ChartI created this extended product version chart, because I cannot seem to access this information elsewhere and I often need it when resolving component install issues (to reference folder and registry locations between versions)<br />
<br />
<table border="1" cellpadding="0" cellspacing="0"><tbody>
<tr height="40" style="height: 30.0pt; mso-height-source: userset;">
<td class="xl65" height="40" style="height: 30.0pt; width: 66pt;" width="88"><span style="font-size: x-small;"><b>Company</b></span></td>
<td class="xl66" style="width: 132pt;" width="176"><span style="font-size: x-small;"><b>Product</b></span></td>
<td class="xl66" style="width: 48pt;" width="64"><span style="font-size: x-small;"><b>Product Version</b></span></td>
<td class="xl66" style="width: 48pt;" width="64"><span style="font-size: x-small;"><b>Package Version</b></span></td>
<td class="xl66"><span style="font-size: x-small;"><b>Compiler Version</b></span></td>
<td class="xl66" style="width: 48pt;" width="64"><span style="font-size: x-small;"><b>IFDEF Version</b></span></td>
<td class="xl67" style="width: 48pt;" width="64"><span style="font-size: x-small;"><b>BDS Version</b></span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi 1</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">1</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER80</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi 2</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">2</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER90</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">C++Builder 3</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">3</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER110</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi 3</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">3</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER100</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">C++Builder 4</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">4</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER125</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi 4</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">4</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER120</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 5</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">5</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER130</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 6</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">6</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">60</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">14.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER140</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi 7</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">7</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">70</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">15.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER150</span></td>
<td class="xl70" style="width: 48pt;" width="64"><span style="font-size: x-small; mso-spacerun: yes;"> </span><span style="font-size: x-small;">-</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi 2005</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">9</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">90</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">17.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER170</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">3.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl72"><span style="font-size: x-small;">Delphi/CPB 2006</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">10</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">100</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">18.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER180</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">4.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl68" height="23" style="height: 17.25pt; width: 66pt;" width="88"><span style="font-size: x-small;">Borland</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 2007</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">11</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">110</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">18.5</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER185</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">5.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">CodeGear</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 2009</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">12</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">120</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">20.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER200</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">6.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">CodeGear</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 2010</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">14</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">140</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">21.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER210</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">7.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">15</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">150</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">22.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER220</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">8.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE2 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">16</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">161</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">23.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER230</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">9.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE3 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">17</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">170</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">24.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER240</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">10.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE4 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">18</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">180</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">25.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER250</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">11.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE5 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">19</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">190</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">26.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER260</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">12.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE6 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">20</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">200</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">27.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER270</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">14.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE7 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">21</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">210</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">28.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER280</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">15.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB XE8 *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">22</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">220</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">29.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER290</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">16.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 10 Seattle *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">23</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">230</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">30.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER300</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">17.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 10.1 Berlin *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">24</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">240</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">31.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER310</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">18.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl73" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl69" style="width: 132pt;" width="176"><span style="font-size: x-small;">Delphi/CPB 10.2 Tokyo *</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">25</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">250</span></td>
<td class="xl71" style="width: 48pt;" width="64"><span style="font-size: x-small;">32.0</span></td>
<td class="xl69" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER320</span></td>
<td class="xl78" style="width: 48pt;" width="64"><span style="font-size: x-small;">19.0</span></td>
</tr>
<tr height="23" style="height: 17.25pt; mso-height-source: userset;">
<td class="xl74" height="23" style="height: 17.25pt;"><span style="font-size: x-small;">Embarcadero</span></td>
<td class="xl75"><span style="font-size: x-small;">Delphi/CPB 10.3 Rio *</span></td>
<td class="xl76" style="width: 48pt;" width="64"><span style="font-size: x-small;">26</span></td>
<td class="xl76" style="width: 48pt;" width="64"><span style="font-size: x-small;">260</span></td>
<td class="xl77" style="width: 48pt;" width="64"><span style="font-size: x-small;">33.0</span></td>
<td class="xl76" style="width: 48pt;" width="64"><span style="font-size: x-small;">VER330</span></td>
<td class="xl79" style="width: 48pt;" width="64"><span style="font-size: x-small;">20.0</span></td>
</tr>
</tbody></table>
<br />
* 64bit Support<br />
<br />
Also see: <a href="http://docwiki.embarcadero.com/RADStudio/Rio/en/Compiler_Versions">http://docwiki.embarcadero.com/RADStudio/Rio/en/Compiler_Versions</a><br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-39672414410823088232019-07-03T17:02:00.000-07:002019-07-03T17:02:12.564-07:00Different function parameter modifiers in Delphi - Ali Keshavarz(Useful article that was originally posted on now defunct vcldeveloper.com)<br />
<br />
Recently a friend asked me about constant parameters in Delphi
functions, that brought the idea of writing a new post about passing
parameters to functions/procedures in Delphi.<br />
<h3>
</h3>
<h3>
Parameter modifiers</h3>
When you call a function or procedure (I am going to refer to both of
them as Functions here), you have to somehow pass the required input or
output parameters to it. Parameters are passed to functions either by
value, or by reference.<br />
<br />
<span style="text-decoration: underline;">Passing by value</span>
means, compiler makes a new copy of the original data, and sends it to
the function. This way, the function has its own copy of data, and
changing value of the parameter inside the function does not affect the
original data. This is the default mode when you pass a parameter to a
function in Delphi:<br />
<span id="more-388"></span><br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_170501">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">program</code> <code class="delphi plain">Test02;</code></div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">procedure</code> <code class="delphi plain">Foo(Param1: </code><code class="delphi keyword">Integer</code><code class="delphi plain">);</code></div>
<div class="line number4 index3 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number5 index4 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Inc(Param1); </code><code class="delphi comments">//=> Has no effect on MyData.</code></div>
<div class="line number6 index5 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number7 index6 alt2">
</div>
<div class="line number8 index7 alt1">
<code class="delphi keyword">var</code></div>
<div class="line number9 index8 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">MyData : </code><code class="delphi keyword">Integer</code><code class="delphi plain">;</code></div>
<div class="line number10 index9 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number11 index10 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">MyData := </code><code class="delphi value">1</code><code class="delphi plain">;</code></div>
<div class="line number12 index11 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">Foo(MyData);</code></div>
<div class="line number13 index12 alt2">
<code class="delphi spaces"> </code><code class="delphi keyword">Writeln</code><code class="delphi plain">(MyData); </code><code class="delphi comments">//=> MyData is still 1.</code></div>
<div class="line number14 index13 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">.</code><br />
<br /></div>
<div class="line number14 index13 alt1">
</div>
<div class="line number14 index13 alt1">
</div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
<span style="text-decoration: underline;">Passing by reference</span>
means, compiler only sends a pointer to the function. This pointer
refers to the original data, so changing value of the parameter inside
the function directly changes the original data. In Delphi such
parameters are marked with <b>var</b> keyword:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_805964">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">program</code> <code class="delphi plain">Test02;</code></div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">procedure</code> <code class="delphi plain">Foo(</code><code class="delphi keyword">Var</code> <code class="delphi plain">Param1: </code><code class="delphi keyword">Integer</code><code class="delphi plain">);</code></div>
<div class="line number4 index3 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number5 index4 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Inc(Param1);</code></div>
<div class="line number6 index5 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number7 index6 alt2">
</div>
<div class="line number8 index7 alt1">
<code class="delphi keyword">var</code></div>
<div class="line number9 index8 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">MyData : </code><code class="delphi keyword">Integer</code><code class="delphi plain">;</code></div>
<div class="line number10 index9 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number11 index10 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">MyData := </code><code class="delphi value">1</code><code class="delphi plain">;</code></div>
<div class="line number12 index11 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">Foo(MyData);</code></div>
<div class="line number13 index12 alt2">
<code class="delphi spaces"> </code><code class="delphi keyword">Writeln</code><code class="delphi plain">(MyData); </code><code class="delphi comments">//=> MyData is 2.</code></div>
<div class="line number14 index13 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">.</code><br />
<br /></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
These are the two basic ways parameters are passed to functions, but
Delphi has still two other modifier keywords for function parameters: <b>const</b> and <b>out</b>. What are these two used for?<br />
“Const” makes the parameter read-only, so that you cannot change its
value inside the function. This lets compiler to generate optimized code
when there is no need to alter value of that parameter inside the
function.<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_342883">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">procedure</code> <code class="delphi plain">Foo(</code><code class="delphi keyword">const</code> <code class="delphi plain">Param1: </code><code class="delphi keyword">Integer</code><code class="delphi plain">);</code></div>
<div class="line number2 index1 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number3 index2 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Inc(Param1); </code><code class="delphi comments">// ERROR! You cannot modify a const parameter.</code></div>
<div class="line number4 index3 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
<br />
“Out” is similar to “var”, the difference is, when you use “Out” the
initial value of the parameter is discarded inside the function, and it
does not matter. What matters is the value you assign to that parameter
inside your function. “Out” is basically there to support MS COM method
declaration in Delphi. You can use it in any function you write, but you
will see lots of COM methods having Out parameters in their
declaration.<br />
<br />
OK, the purpose of Const and Out modifiers are clear, it can be
guessed even from their name which represent Constant and Output; but,
to which category do they belong?<br />
<h2>
</h2>
<h3>
Are “Out” and “Const” passed by value or by reference?</h3>
For “out”, as I mentioned above, it acts similar to “var”, so it passes parameters by reference.<br />
How about “Const’? Const acts somehow differently! It passes
parameters usually by value, but it passes certain data types by
reference too! Which data types are passed by value, and which ones are
passed by reference? To clarify this, I wrote a simple program; it shows
address of a parameter passed to a function using the default passing
(by value), var modifier (by reference), and const modifier. It repeats
this for various data types, to show how these modifiers pass different
data types to a function. The source code is attached at the end of this
post. Here is a screenshot of this sample program:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXywTGuY_BUCGPBDicCM76WsE4mJsKnKeZXvHaWIKZPWiUyZYt4-OYZW4YokceG38yIRm50jFjywoETM_HMQLCbxxPYKjLVB-E420XqvmEFWfohrrsy24KppyjJSb-KxvrVgMfl3Wfhdw/s1600/function_param_modifiers_thumb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="407" data-original-width="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXywTGuY_BUCGPBDicCM76WsE4mJsKnKeZXvHaWIKZPWiUyZYt4-OYZW4YokceG38yIRm50jFjywoETM_HMQLCbxxPYKjLVB-E420XqvmEFWfohrrsy24KppyjJSb-KxvrVgMfl3Wfhdw/s1600/function_param_modifiers_thumb.png" /></a></div>
<br />
<br />
<br />
For each data type, “Original:” line indicates address of the
original data before being passed to the function. “Value:” line
indicates address of the parameter passed to the function by value.
“Const:” line indicates address of the parameter passed to the function
as a constant. And finally, “var:” line indicates address of the
parameter passed to the function by reference.<br />
As you can see, for all data types, address of var parameter is the
same as address of the original data, and address of value parameter
(passed by value) differs from the original data. Therefore, we can
conclude passing a parameter by value, always makes a copy of the
original data; and passing a parameter with var modifier always refers
to the original data, regardless of the data type which is used.<br />
<br />
But for constant parameters, we can see that it always passes the
parameter by value, except when the parameter is of array type (<i>static arrays and open arrays, not dynamic arrays; dynamic arrays are passed similar to objects</i>), or record type. It means, if you do not specify a modifier for a parameter of type array (<i>not dynamic arrays</i>)
or records, then every time your function is called, the whole data
inside that array or record will be pushed into stack, and when the
execution of your function is over, it is dismissed! On the other hand,
when you use Const or Var modifiers, only a pointer to your record or
array is passed to the function, so there is no need to copy the whole
data of the array or record.<br />
Now you might ask, if the compiler is smart enough to optimize array and record parameters when Var or <b>Const</b>
modifiers are used, then why doesn’t it use the same optimization for
objects, interfaces, strings, or dynamic arrays?! The answer is: Because
those are special data types!<br />
<br />
<br />
<h3>
Objects, Interfaces, Strings, and Dynamic Arrays as parameters</h3>
Objects, interfaces, strings, and dynamic arrays are behind the scene
just pointers. They do not contain the real data. They are pointers
that refer to the real data. That’s why if you call SizeOf() function on
a string or object type, even if your string or object contains huge
data; the result is always 4 (<i>as long as Delphi compiler is 32-bits</i>)!
SizeOf() function only returns the size of that pointer, not size of
the data that pointer refers to. Also that is why we have Length()
function for getting size of strings and dynamic arrays, and
TObject.InstanceSize class method for getting size of an object.<br />
Hence, for data types as objects, interfaces, strings, or dynamic
arrays; we can say practically they are always passed by reference, even
if no modifier is specified for them. So the code bellow directly
affects StringList variable, and there is no local copy of that object
inside Foo:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_425252">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">program</code> <code class="delphi plain">Test03</code></div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">uses</code> <code class="delphi plain">Classes;</code></div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="delphi keyword">procedure</code> <code class="delphi plain">Foo(Param1: TStrings);</code></div>
<div class="line number6 index5 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number7 index6 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Param1</code><code class="delphi value">.</code><code class="delphi plain">Add(‘۱۲۳۴’); </code><code class="delphi comments">//=> This will directly add a new item to StringList.</code></div>
<div class="line number8 index7 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number9 index8 alt2">
</div>
<div class="line number10 index9 alt1">
<code class="delphi keyword">var</code></div>
<div class="line number11 index10 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">StringList : TStringList;</code></div>
<div class="line number12 index11 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number13 index12 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">StringList : TStringList</code><code class="delphi value">.</code><code class="delphi plain">Create;</code></div>
<div class="line number14 index13 alt1">
<code class="delphi spaces"> </code><code class="delphi keyword">try</code></div>
<div class="line number15 index14 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Foo(StringList);</code></div>
<div class="line number16 index15 alt1">
<code class="delphi spaces"> </code><code class="delphi keyword">WriteLn</code><code class="delphi plain">(StringList</code><code class="delphi value">.</code><code class="delphi plain">Text); </code><code class="delphi comments">//=> Writes ‘۱۲۳۴’.</code></div>
<div class="line number17 index16 alt2">
<code class="delphi spaces"> </code><code class="delphi keyword">finally</code></div>
<div class="line number18 index17 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">StringList</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number19 index18 alt2">
<code class="delphi spaces"> </code><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number20 index19 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">.</code><br />
<br /></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
Using var modifier on objects, interfaces or dynamic arrays is most
of the time unnecessary, because the value itself is a reference, so
using var means having a reference to another reference!<br />
Also Const modifier has no particular meaning on objects, interfaces
or dynamic arrays, because it only locks the pointer behind the scene,
not the data structure to which the pointer is referring. So if we
change declaration of Foo() in the code above to this:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_575863">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">procedure</code> <code class="delphi plain">Foo(</code><code class="delphi keyword">const</code> <code class="delphi plain">Param1: TStrings);</code></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
We will get the same result as the above code.<br />
<br />
However, const and var modifiers have meaning for string types! This
is because strings are a special auto-managed data types in Delphi.<br />
<br />
<br />
<h4>
Strings, Dynamic Arrays, and Interfaces are referenced counted:</h4>
Strings and dynamic arrays are both reference-counted. Interfaces in
Delphi also provide reference-counting support). Reference-counted types
are automatically handled by Delphi runtime. When you define a string
variable in Delphi and assign it a value, you will have a data structure
containing your text, and a reference-counter value which is set to 1:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_376821">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">var</code></div>
<div class="line number2 index1 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">A : </code><code class="delphi keyword">string</code><code class="delphi plain">;</code></div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">begin</code></div>
<div class="line number4 index3 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">A := ‘Test’; </code><code class="delphi comments">// Memory is allocated for A</code></div>
<div class="line number5 index4 alt2">
<code class="delphi spaces"> </code><code class="delphi comments">// on the heap, and reference</code></div>
<div class="line number6 index5 alt1">
<code class="delphi spaces"> </code><code class="delphi comments">// counter is set to 1.</code></div>
<div class="line number7 index6 alt2">
<code class="delphi keyword">end</code><code class="delphi plain">;</code><br />
<br /></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
Now if you change the above code to this:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_290397">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">var</code></div>
<div class="line number2 index1 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">A, B : </code><code class="delphi keyword">string</code><code class="delphi plain">;</code></div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">begin</code></div>
<div class="line number4 index3 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">A := ‘Test’; </code><code class="delphi comments">// Memory is allocated for A</code></div>
<div class="line number5 index4 alt2">
<code class="delphi spaces"> </code><code class="delphi comments">// on the heap, and reference</code></div>
<div class="line number6 index5 alt1">
<code class="delphi spaces"> </code><code class="delphi comments">// counter is set to 1.</code></div>
<div class="line number7 index6 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">B := A; </code><code class="delphi comments">// Reference count for the data</code></div>
<div class="line number8 index7 alt1">
<code class="delphi spaces"> </code><code class="delphi comments">// structure referred by A is incremented to 2.</code></div>
<div class="line number9 index8 alt2">
<code class="delphi keyword">end</code><code class="delphi plain">;</code><br />
<br /></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
Value of A is not copied to B, instead of that, B refers to the same
data structure as A, and reference counter of that data structure is set
to 2. As soon as any of those variables goes out of scope, reference
counter of that data structure would be decremented, and when reference
counter reaches down to zero, the data structure would be automatically
freed. This mechanism is the same for strings and dynamic arrays. For
interfaces, the class which implements the interface should implement
three methods defined inside IInterface to provide reference-counting
support.<br />
<br />
<h4>
Strings use Copy-On-Write technique:</h4>
The biggest reason why Const and Var modifiers are meaningful to
string types is their copy-on-write feature. To explain this, I had to
explain reference-counting in brief. Now please take a look at this
example:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_659985">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">var</code></div>
<div class="line number2 index1 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">A, B : </code><code class="delphi keyword">string</code><code class="delphi plain">;</code></div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">begin</code></div>
<div class="line number4 index3 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">A := ‘Test’; </code><code class="delphi comments">// Memory is allocated for A</code></div>
<div class="line number5 index4 alt2">
<code class="delphi spaces"> </code><code class="delphi comments">// on the heap, and reference</code></div>
<div class="line number6 index5 alt1">
<code class="delphi spaces"> </code><code class="delphi comments">// counter is set to 1.</code></div>
<div class="line number7 index6 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">B := A; </code><code class="delphi comments">// Reference count for the data</code></div>
<div class="line number8 index7 alt1">
<code class="delphi spaces"> </code><code class="delphi comments">// structure referred by A is incremented to 2.</code></div>
<div class="line number9 index8 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">B := B + ‘er’; </code><code class="delphi comments">// B = Tester , A = Test</code></div>
<div class="line number10 index9 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">;</code><br />
<br /></div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
This is the same as the previous sample code, with one extra line. In
the last line, we add ‘er’ to variable B. That will result in B
referring to “Tester”, not “Test” anymore. How is it done? A and B were
both referring to a data structure containing “Test”. Then we decided to
modify B. Delphi runtime assigns a new data structure, and copies the
string “Test” and the string “er” to it. It also decrements
reference-counter of original “Test”, and changes B to refer to the new
data structure. It also increments reference-counter of the new data
structure. So at the end, we have A which refers to the old data
structure, and B which refers to the new data structure.
Reference-counters of both data structures are 1 now.<br />
<br />
This is called <b>copy-on-write</b>; as long as there is no
modification, there is no need to do the costly copy operation and
waste the memory. Delphi waits until a modification is requested, at
that time, it does the actual copy operation.<br />
<br />
Please take note, this mechanism <span style="text-decoration: underline;">does not</span> exist for dynamic arrays, so if A and B in the code above were dynamic arrays, changing B would have affected A too.<br />
<br />
<br />
<h4>
So, how does a string parameter work?</h4>
When a string parameter is defined with no modifier, it is sent to
the function as a reference to the actual data, but its
reference-counter would be incremented when entering the function, and
decremented when exiting the function. If a modification is done on the
string parameter, then a new local string variable would be created
inside the function, and the original value of the parameter would be
copied to it (Copy-on-write operation). The change would be reflected on
the local string variable. This local string variable would be released
when execution of the function is over.<br />
When a string parameter is defined as a constant, compiler is sure
that the string cannot be modified inside the function, therefore, there
is no need for it to add codes for automatic incrementing and
decrementing of the reference-counter.<br />
When a string parameter is defined with var modifier, then it is sent
to the function as a reference to the actual data. When value of the
parameter is changed, then the original data would be copied to a new
memory location, and the modification would be applied to it in the new
memory location:<br />
<br />
<div>
<div class="syntaxhighlighter delphi" id="highlighter_394174">
<table border="0" cellpadding="0" cellspacing="0"><tbody>
<tr><td class="code"><div class="container">
<div class="line number1 index0 alt2">
<code class="delphi keyword">program</code> <code class="delphi plain">Test04;</code></div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="delphi keyword">procedure</code> <code class="delphi plain">Test(</code><code class="delphi keyword">var</code> <code class="delphi plain">Param: </code><code class="delphi keyword">string</code><code class="delphi plain">);</code></div>
<div class="line number4 index3 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number5 index4 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Param := Param + Param;</code></div>
<div class="line number6 index5 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number7 index6 alt2">
</div>
<div class="line number8 index7 alt1">
<code class="delphi keyword">var</code></div>
<div class="line number9 index8 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">A, B : </code><code class="delphi keyword">string</code><code class="delphi plain">;</code></div>
<div class="line number10 index9 alt1">
<code class="delphi keyword">begin</code></div>
<div class="line number11 index10 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">A := </code><code class="delphi string">'Test'</code><code class="delphi plain">;</code></div>
<div class="line number12 index11 alt1">
<code class="delphi spaces"> </code><code class="delphi plain">B := A;</code></div>
<div class="line number13 index12 alt2">
<code class="delphi spaces"> </code><code class="delphi plain">Test(A);</code></div>
<div class="line number14 index13 alt1">
<code class="delphi spaces"> </code><code class="delphi keyword">Writeln</code><code class="delphi plain">(A); </code><code class="delphi comments">//=> A is modifed and is now “TestTest”</code></div>
<div class="line number15 index14 alt2">
<code class="delphi spaces"> </code><code class="delphi keyword">Writeln</code><code class="delphi plain">(B); </code><code class="delphi comments">//=> B still refers to “Test”</code></div>
<div class="line number16 index15 alt1">
<code class="delphi keyword">end</code><code class="delphi plain">.</code><br />
</div>
</div>
</td></tr>
</tbody></table>
</div>
</div>
Now back to the original question:<br />
<br />
<br />
<h3>
When should we use Const modifier for parameters?</h3>
<ol>
<li>
<div>
Whenever you have a parameter of type array or record, and you do
not need to modify it inside your function; define it as a constant
parameter to prevent expensive copy operation of array elements every
time your function is called.</div>
</li>
<li>
<div>
Whenever you have a parameter of type string or dynamic array, and
you do not need to modify it inside your function, define it as a
constant parameter to prevent compiler from generating protecting code
to keep track of the reference-counter. When you do not use const
modifier in such cases, compiler would add a hidden try-finally block to
your function which contains code for keeping track of
reference-counter for your string or dynamic array parameter. This would
affect performance of your code. To read more about the impact of this,
and see how much code compiler would produce in that case, you can read
Eric Grange’s <a href="http://delphitools.info/2010/07/28/all-hail-the-const-parameters/" target="_blank">post on this</a>.</div>
</li>
</ol>
<b><span style="text-decoration: underline;">Important Note:</span></b>
For the second recommendation above to work, you have to set “String
format checking” in your project option to False. This option adds that
protective try-finally block to your functions whether you define your
string or dynamic array as const or not! This is for backward
compatibility with some old C++ Builder codes. If you are not a C++
Builder developer, or are a C++ Builder developer, but do not have such
old codes, then you MUST set this option to False in your projects. It
reduces performance of strings in Delphi.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlCYi9JcYHyjPmLUm1G4qILwM9GvhiI4CjKZeItWKGVLrJCQwBuydsMIE0Wojtar-X-0atWm6FRZ88TovusujVFj6GDU3OPQqvDQ3HMhpF87K-eVnq8dTNhycGopjGUu62mrX1Umh9F4/s1600/delphi_string_format_checking_thumb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="269" data-original-width="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlCYi9JcYHyjPmLUm1G4qILwM9GvhiI4CjKZeItWKGVLrJCQwBuydsMIE0Wojtar-X-0atWm6FRZ88TovusujVFj6GDU3OPQqvDQ3HMhpF87K-eVnq8dTNhycGopjGUu62mrX1Umh9F4/s1600/delphi_string_format_checking_thumb.png" /></a></div>
<br />
<br />
OK, I hope this post is clarifying function parameter modifiers and
their effects in Delphi programming; specially answering the question of
when to use Const modifier.<br />
<br />
Have Fun!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-73145740398365722942019-06-11T14:51:00.002-07:002019-06-11T14:51:44.949-07:00Five FireDac Image Demos and more in ImageEn v8.6.0<span style="font-size: small;">We have now released ImageEn 8.6.0, which overhauls database support, including five new database demos using FireDac.</span><br />
<br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><img border="0" src="https://www.imageen.com/info/Screenshots/TIEDBMultiBitmapDemo_sm.jpg" /></span></span><br />
<h3>
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><span style="color: brown;"><span style="font-size: medium;"><b><br />Other Enhancements </b></span></span></span></span></h3>
<span id="msg">1. New TIEAngleLayer to display and measure angles within an image</span><span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /><img border="0" src="https://www.imageen.com/info/Screenshots/AngleLayer.gif" /></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /></span></span><span id="msg">2. TImageEnMView and descendents now allow in-place editing, including file renaming in TImageEnFolderMView and layer renaming in TImageEnLayerMView</span><span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/InplaceEdit.gif" /></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /></span></span><span id="msg">3. Many improvements to database functionality, including use of TIEDBMultiBitmap to show multi-frame images at the current database cursor</span><span id="msg"></span><br />
<span id="msg"><br /></span><span id="msg">4. Improved TImageEnFolderMView, including new methods and TActions for to show properties, edit, print file, etc, more keyboard shortcuts, and complete "Windows Explorer"-style demo</span><span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/ExplorerDemo.jpg" /></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /></span></span><span id="msg">5. Enhancements to CaptureFromScreen, including specifying a window to capture</span><span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"></span></span><br />
<span style="color: black; font-family: "arial" , "helvetica"; font-size: x-small;"><span class="spnMessageText" id="msg"><br /><span style="font-size: xx-small;">Complete Change History: <a href="http://www.imageen.com/info/history.html" rel="noopener" target="_blank">http://www.imageen.com/info/history.html</a></span></span></span><br />
<br />
<br />
<span id="msg">ImageEn v8.6.0 is free if you purchased a license or extension after 10 June 2018. </span><br />
<br />
<span id="msg">Download via: <a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a><br />Other users can extend at: <a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a></span><br />
<br />
<span id="msg">More Info: </span><span id="msg"><a href="http://www.imageen.com/info/" target="_blank">http://www.imageen.com/info/</a></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-34960948901215538222019-04-22T19:00:00.000-07:002019-04-22T19:00:19.453-07:00ImageEn 8.5.0 now localized into 13 languages, plus improved brush painting and new FolderTree and FileListBox components<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="color: black; font-size: small;"><span class="spnMessageText" id="msg">ImageEn v8.5.0 has now been released.This update is free if you purchased a license or extension after 21 April 2018. </span></span></span><br />
<br />
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span class="spnMessageText" id="msg">Download via: <a href="http://www.imageen.com/support/downloadrequest.html" target="_blank">http://www.imageen.com/support/downloadrequest.html</a><br /><br />Other users can extend at: <a href="http://www.imageen.com/order/index.html#Extensions" target="_blank">http://www.imageen.com/order/index.html#Extensions</a></span></span></span><br />
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><br /><span style="color: black;"><span class="spnMessageText" id="msg"><span style="color: black;"><span class="spnMessageText" id="msg">More Info: <a href="http://www.imageen.com/info/" target="_blank">http://www.imageen.com/info/</a></span></span></span></span></span></span><br />
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="color: black; font-size: small;"><span class="spnMessageText" id="msg"><span style="color: black;"><span class="spnMessageText" id="msg"> </span></span><br /><br /><span style="color: brown;"><b>Top Ten Enhancements </b></span><br /><br />1.
Complete translations for 13 languages: Italian, French, German,
Russian, Chinese (Simplified and Traditional), Spanish, Portuguese,
Arabic, Japanese, Korean, Dutch and Turkish<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/Localization_sm.gif" /><br /><br />2. Many improvements to the BrushTool, including support for rotated and asymmetric brushes, and brushes containing transparency<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/CustomBrush.jpg" /><br /><br />3. Many optimization and new properties for JPEG 2000 support, including support for loading and saving very large images<br /><br />4.
Two new controls: TIEFolderTree, a Windows Explorer style shell
TreeView, and TIEFileListBox, a file listbox with native icon support<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/IEFolderAndFiles.gif" /><br /><br />5. TIELayerMView can now display a layer masking button allowing you to quickly set a layer as a mask<br /><br /><img border="0" src="https://www.imageen.com/info/Screenshots/IELayerMView8_5_0.gif" /><br /><br />6. TImageEnMView can now browse connected cameras and smart phones<br /><br />7. Many improvements to Portable Device functionality including retrieval of thumbnails<br /><br />8. New iemsFilenames display style for TImageEnMView<br /><br />9. TImageEnView ruler adds support for all standard unit types<br /><br />10. Stock Icons can be retrieved from Windows</span></span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1779715537807829708.post-6983904460321108652019-02-25T20:22:00.002-08:002019-02-25T20:22:39.406-08:00Improved Image Layer Editing and Styling for ImageEn Imaging Library<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Also, released today is our v8.3.0 update for ImageEn, the powerful
image display, editing and processing component suite for Delphi and C++
Builder.</span></span><br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><b> </b><span style="font-size: large;"><b><span style="color: #993300;">Top Ten Enhancements in ImageEn 8.3.0</span></b></span></span></span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">1.<strong> All layer types can now be used as masks</strong>, so you can easily create stylized text, gradient masks and shaped images</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;"> </span><img src="https://www.imageen.com/info/Screenshots/ShapeMaskSm.jpg" /></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;"><br /></span></span></span></span>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">2. <strong>“New Layer” dialog </strong>allows you to configure and style a layer to insert into your image</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;"> </span></span><span style="color: #993300;"><img src="https://www.imageen.com/info/Screenshots/LayerProperties.gif" /></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"> </span><span style="color: #993300;"><span style="color: black;">3. <strong>Many WIC improvements</strong>,
including support for auto-rotation of camera images and meta-data when
using Fast Loading via WIC. Also outputs codec information in TIOParams</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">4. Google’s <strong>WebP</strong> format is now supported via WIC</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">5. Updated to the latest Raw library version, and ImageEn now<strong> automatically loads Camera Raw files</strong> using built-in Windows codecs, if ImageEn’s DLL is not included</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">6. When outputting a series of images to AVI, you can now <strong>include an audio track</strong></span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">7. <strong>Styling improvements for TImageEnMView</strong> including, Explorer-style hover effect and a color set similar to Windows dark theme (without needing VCL theming)</span></span></span></span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;"><img src="https://www.imageen.com/info/Screenshots/DarkColors.jpg" /></span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">8. TImageEnLayerMView now allows <strong>layers to be excluded</strong>, and supports all keyboard shortcuts of TImageEnView</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><img src="https://www.imageen.com/info/Screenshots/IELayerMView8_3_0.gif" /></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span style="color: black;">9. New <strong>style options for layers</strong> include more gradient options, and fills can now be a different opacity from borders and text</span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span><span style="color: black;">10. A set of<strong> editing options</strong> allow more control over permitted behavior in TIEColorCurve</span></span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="color: #993300;"><span><span style="color: black;"> </span> </span></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span><img src="https://www.imageen.com/info/Screenshots/ColorCurve.gif" /></span></span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">
</span></span><div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><b><span style="color: #993300;"> </span></b></span></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><b><span style="color: #993300;"> </span></b></span></span></div>
<div>
<span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;"><b><span style="color: #993300;">More Information and Trial Downloads</span></b></span></span></div>
<div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><a href="http://www.imageen.com/info/">http://www.imageen.com/info/</a></span></span><br />
</div>
</div>
Unknownnoreply@blogger.com0