在Windows通用8.1中合并两个图像

时间:2015-09-16 08:53:46

标签: c# windows-phone-8.1 windows-8.1

我有1.png(150x150大小)和2.png(150x150大小)。我使用此代码制作一个stackpanel(310x150大小):

StackPanel mygrid = new StackPanel();
        mygrid.Orientation = Orientation.Horizontal;
        Image myimage1 = new Image();
        myimage1.Width = 150; myimage1.Height = 150;
        myimage1.Source = new BitmapImage(new Uri(@"ms-appx:///assets/1.png", UriKind.RelativeOrAbsolute));
        Image myimage2 = new Image();
        myimage2.Width = 150; myimage2.Height = 150;
        myimage2.Source = new BitmapImage(new Uri(@"ms-appx:///assets/2.png", UriKind.RelativeOrAbsolute));

        mygrid.Children.Add(myimage1);
        mygrid.Children.Add(myimage2);

然后我将此stackpanel转换为Image:

RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(mygrid, 310, 150);

我想将此图片保存在" ms-appx:///assets/3.png" (喜欢这个名字)并使用它。通过这种方式,我将两个图像合并为一个图像,但我无法将它们保存为3.png。我怎么能这样做?
如果这不是在一张图片中合并两张图片的好方法,是否可以帮助我?

更新:对不起,问题有问题,已被删除。我无法删除它,因为它有答案。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我认为你通常使用错误的方法来做到这一点。我会将2张图片加载到WriteableBitmap s中,然后将它们与WriteableBitmapEx library

混合

话虽如此,以下是如何将WriteableBitmap保存为png,取自here

    // Save the writeableBitmap object to JPG Image file 
    IStorageFile saveFile = todo;// insert your code for opening the file here

    IRandomAccessStream stream = await savefile.OpenAsync(FileAccessMode.ReadWrite);
    BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    // Get pixels of the WriteableBitmap object 
    Stream pixelStream = renderTargetBitmap.PixelBuffer.AsStream();
    byte[] pixels = new byte[pixelStream.Length];
    await pixelStream.ReadAsync(pixels, 0, pixels.Length);
    // Save the image file with jpg extension 
    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)writeableBitmap.PixelWidth, (uint)writeableBitmap.PixelHeight, 96.0, 96.0, pixels);
    await encoder.FlushAsync(); 

您尝试将图像另存为ms-appx:///assets/3.png,但您无法将图像保存在应用程序包中。

您需要将其保存到您的应用具有写入权限的位置。