This might help [discussion:579148]
↧
New Post: Is it possible to add text to writeablebitmap in metro style app
↧
New Post: How to Render String to WriteableBitmap?
This might help [discussion:579148]
↧
↧
Source code checked in, #112637
* Fixed regression issue with alpha blending for Blit for non-WinRT
↧
Updated Wiki: Home
Description
The WriteableBitmapEx library is a collection of extension methods for the WriteableBitmap. The WriteableBitmap class is available for Windows Phone, WPF, WinRT Windows Store XAML and Silverlight and allows the direct manipulation of a bitmap and could be used to generate fast procedural images by drawing directly to a bitmap. The WriteableBitmap API is very minimalistic and there's only the raw Pixels array for such operations. The WriteableBitmapEx library tries to compensate that with extensions methods that are easy to use like built in methods and offer GDI+ like functionality. The library extends the WriteableBitmap class with elementary and fast (2D drawing) functionality, conversion methods and functions to combine (blit) WriteableBitmaps.The extension methods are grouped into different CS files with a partial class. It is possible to include just a few methods by using the specific source CS files directly or all extension methods through the built library assembly.
Available as NuGet package.
WriteableBitmapEx was also ported to Windows Embedded.
See the Issue Tracker for a list of features that will be added in the future.
Features
GDI+ like drawing functionality for the WriteableBitmap.Support for Windows Phone Silverlight, desktop Silverlight, WPF and Windows WinRT XAML.
- Base
- Support for the Color structure (alpha premultiplication will be performed)
- Also overloads for faster int32 as color (assumed to be already alpha premultiplied)
- SetPixel method with various overloads
- GetPixel method to get the pixel color at a specified x, y coordinate
- Fast Clear methods
- Fast Clone method to copy a WriteableBitmap
- ForEach method to apply a given function to all pixels of the bitmap
- Transformation
- Crop method to extract a defined region
- Resize method with support for bilinear interpolation and nearest neighbor
- Rotate in 90° steps clockwise and any arbitrary angle
- Flip vertical and horizontal
- Shapes
- Fast line drawing algorithms including an anti-aliased algorithm
- Ellipse, polyline, quad, rectangle and triangle
- Cubic Beziér, Cardinal spline and closed curves
- Filled shapes
- Fast ellipse and rectangle fill method
- Triangle, quad, simple and complex polygons
- Beziér and Cardinal spline curves
- Blitting
- Different blend modes including alpha, additive, subtractive, multiply, mask and none
- Optimized fast path for non blended blitting
- Filtering
- Convolution, Blur
- Brightness, contrast, gamma adjustments
- Gray/brightness, invert
- Conversion
- Convert a WriteableBitmap to a byte array
- Create a WriteableBitmap from a byte array
- Create a WriteableBitmap easily from the application resource or content
- Create a WriteableBitmap from an any platform supported image stream
- Write a WriteableBitmap as a TGA image to a stream
- Separate extension method to save as a PNG image. Download here
- Windows Phone specific methods
- Save to media library and the camera roll
- External Code
Live samples
Samples that come with the WriteableBitmapEx source code in action:- The Shapes sample includes various scenarios where different shapes are drawn. By default a little demo is shown called "Breathing Flower". Basically different sized circles rotating around a center ring are generated. The sample also contains a static page showing some of the possible shapes.
- The Fill sample starts with a demo that animates the Cardinal spline's tension of the FillCurveClosed method, plus some random animated filled ellipses. The sample also contains a static page showing some of the possible filled shapes.
- The Curve sample demonstrates the Beziér and Cardinal spline methods. The sample starts with a demo animation that uses the Cardinal spline DrawCurve method to draw an artificial plant that grows procedurally. The other part of the sample is interactive and allows to draw and manipulate Beziér and Cardinal splines with the mouse. See this blog post for further information.
- The Blit sample combines WriteableBitmaps and shows a neat particle effect.
External resources:
Adam Kinney made a great sample that uses the WriteableBitmapEx library to dynamically apply a torn weathered effect to a photo.
Erik Klimczak from Calrity Consulting wrote a very good blog post about Advanced Animation: Animating 15,000 Visuals in Silverlight. He uses the WriteableBitmapEx to get the best performance.
Peter Bromberg wrote a great article called Silverlight 4 Martin Fractals with WriteableBitmapEx.
Performance!
The WriteableBitmapEx methods are much faster than the XAML Shape subclasses. For example, the WriteableBitmapEx line drawing approach is more than 20-30 times faster as the Silverlight Line element. So if a lot of shapes need to be drawn and anti-aliasing or other SIlverlight Shape properties are not needed, the WriteableBitmapEx methods are the right choice.Easy to use!
// Initialize the WriteableBitmap with size 512x512 and set it as source of an Image control WriteableBitmap writeableBmp = BitmapFactory.New(512, 512); ImageControl.Source = writeableBmp; writeableBmp.GetBitmapContext(); // Load an image from the calling Assembly's resources only by passing the relative path writeableBmp = BitmapFactory.New(1, 1).FromResource("Data/flower2.png"); // Clear the WriteableBitmap with white color writeableBmp.Clear(Colors.White); // Set the pixel at P(10, 13) to black writeableBmp.SetPixel(10, 13, Colors.Black); // Get the color of the pixel at P(30, 43) Color color = writeableBmp.GetPixel(30, 43); // Green line from P1(1, 2) to P2(30, 40) writeableBmp.DrawLine(1, 2, 30, 40, Colors.Green); // Line from P1(1, 2) to P2(30, 40) using the fastest draw line method with the color as integerint[] pixels = writeableBmp.Pixels; int w = writeableBmp.PixelWidth; int h = writeableBmp.PixelHeight; WriteableBitmapExtensions.DrawLine(pixels, w, h, 1, 2, 30, 40, myIntColor); // Blue anti-aliased line from P1(10, 20) to P2(50, 70) writeableBmp.DrawLineAa(10, 20, 50, 70, Colors.Blue); // Black triangle with the points P1(10, 5), P2(20, 40) and P3(30, 10) writeableBmp.DrawTriangle(10, 5, 20, 40, 30, 10, Colors.Black); // Red rectangle from the point P1(2, 4) that is 10px wide and 6px high writeableBmp.DrawRectangle(2, 4, 12, 10, Colors.Red); // Filled blue ellipse with the center point P1(2, 2) that is 8px wide and 5px high writeableBmp.FillEllipseCentered(2, 2, 8, 5, Colors.Blue); // Closed green polyline with P1(10, 5), P2(20, 40), P3(30, 30) and P4(7, 8)int[] p = newint[] { 10, 5, 20, 40, 30, 30, 7, 8, 10, 5 }; writeableBmp.DrawPolyline(p, Colors.Green); // Cubic Beziér curve from P1(5, 5) to P4(20, 7) with the control points P2(10, 15) and P3(15, 0) writeableBmp.DrawBezier(5, 5, 10, 15, 15, 0, 20, 7, Colors.Purple); // Cardinal spline through the points P1(10, 5), P2(20, 40) and P3(30, 30) with a tension of 0.5int[] pts = newint[] { 10, 5, 20, 40, 30, 30}; writeableBmp.DrawCurve(pts, 0.5, Colors.Yellow); // A filled Cardinal spline through the points P1(10, 5), P2(20, 40) and P3(30, 30) with a tension of 0.5 writeableBmp.FillCurveClosed(pts, 0.5, Colors.Green); // Blit a bitmap using the additive blend mode at P1(10, 10) writeableBmp.Blit(new Point(10, 10), bitmap, sourceRect, Colors.White, WriteableBitmapExtensions.BlendMode.Additive); // Override all pixels with a function that changes the color based on the coordinate writeableBmp.ForEach((x, y, color) => Color.FromArgb(color.A, (byte)(color.R / 2), (byte)(x * y), 100)); // Present the WriteableBitmap! writeableBmp.Invalidate(); // Take snapshotvar clone = writeableBmp.Clone(); // Save to a TGA image stream (file for example) writeableBmp.WriteTga(stream); // Crops the WriteableBitmap to a region starting at P1(5, 8) and 10px wide and 10px highvar cropped = writeableBmp.Crop(5, 8, 10, 10); // Rotates a copy of the WriteableBitmap 90 degress clockwise and returns the new copyvar rotated = writeableBmp.Rotate(90); // Flips a copy of the WriteableBitmap around the horizontal axis and returns the new copyvar flipped = writeableBmp.Flip(FlipMode.Horizontal); // Resizes the WriteableBitmap to 200px wide and 300px high using a bilinear interpolation methodvar resized = writeableBmp.Resize(200, 300, WriteableBitmapExtensions.Interpolation.Bilinear); // Invalidate writeableBmp.Dispose();
Additional Information
The WriteableBitmapEx library has its origin in several blog posts that also describe the implemenation and usage of some aspects in detail. The blog posts might be seen as the documentation.WriteableBitmap Extension Methods introduced the SetPixel methods.
Drawing Lines - Silverlight WriteableBitmap Extensions II provided the DrawLine methods.
Drawing Shapes - Silverlight WriteableBitmap Extensions III brought the shape functionality (ellipse, polyline, quad, rectangle, triangle).
Convert, Encode And Decode Silverlight WriteableBitmap Data came with the byte array conversion methods and hows how to encode / decode a WriteableBitmap to JPEG.
Blitting and Blending with Silverlight’s WriteableBitmap provided the Blit functions.
WriteableBitmapEx - WriteableBitmap extensions now on CodePlex announced this project.
Quick and Dirty Output of WriteableBitmap as TGA Image provided the original TgaWrite function.
Rounder, Faster, Better - WriteableBitmapEx 0.9.0.0 announced version 0.9.0.0 and gives some further information about the curve sample.
Let it ring - WriteableBitmapEx for Windows Phone introtuced the WriteableBitmapEx version for the Windows Phone and a sample.
Filled To The Bursting Point - WriteableBitmapEx 0.9.5.0 announced version 0.9.5.0, has some information about the new Fill methods and comes with a nice sample.
One Bitmap to Rule Them All - WriteableBitmapEx for WinRT Metro Style announced version 1.0.0.0 and provides some background about the WinRT Metro Style version.
Support it
Credits
Bill Reiss wrote the Blit methods.Nikola Mihaylov (Nokola) made some optimizations on the DrawLine and DrawRectangle methods, provided the original TgaWrite and the anti-aliased line drawing function.
Dr. Andrew Burnett-Thompson proposed the portability refactoring and WPF port.
Adam Kinney added some Blending modes to the Blit method.
Colin Eberhardt contributed the ForEach method.
Steve Hawley proposed an optimization of the Clear(Color) method.
Liam Bateman suggested the Color Keying BlendMode.
Mattias Fagerlund suggested the convolution method.
Wout de Zeeuw optimized the DrawLine method by 15%.
Lachlan Keown fixed a bug in the Blit alpha blending.
Your name here? We are always looking for valuable contributions.
René Schulte wrote all the rest and coordinates this project.
Ohloh statistics
↧
New Post: adjusting brightness and contrast
hmmm.. maybe I'm not doing it right when I was using integers to do it, I noticed that when contrast was set -ve, it went all the way white, thus resorted to use double. Actually I felt that double may incur more performance penalty, but parallelizing the codes could yield better performance, thus mitigating the cost of using FPU.. but I may be wrong. Could you enlighten me on this? :)
↧
↧
New Post: adjusting brightness and contrast
hmmm.. in the history log, didn't see the inclusion of Sepia function.. is it not good enough? how can it be improved? I know there are several algorithms for Sepia adjustments.. would you prefer them? :)
↧
New Post: adjusting brightness and contrast
Integer arithmetics is still the way to go for perf, especially with simple bit shifting and in loops. Please note that WBX supports a wide range of platforms like phone and their ARM chips.
The Sepia is just a color mod. I'd rather prefer a generic approach where one could pass the factors to be used for multiplying the brightness/gray. Anyway, we need to be careful not bloating the API as well. :)
Anyway, thanks for your help.
The Sepia is just a color mod. I'd rather prefer a generic approach where one could pass the factors to be used for multiplying the brightness/gray. Anyway, we need to be careful not bloating the API as well. :)
Anyway, thanks for your help.
↧
New Post: adjusting brightness and contrast
roger that.. thanks for enlightenment. :)
↧
New Post: adjusting brightness and contrast
glad to be able to contribute just a tiny little bit to this project. :)
↧
↧
New Post: adjusting brightness and contrast
BTW, do you have a real name and a homepage I can use to add your name to the Credits on the project's homepage? If not, I will just use your name here and link to the profile.
↧
Source code checked in, #113184
* 1st merge with fork from Andrew with some basic changes / fixes
↧
Source code checked in, #113191
* Added lots of contributions including bug fixes and DrawLine with variable thickness and penning support.
↧
New Post: adjusting brightness and contrast
My real name is John Ng San Ping. I'm from Singapore. Been a Windows C++ developer since 1999, thus you may notice my naming convention is pretty Hungarian (nHeight, nWeight). And recently influenced by Android/Java thus original function name is verb small case, noun camel, like Java. :P
As for putting my name in credits, thanks so much.. I'm very honoured.. but I frankly don't deserve any credits for it. I merely ripped off some image processing algorithms online. Impetus for doing it is mainly because I needed it in my work which involved some simple image processing on raw images which I used WPF's WIC to decode with the Microsoft camera codec. Was looking around for a way to do it without resorting to GDI+ like numerous articles did.. so your project helped to solve this big issue as GDI+ can't decode raw images (Canon's CR2 format) and WPF's BitmapImage can't do image processing like brightness, contrast and gamma. I did use the WPF's transform to do rotation before I came across your project. Just found that standardizing the whole image processing on WBX is neater, though I did recompile it for myself to add parallel for to speed up processing. Hope you don't mind. :)
As said, it's a tiny insignificant contribution. your changes to use integral values instead of floating point is impressive. have much to learn from you guys. :)
As for putting my name in credits, thanks so much.. I'm very honoured.. but I frankly don't deserve any credits for it. I merely ripped off some image processing algorithms online. Impetus for doing it is mainly because I needed it in my work which involved some simple image processing on raw images which I used WPF's WIC to decode with the Microsoft camera codec. Was looking around for a way to do it without resorting to GDI+ like numerous articles did.. so your project helped to solve this big issue as GDI+ can't decode raw images (Canon's CR2 format) and WPF's BitmapImage can't do image processing like brightness, contrast and gamma. I did use the WPF's transform to do rotation before I came across your project. Just found that standardizing the whole image processing on WBX is neater, though I did recompile it for myself to add parallel for to speed up processing. Hope you don't mind. :)
As said, it's a tiny insignificant contribution. your changes to use integral values instead of floating point is impressive. have much to learn from you guys. :)
↧
↧
Closed Feature: Add overloads for Point, Rect, ... [11647]
Add overloads for the shape methods that use Silverlight's Point and Rect structs and overloads for the Blit method that use only integer values.
Comments: Not needed
Comments: Not needed
↧
Edited Feature: DrawLine overload with Dot/Dash parameter [17049]
I would like the ability to call overloaded DrawLine and DrawLineAa functions with a parameter (e.g. enum?) to define a dotted or dashed line.
Comments: ** Comment from web user: teichgraf **
Comments: ** Comment from web user: teichgraf **
This was added in changeset 113191
DrawLinePenned. Just pass a bitmap as last parameter you would like to use as pen / stamp.
↧
Edited Issue: Add lineWidth overload for DrawLine and DrawLineAa [17046]
It would be very beneficial to pass lineWidth to overloaded methods for standard and Anti-Aliased lines.
Comments: ** Comment from web user: teichgraf **
Comments: ** Comment from web user: teichgraf **
This was added as overload to the DrawLineAa method in changeset 113191
↧
Updated Wiki: Home
Description
The WriteableBitmapEx library is a collection of extension methods for the WriteableBitmap. The WriteableBitmap class is available for Windows Phone, WPF, WinRT Windows Store XAML and Silverlight and allows the direct manipulation of a bitmap and could be used to generate fast procedural images by drawing directly to a bitmap. The WriteableBitmap API is very minimalistic and there's only the raw Pixels array for such operations. The WriteableBitmapEx library tries to compensate that with extensions methods that are easy to use like built in methods and offer GDI+ like functionality. The library extends the WriteableBitmap class with elementary and fast (2D drawing) functionality, conversion methods and functions to combine (blit) WriteableBitmaps.The extension methods are grouped into different CS files with a partial class. It is possible to include just a few methods by using the specific source CS files directly or all extension methods through the built library assembly.
Available as NuGet package.
WriteableBitmapEx was also ported to Windows Embedded.
See the Issue Tracker for a list of features that will be added in the future.
Features
GDI+ like drawing functionality for the WriteableBitmap.Support for Windows Phone Silverlight, desktop Silverlight, WPF and Windows WinRT XAML.
- Base
- Support for the Color structure (alpha premultiplication will be performed)
- Also overloads for faster int32 as color (assumed to be already alpha premultiplied)
- SetPixel method with various overloads
- GetPixel method to get the pixel color at a specified x, y coordinate
- Fast Clear methods
- Fast Clone method to copy a WriteableBitmap
- ForEach method to apply a given function to all pixels of the bitmap
- Transformation
- Crop method to extract a defined region
- Resize method with support for bilinear interpolation and nearest neighbor
- Rotate in 90° steps clockwise and any arbitrary angle
- Flip vertical and horizontal
- Shapes
- Fast line drawing algorithms including various anti-aliased algorithm
- Variable stroke thickness and penned / stamp lines
- Ellipse, polyline, quad, rectangle and triangle
- Cubic Beziér, Cardinal spline and closed curves
- Filled shapes
- Fast ellipse and rectangle fill method
- Triangle, quad, simple and complex polygons
- Beziér and Cardinal spline curves
- Blitting
- Different blend modes including alpha, additive, subtractive, multiply, mask and none
- Optimized fast path for non blended blitting
- Filtering
- Convolution, Blur
- Brightness, contrast, gamma adjustments
- Gray/brightness, invert
- Conversion
- Convert a WriteableBitmap to a byte array
- Create a WriteableBitmap from a byte array
- Create a WriteableBitmap easily from the application resource or content
- Create a WriteableBitmap from an any platform supported image stream
- Write a WriteableBitmap as a TGA image to a stream
- Separate extension method to save as a PNG image. Download here
- Windows Phone specific methods
- Save to media library and the camera roll
- External Code
Live samples
Samples that come with the WriteableBitmapEx source code in action:- The Shapes sample includes various scenarios where different shapes are drawn. By default a little demo is shown called "Breathing Flower". Basically different sized circles rotating around a center ring are generated. The sample also contains a static page showing some of the possible shapes.
- The Fill sample starts with a demo that animates the Cardinal spline's tension of the FillCurveClosed method, plus some random animated filled ellipses. The sample also contains a static page showing some of the possible filled shapes.
- The Curve sample demonstrates the Beziér and Cardinal spline methods. The sample starts with a demo animation that uses the Cardinal spline DrawCurve method to draw an artificial plant that grows procedurally. The other part of the sample is interactive and allows to draw and manipulate Beziér and Cardinal splines with the mouse. See this blog post for further information.
- The Blit sample combines WriteableBitmaps and shows a neat particle effect.
External resources:
Adam Kinney made a great sample that uses the WriteableBitmapEx library to dynamically apply a torn weathered effect to a photo.
Erik Klimczak from Calrity Consulting wrote a very good blog post about Advanced Animation: Animating 15,000 Visuals in Silverlight. He uses the WriteableBitmapEx to get the best performance.
Peter Bromberg wrote a great article called Silverlight 4 Martin Fractals with WriteableBitmapEx.
Performance!
The WriteableBitmapEx methods are much faster than the XAML Shape subclasses. For example, the WriteableBitmapEx line drawing approach is more than 20-30 times faster as the Silverlight Line element. So if a lot of shapes need to be drawn and anti-aliasing or other SIlverlight Shape properties are not needed, the WriteableBitmapEx methods are the right choice.Easy to use!
// Initialize the WriteableBitmap with size 512x512 and set it as source of an Image control WriteableBitmap writeableBmp = BitmapFactory.New(512, 512); ImageControl.Source = writeableBmp; writeableBmp.GetBitmapContext(); // Load an image from the calling Assembly's resources only by passing the relative path writeableBmp = BitmapFactory.New(1, 1).FromResource("Data/flower2.png"); // Clear the WriteableBitmap with white color writeableBmp.Clear(Colors.White); // Set the pixel at P(10, 13) to black writeableBmp.SetPixel(10, 13, Colors.Black); // Get the color of the pixel at P(30, 43) Color color = writeableBmp.GetPixel(30, 43); // Green line from P1(1, 2) to P2(30, 40) writeableBmp.DrawLine(1, 2, 30, 40, Colors.Green); // Line from P1(1, 2) to P2(30, 40) using the fastest draw line method with the color as integerint[] pixels = writeableBmp.Pixels; int w = writeableBmp.PixelWidth; int h = writeableBmp.PixelHeight; WriteableBitmapExtensions.DrawLine(pixels, w, h, 1, 2, 30, 40, myIntColor); // Blue anti-aliased line from P1(10, 20) to P2(50, 70) with a stroke thickness of 5 writeableBmp.DrawLineAa(10, 20, 50, 70, Colors.Blue, 5); // Black triangle with the points P1(10, 5), P2(20, 40) and P3(30, 10) writeableBmp.DrawTriangle(10, 5, 20, 40, 30, 10, Colors.Black); // Red rectangle from the point P1(2, 4) that is 10px wide and 6px high writeableBmp.DrawRectangle(2, 4, 12, 10, Colors.Red); // Filled blue ellipse with the center point P1(2, 2) that is 8px wide and 5px high writeableBmp.FillEllipseCentered(2, 2, 8, 5, Colors.Blue); // Closed green polyline with P1(10, 5), P2(20, 40), P3(30, 30) and P4(7, 8)int[] p = newint[] { 10, 5, 20, 40, 30, 30, 7, 8, 10, 5 }; writeableBmp.DrawPolyline(p, Colors.Green); // Cubic Beziér curve from P1(5, 5) to P4(20, 7) with the control points P2(10, 15) and P3(15, 0) writeableBmp.DrawBezier(5, 5, 10, 15, 15, 0, 20, 7, Colors.Purple); // Cardinal spline through the points P1(10, 5), P2(20, 40) and P3(30, 30) with a tension of 0.5int[] pts = newint[] { 10, 5, 20, 40, 30, 30}; writeableBmp.DrawCurve(pts, 0.5, Colors.Yellow); // A filled Cardinal spline through the points P1(10, 5), P2(20, 40) and P3(30, 30) with a tension of 0.5 writeableBmp.FillCurveClosed(pts, 0.5, Colors.Green); // Blit a bitmap using the additive blend mode at P1(10, 10) writeableBmp.Blit(new Point(10, 10), bitmap, sourceRect, Colors.White, WriteableBitmapExtensions.BlendMode.Additive); // Override all pixels with a function that changes the color based on the coordinate writeableBmp.ForEach((x, y, color) => Color.FromArgb(color.A, (byte)(color.R / 2), (byte)(x * y), 100)); // Present the WriteableBitmap! writeableBmp.Invalidate(); // Take snapshotvar clone = writeableBmp.Clone(); // Save to a TGA image stream (file for example) writeableBmp.WriteTga(stream); // Crops the WriteableBitmap to a region starting at P1(5, 8) and 10px wide and 10px highvar cropped = writeableBmp.Crop(5, 8, 10, 10); // Rotates a copy of the WriteableBitmap 90 degress clockwise and returns the new copyvar rotated = writeableBmp.Rotate(90); // Flips a copy of the WriteableBitmap around the horizontal axis and returns the new copyvar flipped = writeableBmp.Flip(FlipMode.Horizontal); // Resizes the WriteableBitmap to 200px wide and 300px high using a bilinear interpolation methodvar resized = writeableBmp.Resize(200, 300, WriteableBitmapExtensions.Interpolation.Bilinear); // Invalidate writeableBmp.Dispose();
Additional Information
The WriteableBitmapEx library has its origin in several blog posts that also describe the implemenation and usage of some aspects in detail. The blog posts might be seen as the documentation.WriteableBitmap Extension Methods introduced the SetPixel methods.
Drawing Lines - Silverlight WriteableBitmap Extensions II provided the DrawLine methods.
Drawing Shapes - Silverlight WriteableBitmap Extensions III brought the shape functionality (ellipse, polyline, quad, rectangle, triangle).
Convert, Encode And Decode Silverlight WriteableBitmap Data came with the byte array conversion methods and hows how to encode / decode a WriteableBitmap to JPEG.
Blitting and Blending with Silverlight’s WriteableBitmap provided the Blit functions.
WriteableBitmapEx - WriteableBitmap extensions now on CodePlex announced this project.
Quick and Dirty Output of WriteableBitmap as TGA Image provided the original TgaWrite function.
Rounder, Faster, Better - WriteableBitmapEx 0.9.0.0 announced version 0.9.0.0 and gives some further information about the curve sample.
Let it ring - WriteableBitmapEx for Windows Phone introtuced the WriteableBitmapEx version for the Windows Phone and a sample.
Filled To The Bursting Point - WriteableBitmapEx 0.9.5.0 announced version 0.9.5.0, has some information about the new Fill methods and comes with a nice sample.
One Bitmap to Rule Them All - WriteableBitmapEx for WinRT Metro Style announced version 1.0.0.0 and provides some background about the WinRT Metro Style version.
Support it
Credits
Rene Schulte started this project, maintains it and provided most of the code.Dr. Andrew Burnett-Thompson proposed the portability refactoring, WPF port and much more beneficial functions.
Nikola Mihaylov (Nokola) made some optimizations on the DrawLine and DrawRectangle methods, provided the original TgaWrite and the anti-aliased line drawing function.
Bill Reiss wrote the Blit methods.
Adam Kinney added some Blending modes to the Blit method.
Colin Eberhardt contributed the ForEach method.
Steve Hawley proposed an optimization of the Clear(Color) method.
Liam Bateman suggested the Color Keying BlendMode.
Mattias Fagerlund suggested the convolution method.
Wout de Zeeuw optimized the DrawLine method by 15%.
Lachlan Keown fixed a bug in the Blit alpha blending.
John Ng San Ping added the AdjustBrightness, Contrast and Gray methods
Your name here? We are always looking for valuable contributions.
René Schulte wrote all the rest and coordinates this project.
Ohloh statistics
↧
↧
Source code checked in, #113194
* Added support for alpha blended filled shapes and adapted the FillSample for WPF
↧
Source code checked in, #113195
* Improved DrawLinePenned and DrawLineWu by removing unused parameter
↧
Edited Feature: Add Thickness param for shapes [11438]
Add Thickness param to methods drawing shapes.
Comments: ** Comment from web user: teichgraf **
Comments: ** Comment from web user: teichgraf **
We added a DrawLineAa with thickness overload. You could modify the other shape functions based on that.
↧