• Contact Us 1.866.568.0129

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.

preload preload preload