by Anonymous » 04 Feb 2025, 22:56
Ich habe eine Methode, die einen Unschärfeneffekt auf ein Bitmapimage anwendet, und ich möchte dieses Bild (als PNG) auf der Festplatte speichern. Ich habe alle möglichen Tricks ausprobiert, damit es funktioniert Dann speichern Sie das, was super klobig ist, aber es funktioniert. Ein SurfaceBrush visuell über den Compositor , aber ich dachte, ich könnte es konvertieren und dann speichern, da die Softwarebitmap eine Möglichkeit zum Schreiben auf die Festplatte bietet. Es wäre jedoch vorzuziehen, direkt ohne Konvertierungsschritt zu sparen. Dies ist eine der Konvertermethoden, die ich ausprobiert habe, aber es funktioniert nicht: < /p>
Code: Select all
static async Task ConvertBitmapImageToSoftwareBitmapAsync(BitmapImage bitmapImage)
{
try
{
if (bitmapImage.PixelWidth == 0 || bitmapImage.PixelHeight == 0)
{
Debug.WriteLine($"[WARNING] The width and height are not valid.");
Debugger.Break();
}
InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, memoryStream);
// Create dummy SoftwareBitmap (since BitmapImage doesn't have direct pixel access)
SoftwareBitmap softwareBitmap = new SoftwareBitmap(BitmapPixelFormat.Bgra8, bitmapImage.PixelWidth, bitmapImage.PixelHeight, BitmapAlphaMode.Premultiplied);
encoder.SetSoftwareBitmap(softwareBitmap);
await encoder.FlushAsync();
return softwareBitmap;
}
catch (Exception ex)
{
Debug.WriteLine($"[ERROR] {ex.Message}");
return null;
}
}
Ich habe eine Methode, die einen Unschärfeneffekt auf ein Bitmapimage anwendet, und ich möchte dieses Bild (als PNG) auf der Festplatte speichern. Ich habe alle möglichen Tricks ausprobiert, damit es funktioniert Dann speichern Sie das, was super klobig ist, aber es funktioniert. Ein SurfaceBrush visuell über den Compositor , aber ich dachte, ich könnte es konvertieren und dann speichern, da die Softwarebitmap eine Möglichkeit zum Schreiben auf die Festplatte bietet. Es wäre jedoch vorzuziehen, direkt ohne Konvertierungsschritt zu sparen. Dies ist eine der Konvertermethoden, die ich ausprobiert habe, aber es funktioniert nicht: < /p>
[code] static async Task ConvertBitmapImageToSoftwareBitmapAsync(BitmapImage bitmapImage)
{
try
{
if (bitmapImage.PixelWidth == 0 || bitmapImage.PixelHeight == 0)
{
Debug.WriteLine($"[WARNING] The width and height are not valid.");
Debugger.Break();
}
InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, memoryStream);
// Create dummy SoftwareBitmap (since BitmapImage doesn't have direct pixel access)
SoftwareBitmap softwareBitmap = new SoftwareBitmap(BitmapPixelFormat.Bgra8, bitmapImage.PixelWidth, bitmapImage.PixelHeight, BitmapAlphaMode.Premultiplied);
encoder.SetSoftwareBitmap(softwareBitmap);
await encoder.FlushAsync();
return softwareBitmap;
}
catch (Exception ex)
{
Debug.WriteLine($"[ERROR] {ex.Message}");
return null;
}
}
[/code]