Dirty solution to add DDS BC7 write/read support to .NET using PAINT.NET plugin.
This project is pdn-ddsfiletype-plus plugin for Paint.NET and last open-sourced version of Paint.NET 3.36.7 stripped down to necessary elements.
using PaintDotNet;
using DdsFileTypePlus;
void Main()
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Value = 0;
Surface surface = DdsFile.Load(@"S:\testDDS\BC7.dds"); //get Paint.NET Surface
System.Drawing.Bitmap bitmap = surface.CreateAliasedBitmap(); // convert to Bitmap
MagickImage magickImage = new MagickImage(bitmap); // convert to Magick.NET MagickImage
NetVips.Image vipsImage;
using (var stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
vipsImage = Image.NewFromBuffer(stream.ToArray()); // convert to NetVips Image
}
// do something with images
System.Drawing.Bitmap processedBitmap = magickImage.ToBitmap();
Surface processedSurface = Surface.CopyFromBitmap(processedBitmap);
System.IO.FileStream fileStream = new System.IO.FileStream(
@"S:\testDDS\result.dds",
System.IO.FileMode.Create);
DdsFile.Save(
fileStream,
DdsFileFormat.BC7,
DdsErrorMetric.Perceptual,
BC7CompressionMode.Fast,
cubeMap: true,
generateMipMaps: true,
ResamplingAlgorithm.Bilinear,
processedSurface,
ProgressChanged);
fileStream.Close();
}
private void ProgressChanged(object sender, ProgressEventArgs e)
{
progressBar1.Value = (int) Math.Round(e.Percent);
}