如何以简单的方式获得具有透明度的图像?

时间:2015-09-24 05:33:21

标签: wpf image f#

玩F#和wpf到目前为止,我喜欢它。不是图形设计师,虽然我正在寻找一种偷偷摸摸的方式来实现以下目标:

我有一张图片的轮廓(来自png - > svg - > xps - > xaml路径)。如果我使用手动图形程序,我现在可能花费半天或更长时间来获得以下变化:轮廓部分填充[黑色,白色],部分填充透明度,然后保存这些图像并在我的代码中使用它们。但是......我觉得应该可以使用轮廓的xaml路径以及几行代码来实现相同而不需要太多点击...

为了澄清这个想法,这里的示例图片只是为了表明我的想法:

输入:

Outline of one of the pictures

现在,背景和图片的某些部分需要透明,其他一些部分要填充白色或黑色,轮廓,白色或黑色。如上所述,我找到了一种从图片中获取xaml路径对象的方法,现在我寻找一种很酷的方式将图片“变换”为4,5种变体。它会得到回报,因为有一些类似的图片需要相同的处理。

当我拥有它们时,每个实例都将成为我的代码中的Image实例,该实例将位于Canvas内。

很酷的想法如何完成它,任何人?

我目前使用的基本代码框架是这样的:

let visual renderer w h =
    let dvis = System.Windows.Media.DrawingVisual()
    let d = dvis.RenderOpen()
    renderer d w h
    d.Close()
    let bmp = Windows.Media.Imaging.RenderTargetBitmap(int w, int h, 96.0,96.0,Windows.Media.PixelFormats.Pbgra32)
    let img = System.Windows.Controls.Image()
    bmp.Render(dvis)
    img.Source <- bmp
    img

let redCircle w h =
    visual 
        (fun d w h -> 
            let r = (min w h)/2. * 0.9
            d.DrawEllipse(System.Windows.Media.Brushes.Red,null,System.Windows.Point(w/2.0,h/2.0),r,r)
        ) w h

...就像在redCircle函数中一样,我会在lambda中渲染图像的路径......

0 个答案:

没有答案