我正在创建一个严重依赖图节点树的工具.当前的实现是用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对象可以完成所有操作).
我希望能够使用最好在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类吗?或者只能加载位图资源?
我有一个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) 在谷歌IO,工具团队表现出短暂的可能性来定义具有特定后缀矢量绘图资源(如ic_heart_ 48像素,然后将转换到所有必要的密度PNG格式的.xml).不幸的是,除了IO录音之外,我找不到任何关于此功能的文档.
这是Build Tools还是Android Studio的功能?假设它是Build Tools的一部分,它是否已经可用?我应该使用哪个版本?我必须明确启用该功能吗?
Google是否以Android xml矢量格式提供其素材图标?
我正在使用此处的说明,从Google使用新选项(2016年3月)将.svg文件导入drawable而不是.png文件.
我遇到的问题是文件导入为黑白,即使文件有很多颜色.
以下是Google Chrome浏览器读取的.svg文件的图片:

然后,Vector Asset Studio会像这样读取同一个文件:

在应用程序中,图像显示为黑色和白色.
知道为什么会这样吗?
.svg文件是在Adobe PhotoShop Creative Cloud上生成的,我在Mac上使用的是Android Studio 1.5.1.
谢谢!
编辑:添加了.svg文件的链接我正在使用这个问题.
我正在为inkscape(或任何基于矢量的编辑器)寻找一个插件,以查看窗口旁边带有SVG图形对象的代码.两个窗口都是动态的,这意味着如果您在图形视图中更改某些内容,它会自动更新代码,更改代码会自动更新图形对象.如果选择一个对象会突出显示相关代码也会很好.
我看过这里但看不到这样的东西:http://wiki.inkscape.org/wiki/index.php/Extension_repository
这样的事情是存在还是其他任何人对这样的事情感兴趣?
Flash/Flex的一个优点是你可以使用矢量图形(SVG),这是很好的.我做了一些搜索并遇到了这个Javascript矢量图形库.这是非常简单的东西,但它让我思考:是否有可能使用矢量图形文件,如SVG与Javascript/HTML或它只是无法完成或合理地完成?
我想知道是否有任何图形库支持一般图形的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之间的间距),并且最终一些显示器具有完全不同的像素布局.
我目前正在开发一种可视化工具,可以在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呢?这会是另一种方法吗?
vector-graphics ×10
android ×3
wpf ×3
c# ×2
graphics ×2
inkscape ×2
svg ×2
graph ×1
html ×1
javascript ×1
latex ×1
matplotlib ×1
performance ×1
subpixel ×1
xaml ×1