public void Dispose() { if (BaseImage != null) { BaseImage.Dispose(); } if (IDImage != null) { IDImage.Dispose(); } if (CollisionMaskA != null) { CollisionMaskA.Dispose(); } if (CollisionMaskB != null) { CollisionMaskB.Dispose(); } if (InternalImage != null) { InternalImage.Dispose(); } if (CollectiveImage != null) { CollectiveImage.Dispose(); } }
public void Reload(string PaletteDataPath = null) { if (BaseImage != null) { BaseImage.Reload(PaletteDataPath); } if (IDImage != null) { IDImage.Reload(); } if (InternalImage != null) { InternalImage.Reload(); } if (CollisionMaskA != null) { CollisionMaskA.Reload(DrawCollisionMaskA()); } if (CollisionMaskB != null) { CollisionMaskB.Reload(DrawCollisionMaskB()); } if (CollectiveImage != null) { CollectiveImage.Reload(CreateCollectiveImage()); } }
public Bitmap CreateCollectiveImage() { int bitmap_width = 16 * 5; int bitmap_height = 16384; Bitmap bitmap = new Bitmap(bitmap_width, bitmap_height); using (Graphics gfx = Graphics.FromImage(bitmap)) { if (BaseImage != null) { gfx.DrawImage(BaseImage.ToBitmap(), new Point(0, 0)); } if (IDImage != null) { gfx.DrawImage(IDImage.ToBitmap(), new Point(16, 0)); } if (CollisionMaskA != null) { gfx.DrawImage(CollisionMaskA.ToBitmap(), new Point(32, 0)); } if (CollisionMaskB != null) { gfx.DrawImage(CollisionMaskB.ToBitmap(), new Point(48, 0)); } if (InternalImage != null) { gfx.DrawImage(InternalImage.ToBitmap(), new Point(64, 0)); } } return(bitmap); }
//read http://stackoverflow.com/questions/6216094/implementing-the-apng-render-function public Tuple<Fctl, Fdat> EncodeFrame(Ihdr ihdr, InternalImage img, uint sequenceNumber, InternalImage lastImage, Rational delay) { //Rectangle bb = CalculateDifferenceBoundingBox(img, lastImage); //float approxns = ApproximateCompressionSize(img, lastImage, bb, ApngDisposeOperation.None, ApngBlendOperation.Source); //float approxns = ApproximateCompressionSize(img, lastImage, bb, ApngDisposeOperation., ApngBlendOperation.Source); return new Tuple<Fctl, Fdat>(new Fctl(ihdr, sequenceNumber, 0, 0, img.Ihdr.Width, img.Ihdr.Height, delay, ApngDisposeOperation.None, ApngBlendOperation.Source), new Fdat(sequenceNumber+1, Encode(img, lastImage), true)); }
protected byte[] Encode(InternalImage img, InternalImage lastImg) { Int64 stride = img.RgbData.Length / img.Ihdr.Height; var pngData = new byte[img.Ihdr.Height * (stride + 1)]; for(Int64 y = 0; y < img.Ihdr.Height; ++y) { Int64 rowStart = y * (stride + 1); pngData[rowStart] = 0x00; //Filter None Array.Copy(img.RgbData, y * stride, pngData, rowStart + 1, stride); } return pngData; }
public Tuple<Fctl, Idat> EncodeImage(Ihdr ihdr, InternalImage img, uint sequenceNumber) { return new Tuple<Fctl, Idat>(new Fctl(ihdr, sequenceNumber, 0, 0, img.Ihdr.Width, img.Ihdr.Height, new Rational(0, 0), ApngDisposeOperation.None, ApngBlendOperation.Source), new Idat(Encode(img, null), true)); }
public Plte CreatePalette(InternalImage img) { throw new NotImplementedException(); }
internal BackgroundImage(RenderingContext context, Image.SourceType imageSource, object imageValue, string mimeType) { m_internalImage = new InternalImage(imageSource, mimeType, imageValue, context); }
public InternalImage Decode(Object obj, Ihdr ihdr, byte[] usePalette = null) { if(obj == null) throw new ArgumentNullException("obj"); var bitmap = obj as Bitmap; if(bitmap == null) throw new NotSupportedException(GetType().Name + " is unable to decode object type " + obj.GetType().Name); #region sanity if(bitmap.Width != ihdr.Width) throw new ArgumentException("bitmap.Width should be " + ihdr.Width + " is " + bitmap.Width, "obj"); if(bitmap.Height != ihdr.Height) throw new ArgumentException("bitmap.Height should be " + ihdr.Height + " is " + bitmap.Height, "obj"); #endregion var intImage = new InternalImage(ihdr); switch (ihdr.ColorType) { case ColorType.Palette: if(usePalette == null) intImage.RgbPaletteData = CreatePalette(bitmap); intImage.RgbData = CreateImageIndices(bitmap, ihdr, usePalette ?? intImage.RgbPaletteData); break; case ColorType.Grayscale: throw new NotImplementedException(); break; case ColorType.Rgb: intImage.RgbData =CreateImageRgb(bitmap, ihdr); break; case ColorType.GrayscaleWithAlpha: throw new NotImplementedException(); break; case ColorType.Rgba: throw new NotImplementedException(); break; default: throw new ArgumentOutOfRangeException(); } #region unable to process //switch(bitmap.PixelFormat) // { // case PixelFormat.Indexed: // throw new NotImplementedException(); // break; // case PixelFormat.Format1bppIndexed: // throw new NotImplementedException(); // break; // case PixelFormat.Format4bppIndexed: // throw new NotImplementedException(); // break; // case PixelFormat.Format8bppIndexed: // throw new NotImplementedException(); // break; // case PixelFormat.Format16bppGrayScale: // throw new NotImplementedException(); // break; // case PixelFormat.Format16bppRgb555: // throw new NotImplementedException(); // break; // case PixelFormat.Format16bppRgb565: // throw new NotImplementedException(); // break; // case PixelFormat.Format16bppArgb1555: // throw new NotImplementedException(); // break; // case PixelFormat.Format24bppRgb: // throw new NotImplementedException(); // break; // case PixelFormat.Format32bppRgb: // if(ihdr.ColorType == ColorType.Rgb && ihdr.BitDepth == BitDepth._8) // ; // else // throw new NotImplementedException(); // break; // case PixelFormat.Format32bppArgb: // throw new NotImplementedException(); // break; // //case PixelFormat.Format32bppPArgb: // //case PixelFormat.Alpha: // //case PixelFormat.PAlpha: // //case PixelFormat.Extended: // //case PixelFormat.Canonical: // //case PixelFormat.Undefined: // //case PixelFormat.Format48bppRgb: // //case PixelFormat.Format64bppArgb: // //case PixelFormat.Format64bppPArgb: // //case PixelFormat.Max: // //case PixelFormat.Gdi: // default: // throw new UnsupportedPixelTypeException("Image pixel format unsupported: " + bitmap.PixelFormat); // } #endregion return intImage; }
public Tuple<Fctl, Fdat> EncodeFrame(Ihdr ihdr, InternalImage img, uint sequenceNumber, InternalImage lastImage, Rational delay) { return new Tuple<Fctl, Fdat>(new Fctl(ihdr, sequenceNumber, 0, 0, img.Ihdr.Width, img.Ihdr.Height, delay, ApngDisposeOperation.None, ApngBlendOperation.Source), new Fdat(sequenceNumber+1, Encode(img, lastImage), true)); }