diff --git a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Controls/DrawingArea/DrawingAreaControl.cs b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Controls/DrawingArea/DrawingAreaControl.cs index af37b350..91254bb1 100644 --- a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Controls/DrawingArea/DrawingAreaControl.cs +++ b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Controls/DrawingArea/DrawingAreaControl.cs @@ -54,7 +54,9 @@ namespace UniversalEditor.Controls.DrawingArea else { Console.WriteLine("new picture dimensions {0}x{1}", mvarPicture.Width, mvarPicture.Height); + Image image = mvarPicture.ToImage(); + e.Graphics.DrawImage(image, 0, 0); } } } diff --git a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/PictureObjectModelExtensions.cs b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/PictureObjectModelExtensions.cs index f5cea3bb..58ad6096 100644 --- a/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/PictureObjectModelExtensions.cs +++ b/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/PictureObjectModelExtensions.cs @@ -37,17 +37,21 @@ namespace UniversalEditor.Plugins.Multimedia.UserInterface /// The containing the image data to convert. public static Image ToImage(this PictureObjectModel pic) { - Image image = Image.Create(pic.Width, pic.Height); - Graphics g = Graphics.FromImage(image); - - for (int x = 0; x < pic.Width; x++) + byte[] input = pic.ToByteArray(); + byte[] output = new byte[input.Length]; + for (int i = 0; i < input.Length; i += 4) { - for (int y = 0; y < pic.Height; y++) - { - Color c = pic.GetPixel(x, y); - g.DrawLine(new Pen(c), x, y, x + 1, y + 1); - } + byte b = input[i]; + byte g = input[i + 1]; + byte r = input[i + 2]; + byte a = input[i + 3]; + + output[i] = r; + output[i + 1] = g; + output[i + 2] = b; + output[i + 3] = a; } + Image image = Image.FromBytes(output, pic.Width, pic.Height, pic.Stride); return image; } } diff --git a/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Picture/PictureObjectModel.cs b/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Picture/PictureObjectModel.cs index 2ae2cc39..a9297f3d 100644 --- a/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Picture/PictureObjectModel.cs +++ b/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Picture/PictureObjectModel.cs @@ -37,6 +37,20 @@ namespace UniversalEditor.ObjectModels.Multimedia.Picture private PositionVector2 lastAddedLocation = new PositionVector2(0, 0); + public int Stride + { + get + { + // thanks https://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple-of-4 + + // this calculation is CORRECT (at least on gdkpixbuf) so ***DON'T TOUCH IT*** + int bitsPerPixel = 32; // ((int)format & 0xff00) >> 8; + int bytesPerPixel = 4; // (bitsPerPixel + 7) / 8; // wtf??? + int stride = 4 * ((Width * bytesPerPixel + 3) / 4); + return stride; + } + } + public List ColorMap { get; } = new List(); public void SetPixel(Color color)