Atalasoft's .NET Imaging Philosophy
The Microsoft .NET platform offers
developers, both beginners and advanced, the ability to rapidly
create windows and web applications, using modern object oriented
design principles. The .NET Framework is an extensive
library, and third party component companies such as Atalasoft seek
to provide additional functionality where the .NET Framework falls
short. Atalasoft has years of professional experience in
imaging. Our .NET imaging components apply over one hundred
thousand man hours and years of imaging experience to offer easy to
use, high performance, and professionally supported imaging
solutions for .NET. Atalasoft DotImage was the first imaging
component developed from inception for the Microsoft .NET Platform,
and we are dedicated to continue providing additional imaging
components and technology for Microsoft .NET developers.
There are three ways to write a component
for .NET with imaging technology:
COM Wrapped which uses existing COM
objects with .NET wrappers to expose the COM methods and properties
in managed code. The advantage is that it's easy to port an
existing ActiveX/COM component to .NET, and unmanaged code can be
used for performance. The disadvantage is that the COM
components must be registered on the client system, it's impossible
to run more than one version on the same system, and there is a
performance hit in the COM Interop layer. This also leads to
the notorious "DLL Hell" concept which Microsoft has
eliminated in .NET. X-Copy deployment is not
possible. Some companies use this method, but claim to
support XCopy deployment by storing the COM objects in a .NET
resource, extracting and registering the object on the fly.
100% Managed simply means code is written using
only the features in the .NET Framework. As mentioned
earlier, the .NET Framework is quite extensive. However it
does have limitations, particularly with imaging. Using
managed memory for large objects, such as images, does lead to
performance problems. Also, it is not possible to use
'PInvoke' to call Win32 libraries, such as GDI, without requiring
'Full Trust' permissions to the assembly. The other problem
with this approach is that performance oriented algorithms, such as
image processing routines, can be very slow in comparison to the
same routine written in unmanaged code using C or C++.
Unmanaged/Managed Hybrid is a combination of
managed code that exposes the object model and interfaces, and
unmanaged code for the business logic. The advantage of this
approach is that unmanaged code can be used for performance
critical routines, such as image processing, and managed code can
used for developing the object model. The only disadvantage
with this approach is that full trust must be granted to these
assemblies for web deployment, and sometimes, an unmanaged DLL must
be copied alongside the managed .NET
assemblies. This is the approach Atalasoft has
taken as we believe it's the logical approach to provide
high performance imaging with an extensible and easy to
use object oriented design. Our approach does not
require an unmanaged DLL as we use C++ to compile mixed native and
managed code inside one managed assembly. Deployment is
exactly the same as with a fully managed assembly.
Avoiding GDI+ for Imaging
The .NET Framework uses GDI+ for drawing
text, lines, objects, and images. Since it's exposed in the .NET
Framework, it's much easier than using GDI and it also provides
additional functionality such as anti-aliasing. However the
limitation with GDI+ is that objects (and images) must be
rendered onto a 32-bit devices. It is not possible
to draw 1-bit black and white images or
8-bit grayscale or indexed images without converting it first
to 32-bit (which GDI+ does behind the scenes). This can
lead to very slow performance, especially when rendering
bitonal images. Atalasoft uses GDI to draw images, and
compliments GDI+ with a GDI drawing class.