About IGDI+
The free open source library allows quick and easy implementations of complex GDI+ applications, in a natural Delphi-friendly code.
For example, to make this:
… you write code like this:
procedure TForm1.FormPaint(Sender: TObject);
var
AGraphics : IGPGraphics;
AFont : IGPFont;
ALeftTopCorner : TGPPointF;
ARect : TGPRectF;
ARect1 : TGPRectF;
APath : IGPGraphicsPath;begin
AGraphics := TGPGraphics.Create( Canvas );
AGraphics.SmoothingMode := SmoothingModeAntiAlias;
AGraphics.TextRenderingHint := TextRenderingHintAntiAlias;ALeftTopCorner := MakePointF( 20, 20 );
AFont := TGPFont.Create( ‘Microsoft Sans Serif’, 40, [ fsBold ] );
ARect := AGraphics.GetStringBoundingBoxF( ‘Welcome to IGDI+’, AFont, ALeftTopCorner );
ARect1 := GPInflateRectF( ARect, 10, 10 );// Draw a fancy rounded rectangle.
AGraphics.DrawRoundRectangleF(
TGPPen.Create( TGPLinearGradientBrush.Create( GPInflateRectF( ARect1, 2, 2 ), aclRed, aclBlue, LinearGradientModeVertical ), 4 ),
TGPPathGradientBrush.Create(
TGPGraphicsPath.Create().AddRoundRectangleF( ARect1, MakeSizeF( 20, 20 ) )
)
.SetInterpolationColorsArrays( [ aclGreen, aclCyan, aclYellow ], [ 0, 0.3, 1 ] )
.SetCenterPointF( MakePointF( 250, 50 ))
.SetFocusScales( 0.87, 0.2 ),
ARect1, MakeSizeF( 20, 20 ) );// Draw a text with semitransparent shadow.
AGraphics.DrawString( ‘Welcome to IGDI+’,
AFont,
MakePointF( 23, 23 ),
TGPSolidBrush.Create( MakeARGBColor( 50, aclBlack )) ).DrawString( ‘Welcome to IGDI+’,
AFont,
ALeftTopCorner,
TGPLinearGradientBrush.Create( ARect, aclRed, aclBlue, LinearGradientModeForwardDiagonal ));// Draw a closed curve.
AGraphics.DrawClosedCurveF( TGPPen.Create( aclRed, 3 ), TGPSolidBrush.Create( aclBlue ),
[
MakePointF( 60, 160 ),
MakePointF( 150, 180 ),
MakePointF( 200, 140 ),
MakePointF( 180, 220 ),
MakePointF( 120, 200 ),
MakePointF( 80, 260 )
] );// Draw a semitransparent star.
APath := TGPGraphicsPath.Create();
APath.AddLinesF(
[
MakePointF( 75, 0 ),
MakePointF( 100, 50 ),
MakePointF( 150, 50 ),
MakePointF( 112, 75 ),
MakePointF( 150, 150 ),
MakePointF( 75, 100 ),
MakePointF( 0, 150 ),
MakePointF( 37, 75 ),
MakePointF( 0, 50 ),
MakePointF( 50, 50 )
] );AGraphics.TranslateTransform( 420, 30 )
.FillPath(
TGPPathGradientBrush.Create( APath )
.SetCenterColor( MakeColor( 200, 255, 0, 0))
.SetSurroundColors(
[
MakeColor(80, 0, 0, 0),
MakeColor(80, 0, 255, 0),
MakeColor(80, 0, 0, 255),
MakeColor(80, 255, 255, 255),
MakeColor(80, 0, 0, 0),
MakeColor(80, 0, 255, 0),
MakeColor(80, 0, 0, 255),
MakeColor(80, 255, 255, 255),
MakeColor(80, 0, 0, 0),
MakeColor(80, 0, 255, 0)
] ),APath );// Draw rotated ellipse.
AGraphics.ResetTransform()
.TranslateTransform( 300, 160 )
.RotateTransform( 30 )
.DrawEllipseF(
TGPPen.Create( aclRed, 3 ),
TGPLinearGradientBrush.Create( MakePointF( 0, 0 ), MakePointF( 20, 20 ), aclYellow, aclGreen )
.SetWrapMode( WrapModeTileFlipX ),
0, 0, 200, 80 );
end;
var
AGraphics : IGPGraphics;
AFont : IGPFont;
ALeftTopCorner : TGPPointF;
ARect : TGPRectF;
ARect1 : TGPRectF;
APath : IGPGraphicsPath;begin
AGraphics := TGPGraphics.Create( Canvas );
AGraphics.SmoothingMode := SmoothingModeAntiAlias;
AGraphics.TextRenderingHint := TextRenderingHintAntiAlias;ALeftTopCorner := MakePointF( 20, 20 );
AFont := TGPFont.Create( ‘Microsoft Sans Serif’, 40, [ fsBold ] );
ARect := AGraphics.GetStringBoundingBoxF( ‘Welcome to IGDI+’, AFont, ALeftTopCorner );
ARect1 := GPInflateRectF( ARect, 10, 10 );// Draw a fancy rounded rectangle.
AGraphics.DrawRoundRectangleF(
TGPPen.Create( TGPLinearGradientBrush.Create( GPInflateRectF( ARect1, 2, 2 ), aclRed, aclBlue, LinearGradientModeVertical ), 4 ),
TGPPathGradientBrush.Create(
TGPGraphicsPath.Create().AddRoundRectangleF( ARect1, MakeSizeF( 20, 20 ) )
)
.SetInterpolationColorsArrays( [ aclGreen, aclCyan, aclYellow ], [ 0, 0.3, 1 ] )
.SetCenterPointF( MakePointF( 250, 50 ))
.SetFocusScales( 0.87, 0.2 ),
ARect1, MakeSizeF( 20, 20 ) );// Draw a text with semitransparent shadow.
AGraphics.DrawString( ‘Welcome to IGDI+’,
AFont,
MakePointF( 23, 23 ),
TGPSolidBrush.Create( MakeARGBColor( 50, aclBlack )) ).DrawString( ‘Welcome to IGDI+’,
AFont,
ALeftTopCorner,
TGPLinearGradientBrush.Create( ARect, aclRed, aclBlue, LinearGradientModeForwardDiagonal ));// Draw a closed curve.
AGraphics.DrawClosedCurveF( TGPPen.Create( aclRed, 3 ), TGPSolidBrush.Create( aclBlue ),
[
MakePointF( 60, 160 ),
MakePointF( 150, 180 ),
MakePointF( 200, 140 ),
MakePointF( 180, 220 ),
MakePointF( 120, 200 ),
MakePointF( 80, 260 )
] );// Draw a semitransparent star.
APath := TGPGraphicsPath.Create();
APath.AddLinesF(
[
MakePointF( 75, 0 ),
MakePointF( 100, 50 ),
MakePointF( 150, 50 ),
MakePointF( 112, 75 ),
MakePointF( 150, 150 ),
MakePointF( 75, 100 ),
MakePointF( 0, 150 ),
MakePointF( 37, 75 ),
MakePointF( 0, 50 ),
MakePointF( 50, 50 )
] );AGraphics.TranslateTransform( 420, 30 )
.FillPath(
TGPPathGradientBrush.Create( APath )
.SetCenterColor( MakeColor( 200, 255, 0, 0))
.SetSurroundColors(
[
MakeColor(80, 0, 0, 0),
MakeColor(80, 0, 255, 0),
MakeColor(80, 0, 0, 255),
MakeColor(80, 255, 255, 255),
MakeColor(80, 0, 0, 0),
MakeColor(80, 0, 255, 0),
MakeColor(80, 0, 0, 255),
MakeColor(80, 255, 255, 255),
MakeColor(80, 0, 0, 0),
MakeColor(80, 0, 255, 0)
] ),APath );// Draw rotated ellipse.
AGraphics.ResetTransform()
.TranslateTransform( 300, 160 )
.RotateTransform( 30 )
.DrawEllipseF(
TGPPen.Create( aclRed, 3 ),
TGPLinearGradientBrush.Create( MakePointF( 0, 0 ), MakePointF( 20, 20 ), aclYellow, aclGreen )
.SetWrapMode( WrapModeTileFlipX ),
0, 0, 200, 80 );
end;
Donate to the IGDI+ project
If you like the technology, and are willing to help us continue working on it, you can donate using the link bellow:
IGDI+ on SourceFourge.net
IGDI+ is now available on SourceForge: https://sourceforge.net/projects/igdiplus/ . An SVN repository is used. We are in process of adding all the source files.
You can access the SVN repository here: https://igdiplus.svn.sourceforge.net/svnroot/igdiplus directly or by using SVN :
svn co https://igdiplus.svn.sourceforge.net/svnroot/igdiplus igdiplus
Please let us know if you are interested in contributing to the project development so we can consider adding you to the list of project members.
Our component libraries come in 3 versions a VCL – Firemonkey version (for Delphi / C++ Builder / RAD Studio XE4 to 10.1 Berlin), an MFC compatible Visual C++ version, and a .NET 2.0 and 4.0 (4.5 and 4.6 compatible) supporting Visual Studio 2005 to 2015.
The RAD Studio version is a set of native VCL and Firemonkey components of which all include now the powerful Mitov Runtime.
The Visual C++ version is a set of native Visual C++ classes (components).
The NET 2.0 and 4.0 (4.5 and 4.6 compatible) version is a set of managed .NET components. The .NET version has the same performance as the native versions, and supports all the Microsoft .NET languages including Visual Basic, C#, J#, F# and C++/CLI.
Due to the unique architecture of the OpenWire platform, the components are implemented the same way in Managed .NET and native Windows (32 and 64 bit) environments. The code to control a component from VB.NET, C++/CLI, C#, and J#, Visual C++ MFC, Delphi, and C++ Builder is almost identical. This allows the developers to migrate and share code between the different environments thus significantly improving the productivity.
OpenWire Libraries: for fast, complex data stream processing with almost zero lines of code!
GDI+ Features
Here are some of the specifics:
- All GDI+ objects are accessed trough interfaces, with automatic release of resources.
- All data types are either Delphi objects, records or arrays.
- Most class member functions return pointer to the class allowing the next function to be called in the same line, thus simplifying the code.
- All callbacks are wrapped into events.
- The library directly integrates with TCanvas, TBitmap, and TIcon.
- Whenever classes have similar functionality they expose common interface for code reusability.
- All errors are handled trough exceptions for simplified error handling, and code reduction.
- The library also adds a number of functions missing in GDI+ such as rounded rectangles, and combined Pen and Brush drawing functions.
- All functions using pointers in C++ are redesigned to accept or return Delphi arrays.
- Here is example of relatively complex IGDI+ rendering with the corresponding source code. As it is obvious most of the shapes are rendered with a single expression.
GDI+: What’s New
New in Version 7.8.2.271 (released on 2018-11-12)
- Added Delphi 10.2 Tokyo support
- Added support for rectangle intersecting check
- Added GPMakeGrayScaleColor
- Added HexToUInt
New in Version 7.6.0.0 (released on 2015-04-18)
- Added XE8 support
- Added Save inage to TStream
- Added Create image from TStream
- Added Image to TBytes
- Added Create image from TBytes
New in Version 7.5.0.0 (released on 2014-11-18)
- Added XE7 support
New in Version 7.0.0.0 (released on 2014-04-21)
- Added XE5 and XE6 support
- Simplified image bits access
- Improved FireMonkey compatibility
- Updated to use the new Delphi TPointF record
New in Version 6.0 (released on 2013-06-12)
- Added XE4 support
- New mechanism for locking and accessing pixels in bitmaps trough IGPBitmapData locking object with automatic unlocking
- Improved performance with inlining
- Added new transforms
- Expanded MeasureCharacterRanges
- Discontinued support for anything older than Delphi 2009
New in Version 5.0.3 (released on 2012-10-10)
- Added support for Delphi / C++ Builder / RAD Studio XE3
- Improved Bitmap Data
- Improved Warp
- Enhanced MeasureCharacterRangesF
New in Version 5.0.2 (released on 2012-04-16)
- Added 64 bit support.
- Improved FireMonkey compatibility.
- Added the option to include the unit using a different name to allow multiple instances to be loaded in packages.
New in Version 5.0 (released on 2011-09-12)
- Added Delphi XE and XE2 support.
- Added FireMonkey compatibility.
- Some small changes and few new functions added in the IGPGraphics.
- Added the option to easily save and restore the transformations.
New in Version 2.2
- Minor improvements.
New in Version 2.1
- Minor improvements.
New in Version 2.0
- Added Delphi 2010 support.
- Number of small improvements.
New in Version 1.0
- This is the first official IGDI+ release.
( Click to view Larger images. )
IGDI+ EXAMPLES
[table id=25 /]IGDI+: FREQUENTLY ASKED QUESTIONS
Can I use IGDI+ in a non open source commercial application or component library?
Yes you can use IGDI+ in non open source applications and component libraries.
IGDI+ INSTALLERS
Firemonkey and VCL Installer:: IGDI+ 7.8.2.288 VCL and FireMonkey (Windows only) 32 and 64 bit support for XE8 to 10.2 Tokyo and 10.3 Rio
Updated on 2018-11-13, downloaded 2627 times.
DEMOS
These demos are executable after downloading. Also see: Demo source code downloads
Mitov License
If you do not have a custom licensing agreement with Mitov Software then the following license applies:
This software is provided ‘as-is’, without any express or
implied warranty. In no event will the author be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it
and redistribute it freely, subject to the following
restrictions:
1. The origin of this software must not be misrepresented,
you must not claim that you wrote the original software.
If you use this software in a product, an acknowledgment
in the product documentation would be appreciated but is
not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
See the Features Tab for more detail.
Also, we offer custom licensing and vertical development of the GDI+ . Please direct any questions about custom licensing to Boian Mitov ( mitov@mitov.com ).
[otw_is sidebar=otw-sidebar-1]