The code:
private void Foo(Canvas canvas) {
What I need:
Render canvas with a transparent background for the image, then copy it to the clipboard (Quit simple? Not really)
Problem:
When pasting, I get an ugly image with a black background
Solution 1:
canvas.Background = new SolidColorBrush(Colors.White);
Not. This thick one doesn't work, the canvas
background will not change in the next renderBitmap.Render(canvas);
Instead, I should use a timer, give WPF some time to change the background, and then display it in the tick event of this timer. It works, but unfortunately the contents of the canvas
larger than its size ... so that a white background can cover only part of it, yet an ugly result. (By the way, does anyone know why it takes some time to change the background? I thought it needed to be changed immediately)
Did I do something wrong? How can I get a white background ex-transparent image on the clipboard?
What's more, I noticed that the background of some PNG images remains white if you paste it into the mspaint.exe file, which does not support the alpha channel, and some others turn black.
Is there something like, say, alternative color
that is used as the background if the place where you insert the image does not support the alpha channel? Can we do this?
Now I have displayed another BitmapSource
with white content, if there is a way to combine it with renderBitmap as a background, the problem is solved, but I do not know how ...
int dWidth = (int)size.Width; int dHeight = (int)size.Height; int dStride = dWidth * 4; byte[] pixels = new byte[dHeight * dStride]; for (int i = 0; i < pixels.Length; i++) { pixels[i] = 0xFF; } BitmapSource bg = BitmapSource.Create( dWidth, dHeight, 96, 96, PixelFormats.Pbgra32, null, pixels, dStride );