标签: vector-graphics

如何在WPF中尽可能高效地绘制图形

我正在创建一个严重依赖图节点树的工具.当前的实现是用Java完成的,我将它移植到C#上的通用代码库中,因此它可以被各种渲染实现使用,也因为我想使用WPF的强大功能来实现用户友好的界面.

浏览了一天之后,我遇到了各种方法来通过WPF绘制矢量图形.

这个人讲的是WPF开发人员可以选择的不同层.因为我想首先使用WPF PURELY进行渲染,所以我想开发"Visual Layer".

然后我遇到了类似的东西: DrawingVisual, GeometryDrawing, FrameworkElement/UIElement/Shapes

所以,我对所有不同的实现有点不知所措,这些实现最终以完全不同的方式完成相同的操作.

Graph-Node库已经用它的所有逻辑(包括碰撞检测和用鼠标拖动)移植到C#.因为它是用图形渲染器(如XNA,SlimDX,OpenTK等)制作的,所以在性能方面实现WPF渲染器的最佳方式(如同,它将绘制图形库告诉它的任何东西)画画?

基本上,生成的WPF控件充当画布,但它必须是SUPER轻量级,除了为我提供绘制我的圆圈,线条和其他形状的方法之外,没有任何简洁的WPF功能:)

编辑:

我基本上想知道:要走的路是什么?我是否将Canvas扩展为我的图形的"主机",然后添加我的UIElement的自定义实现?或者我可以拥有一个可以绘制一切的课程(例如,一个超级超级超级图形).就像在GDI中覆盖OnPaint或在Java中覆盖Paint-method(它使Graphics对象可以完成所有操作).

c# wpf graphics graph vector-graphics

20
推荐指数
2
解决办法
2万
查看次数

使用XAML文件作为矢量图像源

我希望能够使用最好在XAML中定义的矢量图形作为图像控件的源,就像我现在可以像PNG一样使用光栅图像.这样我就可以轻松地在位图和矢量图像之间进行混合和匹配,如下所示:

<StackPanel>
    <Image Source="Images/Namespace.png"/>
    <Image Source="Images/Module.xaml"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

Module.xaml很可能将<DrawingImage>其作为根元素而不是<UserControl>.

实际上,我真正想要的是这个,所以我的ViewModel可以自行选择光栅或矢量图像:

<Image Source="{Binding ImageUri}"/>
Run Code Online (Sandbox Code Playgroud)

这可能吗?Image.Source可以从给定的URI加载XAML类吗?或者只能加载位图资源?

c# wpf xaml vector-graphics

19
推荐指数
2
解决办法
2万
查看次数

matplotlib - plot将文本输出为路径,无法通过Inkscape转换为LaTeX

我有一个matplotlib情节,我想以矢量图形格式保存,然后在LaTeX文档中使用.

我通常保存它matplotlib,用Inkscape打开它并将其保存为PDF + LaTeX(省略PDF格式的文本并创建LaTeX文件).这也可以通过以下方式实现:

inkscape  -D -z --file=in.pdf --export-pdf=out.pdf --export-latex
Run Code Online (Sandbox Code Playgroud)

但是,对于下面的图,文本实际上是一系列路径.每个字母都是独立的,导致Inkscape无法保存不同的tex文件.

为什么文本没有呈现为文本而是作为下面代码中的路径?注意使用usetex=True并没有什么区别.

谢谢.

from scipy.stats import lognorm
from matplotlib import rc

#rc('text', usetex=True)
rc('font', family='Times New Roman')
rc('font', size='20.0')

mu    = 1.7
sigma = 1.1
n, bins, patches = plt.hist(data, bins=10000, facecolor='k', edgecolor='k', 
                            normed=True, alpha=0.3, histtype='stepfilled',
                            label='\\noindent Empirical data')
y = lognorm.pdf( bins, sigma, scale=np.exp(mu))
plt.xlim( (0,50) )
plt.plot(bins, y, '-', color='k', linewidth=2, label='\\noindent Lognormal curve')
plt.ylim( (0, .15) )
plt.xlabel('my x …
Run Code Online (Sandbox Code Playgroud)

latex matplotlib vector-graphics inkscape

19
推荐指数
2
解决办法
6114
查看次数

矢量drawables自动转换为pngs

在谷歌IO,工具团队表现出短暂的可能性来定义具有特定后缀矢量绘图资源(如ic_heart_ 48像素,然后将转换到所有必要的密度PNG格式的.xml).不幸的是,除了IO录音之外,我找不到任何关于此功能的文档.

这是Build Tools还是Android Studio的功能?假设它是Build Tools的一部分,它是否已经可用?我应该使用哪个版本?我必须明确启用该功能吗?

Google是否以Android xml矢量格式提供其素材图标?

android vector-graphics android-build android-icons

19
推荐指数
2
解决办法
9969
查看次数

Vector Asset Studio将彩色.svg文件导入为黑色和白色

我正在使用此处的说明,从Google使用新选项(2016年3月)将.svg文件导入drawable而不是.png文件.

我遇到的问题是文件导入为黑白,即使文件有很多颜色.

以下是Google Chrome浏览器读取的.svg文件的图片: 在此输入图像描述

然后,Vector Asset Studio会像这样读取同一个文件: 在此输入图像描述 在此输入图像描述

在应用程序中,图像显示为黑色和白色.

知道为什么会这样吗?

.svg文件是在Adobe PhotoShop Creative Cloud上生成的,我在Mac上使用的是Android Studio 1.5.1.

谢谢!

编辑:添加了.svg文件的链接我正在使用这个问题.

svg android vector-graphics android-studio

19
推荐指数
2
解决办法
1万
查看次数

如何在Android中找出图形矩阵的比例

因此,在Android中进行捏缩放似乎相当容易- 但是我还希望能够在超出界限时快速恢复图像,并且这样做最合理的事情似乎是做像当比例<1时,重新缩放为1.但是,我似乎找不到从图形矩阵中检索比例的好方法.

一种可能的解决方案可能是使用矩阵的mapPoints函数映射一个点并查看它最终的位置,但除了狡猾之外,这对我来说只是感觉丑陋和间接​​.有没有更好的解决方案从Android图形矩阵中检索比例?

graphics android vector-graphics

18
推荐指数
1
解决办法
8655
查看次数

inkscape插件实时编辑svg代码

我正在为inkscape(或任何基于矢量的编辑器)寻找一个插件,以查看窗口旁边带有SVG图形对象的代码.两个窗口都是动态的,这意味着如果您在图形视图中更改某些内容,它会自动更新代码,更改代码会自动更新图形对象.如果选择一个对象会突出显示相关代码也会很好.

我看过这里但看不到这样的东西:http://wiki.inkscape.org/wiki/index.php/Extension_repository

这样的事情是存在还是其他任何人对这样的事情感兴趣?

svg vector-graphics inkscape

18
推荐指数
2
解决办法
1万
查看次数

Javascript中的矢量图形?

Flash/Flex的一个优点是你可以使用矢量图形(SVG),这是很好的.我做了一些搜索并遇到了这个Javascript矢量图形库.这是非常简单的东西,但它让我思考:是否有可能使用矢量图形文件,如SVG与Javascript/HTML或它只是无法完成或合理地完成?

html javascript vector-graphics

17
推荐指数
2
解决办法
2万
查看次数

用于图形的RGB子像素渲染?

我想知道是否有任何图形库支持一般图形的RGB子像素渲染(如ClearType),而不仅仅是文本.这将使水平分辨率几乎增加三倍,并将图形放在第三像素x位置.

虽然我认为这会非常有用,但我在互联网上找不到相关内容,除了以下内容:

例如,是否存在实现此目的的库,或者是否正在努力将这样的东西带到开罗图书馆?


更新:

我特指渲染技术,考虑到当前的LCD屏幕使用不同颜色的子像素.要制作白点,请将所有子像素设置为"打开"或255.白线将是几个子像素在彼此的顶部:

...RGB...
...RGB...
...RGB...
...RGB...
...RGB...
...111...
Run Code Online (Sandbox Code Playgroud)

(其中,.是全黑的子象素,和R,G或者B被完全点亮红,绿,或蓝的子像素).因为我们的眼睛无法分辨子像素,所以它们混合在一起形成一条白线.然而,我也可以从以下方面做出白线:

....GBR..
....GBR..
....GBR..
....GBR..
....GBR..
....111..
Run Code Online (Sandbox Code Playgroud)

请注意,它非常清晰,但位于x = 1 1/3像素处.对于传统的渲染技术而言,这是不可能的,而这种渲染技 例如,这里R= 70%点亮,r= 30%点亮.我没有计算出数学,这只是让你明白了:

...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...777333...
Run Code Online (Sandbox Code Playgroud)

另一个例子是斜率,你可以做a)全像素,b)抗锯齿,或c)子像素渲染:

a)  RGB......  b)  RGB......  c)  RGB......
    RGB......      RGBrgb...      .GBR.....
    ...RGB...      rgbRGB...      ..BRG....
    ...RGB...      ...RGB...      ...RGB...
    ...RGB...      ...RGBrgb      ....GBR..
    ......RGB      ...rgbRGB      .....BRG.
    ......RGB      ......RGB      ......RGB
Run Code Online (Sandbox Code Playgroud)

再次注意,这只是一个粗略的例子,可以给你一般的想法,但是你会发现a)是锯齿状或锯齿状的,b)模糊不清,c)就像你在LCD上得到它一样清晰.

对于字体显示(Windows上的ClearType和FreeType中的子像素渲染)的实际实现具有更复杂的算法.它们考虑到各个子像素相互渗透或发光,它们保留了总的颜色强度或能量.它们还考虑到子像素间距不均匀(R和G之间的间隔,或G和B(在像素中)可能小于B和R之间的间距),并且最终一些显示器具有完全不同的像素布局.

vector-graphics subpixel

17
推荐指数
1
解决办法
3572
查看次数

WPF性能:在画布上显示数千个路径/形状

我目前正在开发一种可视化工具,可以在Canvas上绘制路径,椭圆等WPF形状.我已经实现了一种虚拟化方法,其中Shapes被动态销毁和创建,具体取决于它们的可见性.然而,即使只有600个椭圆可见,该应用程序似乎很难.

我有什么选择加快速度?我正在考虑将分组的Shapes(一次说500个)渲染为透明位图,并且只在Canvas上绘制这些.但我不知道这是不是一个好主意......从我收集的内容来看,这需要某种黑客攻击,如果应用了转换:

     VisualBrush shapeBrush = new VisualBrush(shape);  

     DrawingVisual drawingVisual = new DrawingVisual();  
     DrawingContext drawingContext = drawingVisual.RenderOpen();  

     using (drawingContext)  
     {  
        drawingContext.DrawRectangle(shapeBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight)));  
     }  
     renderTarget.Render(drawingVisual);  
Run Code Online (Sandbox Code Playgroud)

那么使用一个大的WritableBitmap呢?这会是另一种方法吗?

wpf performance ui-virtualization vector-graphics

16
推荐指数
1
解决办法
8017
查看次数