public override async Task SaveObject(string filename) { if (MipMaps == null || !MipMaps.Any()) { return; } ImageEngineFormat format; DomainMipMap mipMap = MipMaps.Where(mm => mm.ImageData != null && mm.ImageData.Length > 0).OrderByDescending(mm => mm.Width > mm.Height ? mm.Width : mm.Height).FirstOrDefault(); if (mipMap == null) { return; } MemoryStream memory = buildDdsImage(MipMaps.IndexOf(mipMap), out format); if (memory == null) { return; } ImageEngineImage ddsImage = new ImageEngineImage(memory); FileStream stream = new FileStream(filename, FileMode.Create); await Task.Run(() => ddsImage.Save(stream, format, MipHandling.KeepTopOnly)); stream.Close(); memory.Close(); }
BitmapSource GetWPFBitmap(MipMap mip, int maxDimension, bool ShowAlpha) { BitmapSource bmp = null; if (maxDimension != 0) { // Choose a mip of the correct size, if available. var sizedMip = MipMaps.Where(m => (m.Height <= maxDimension && m.Width <= maxDimension) || (m.Width <= maxDimension && m.Height <= maxDimension)); if (sizedMip.Any()) { var mip1 = sizedMip.First(); bmp = mip1.ToImage(); } else { double scale = (double)maxDimension / (Height > Width ? Height : Width); mip = ImageEngine.Resize(mip, scale); bmp = mip.ToImage(); } } else { bmp = mip.ToImage(); } if (!ShowAlpha) { bmp = new FormatConvertedBitmap(bmp, System.Windows.Media.PixelFormats.Bgr32, null, 0); } bmp.Freeze(); return(bmp); }
public override Stream GetObjectStream() { if (MipMaps == null || !MipMaps.Any()) { return(null); } ImageEngineFormat format; DomainMipMap mipMap = MipMaps.Where(mm => mm.ImageData != null && mm.ImageData.Length > 0).OrderByDescending(mm => mm.Width > mm.Height ? mm.Width : mm.Height).FirstOrDefault(); return(mipMap == null ? null : buildDdsImage(MipMaps.IndexOf(mipMap), out format)); }
/// <summary> /// Creates a WPF Bitmap from largest mipmap. /// Does NOT require that image remains alive. /// </summary> /// <param name="mergeAlpha">Only valid if maxDimension set. True = flattens alpha, directly affecting RGB.</param> /// <param name="maxDimension">Resizes image or uses a mipmap if available.</param> /// <returns>WPF bitmap of largest mipmap.</returns> public BitmapSource GetWPFBitmap(int maxDimension = 0, bool mergeAlpha = false) { MipMap mip = MipMaps[0]; if (maxDimension != 0) { // Choose a mip of the correct size, if available. var sizedMip = MipMaps.Where(m => (m.Height == maxDimension && m.Width <= maxDimension) || (m.Width == maxDimension && m.Height <= maxDimension)); if (sizedMip.Any()) { mip = sizedMip.First(); } else { double scale = maxDimension * 1f / (Height > Width ? Height : Width); mip = ImageEngine.Resize(mip, scale, mergeAlpha); } } mip.BaseImage.Freeze(); return(mip.BaseImage); }
/// <summary> /// Creates a GDI+ bitmap from largest mipmap. /// Does NOT require that image remains alive. /// </summary> /// <param name="ignoreAlpha">True = Previews image without alpha channel.</param> /// <param name="maxDimension">Largest size to display.</param> /// <param name="mergeAlpha">ONLY valid when maxDimension is set. True = flattens alpha, directly affecting RGB.</param> /// <returns>GDI+ bitmap of largest mipmap.</returns> public System.Drawing.Bitmap GetGDIBitmap(bool ignoreAlpha, bool mergeAlpha, int maxDimension = 0) { MipMap mip = MipMaps[0]; if (maxDimension != 0) { // Choose a mip of the correct size, if available. var sizedMip = MipMaps.Where(m => (m.Height == maxDimension && m.Width <= maxDimension) || (m.Width == maxDimension && m.Height <= maxDimension)); if (sizedMip.Any()) { mip = sizedMip.First(); } else { double scale = maxDimension * 1f / (Height > Width ? Height : Width); mip = ImageEngine.Resize(mip, scale, mergeAlpha); } } mip.BaseImage.Freeze(); return(UsefulThings.WinForms.Imaging.CreateBitmap(mip.BaseImage, ignoreAlpha)); }
public override async Task SaveObject(string filename, object configuration) { if (MipMaps == null || !MipMaps.Any()) { return; } DdsSaveConfig config = configuration as DdsSaveConfig ?? new DdsSaveConfig(FileFormat.Unknown, 0, 0, false, false); FileFormat format; DomainMipMap mipMap = MipMaps.Where(mm => mm.ImageData != null && mm.ImageData.Length > 0).OrderByDescending(mm => mm.Width > mm.Height ? mm.Width : mm.Height).FirstOrDefault(); if (mipMap == null) { return; } Stream memory = buildDdsImage(MipMaps.IndexOf(mipMap), out format); if (memory == null) { return; } DdsFile ddsImage = new DdsFile(memory); FileStream ddsStream = new FileStream(filename, FileMode.Create); config.FileFormat = format; await Task.Run(() => ddsImage.Save(ddsStream, config)); ddsStream.Close(); memory.Close(); }