我试图创建一个WPF自定义控件以显示该游戏树一去的游戏(见这里的是什么样子).我或多或少地让它在设置节点时工作,但我发现的一个问题是,当节点数量大于约时,它开始变得非常慢(在滚动查看器中) 30.由于go的平均游戏包括大约200次移动(更不用说玩家可能分叉的其他分支),这在任何逼真的游戏中都将是一个相当大的问题.
目前,我正在为游戏节点使用单独的用户控件(每个都是一个带有阴影位图效果的椭圆和一些文本注释)和树中弧线的简单线条,所有这些都绝对定位在画布中.
布局算法不是一个问题,因为这只需要在创建新分支时执行(否则可以直接在其父级下添加节点,因此不需要重新定位其他节点).主要的问题是对画布及其元素的任何操作都非常缓慢,大概只是因为它有多少个孩子.随着树的宽度和复杂性的增加,它显然会变慢,因为有更多的弧和节点.
我的问题:以这样的方式绘制像这样的大型/复杂结构的正确方法是什么,它不会随着它的增长而变得太慢?
编辑:这与我的其他问题有关.
编辑:这是我用于节点的用户控件的标记:
<UserControl x:Class="Go.UI.GameNodeMarker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Go.UI"
xmlns:wpftools="clr-namespace:WpfTools.Extensions;assembly=WpfTools"
x:Name="_This">
<UserControl.Resources>
<!-- Some brushes, resources, etc. are omitted -->
<Style x:Key="StoneStyle" TargetType="{x:Type Ellipse}">
<Setter Property="StrokeThickness" Value="0"/>
<Setter Property="BitmapEffect" Value="{StaticResource StoneEffect}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=_This, Path=StoneColour}" Value="Black">
<Setter Property="Fill" Value="{StaticResource BlackStoneBrush}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=_This, Path=StoneColour}" Value="White">
<Setter Property="Fill" Value="{StaticResource WhiteStoneBrush}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=_This, Path=IsEmpty}" Value="True">
<Setter Property="Fill" Value="{StaticResource EmptyBrush}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Ellipse Style="{StaticResource …
Run Code Online (Sandbox Code Playgroud) 基本上我想要拉伸较小的图像(即300x300到更大的图像,即500x500),没有空间或黑色背景.
我有一个位图(比方说宽度为500px,高度为500px).如何在该位图上绘制另一个(较小的)图像,以便占用整个位图?
我已经知道如何创建位图(即var bitmap = new Bitmap(500, 500);
)并获取图像 - 它可以从文件(即var image = Image.FromFile(...);
)加载或从其他来源获取.
我正在画画.我得到流畅的线条,我可以改变图纸的颜色.但我找不到如何将阴影应用于该线.
为了绘制它,我使用:
[path strokeWithBlendMode:[path blendMode] alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
我看到我可以使用,CGContextSetShadowWithColor()
但即使如此,我不知道如何使用它,因为这里是CGPath参考中所说的strokeWithBlendMode
:
此方法在绘制之前自动保存当前图形状态,并在完成后恢复该状态,因此您不必自己保存图形状态.
所以CGContextSetShadowWithColor()
如果我可以使用它,我真的不知道放在那里或其他任何东西.
问候
我需要有一个面板,我可以在其中绘制.我希望能够逐像素地绘制.
ps:我不需要其他基元的行/圆.pps:图形库并不重要,它可以是awt,swing,qt ......任何东西.我只想要一些通常由Bufferedimage表示的东西,或者像你设置单个像素颜色然后将其渲染到屏幕上的东西.
我需要在应用程序中添加典型的手指绘图.
(通常......选择颜色,擦除,厚度 - 就像你在每个应用程序中看到的那样.)
在这个时代,我很难相信我必须从头开始编程吗?
很难相信没有一个共同的解决方案吗?
我能找到的只是......
https://github.com/levinunnink/Smooth-Line-View
https://github.com/sumanthk2006/Smooth-Line-View-1(上述变体,但不在ARC下运行,遗憾的是演示未正确启动等)
回顾:这是"废弃的软件"或者可能是"挫折软件":)它没有运行,也没有ARC就绪.这是一个看似写得很好的课程,声称要做撤消,颜色,擦除等.它甚至有一个适当的代表来跟踪你的按钮状态.但它不起作用.
更新关于这个包装.事实上,如果你按摩它,效果很好.建议(i)丢弃示例应用程序文件.(ii)使用现代Xcode,在两个主文件上使用"转换为ARC项目"功能.有一个小轿车的问题,比如它应该使用awakeFromNib.如果你让它工作,它实际上做的一切,非常好.
SmoothLineView1中存在严重错误.为了清楚起见,它遭受了一些严重的错误 - 当你画画时,你会看到有一个"条纹"效果.
http://www.cdframeworks.com/product/brushengine
下面提到的是这篇受欢迎的文章:http:
//mobile.tutsplus.com/tutorials/iphone/ios-sdk_freehand-drawing/
我很欣赏基本概念非常简单,"从头开始"很容易.但这只是 - 荒谬 - 必须从零开始做一些如此平常的事情.我有没有一个坚实的包裹?
令人惊讶的是,上面的四个沙哑参考是唯一的东西.
有任何想法吗? 今天(2013年末)将绘图添加到iOS应用程序的最佳软件包是什么? 谢谢.
我一直试图想出一个优雅的算法来用SVG绘制它,它让我望而却步.
仅绘制线框非常简单.它只是从每个角落到右侧边缘的线条,目标点的间距相等.但填充它们比较棘手 - 我需要实际的多边形坐标来绘制填充的形状......不是吗?
一种方法是用一点数学来解决所有的段交叉点.这会给我所有交叉点的坐标,但是我怎么知道如何对四个坐标组进行分组,并且还要跟踪要填充哪些?
我有一些类似fabric.js的绘图应用程序(http://fabricjs.com/freedrawing/)
我想嵌入像Photoshop这样的模糊工具(http://www.demowolf.com/tutorials/demo.php?id=1503&series = 85&format = html)
这是我的模糊功能,但是当我试图改变颜色时它工作不正常它出错了你可以看到下面的截图...
function boxBlurCanvasRGBA( id, top_x, top_y, width, height, radius, iterations ){
if ( isNaN(radius) || radius < 1 ) return;
radius |= 0;
if ( isNaN(iterations) ) iterations = 1;
iterations |= 0;
if ( iterations > 3 ) iterations = 3;
if ( iterations < 1 ) iterations = 1;
var canvas = document.getElementById( 'paper' );
var context = canvas.getContext("2d");
var imageData;
try {
try {
imageData = context.getImageData( …
Run Code Online (Sandbox Code Playgroud) 我将开发一个记录按钮按下的应用程序,在那里我可以在SeekBar上回放该会话.每个事件都将从计时器的值加上时间戳.播放时,在每个录制的事件中,我都会播放声音.那部分应该不是问题.
现在,我想弄清楚的是我如何通过在每个事件发生的位置绘制红条来标记SeekBar上的时间戳.我希望在播放之前绘制红色条.
由于我还没有启动此应用程序,我目前没有任何代码.
我正在开发一个绘画程序,并且希望能够在没有抗锯齿的情况下缩放(缩放)我的JavaFX画布。
经过一些研究,我发现了:JavaFX ImageView无需进行任何平滑处理即可解释不同的解决方法。
我决定实施解决方法#4,该方法是从画布的快照中读取像素并将其放大并绘制到ImageView。但是,这不可行,因为性能确实很差,这在很小的画布(640,480)上画出中等快的笔划就可以证明:
我想我可以为笔划实现一个平滑算法,但是由于这种性能,我不确定在到达另一个停靠点之前需要花费多长时间。
我们会得到:canvas.setInterpolation(Interpolation.NEAREST_NEIGHBOUR)
吗?还有另一种方法可以实现更好的性能吗?
我的最后一招是回到Swing,实际上可以将其设置为禁用插值。
我刚刚阅读了有关硬件加速的内容,并观看了该视频。现在我有点困惑。
硬件加速意味着绘图操作由GPU执行,并且默认情况下在Android 3.0+上启用。如果启用了硬件加速,为什么默认情况下View
的图层类型为LAYER_TYPE_NONE?我认为应该是LAYER_TYPE_HARDWARE。
硬件层必须做一些事情来保持View
屏幕外的缓冲区。
因此,它看起来像常量View.LAYER_TYPE_NONE
,,View.LAYER_TYPE_HARDWARE
与View.LAYER_TYPE_SOFTWARE
硬件加速无关。它们是关于将其保留View
在屏幕外缓冲区中,以避免每次View
透明性和其他一些属性更改时都进行绘制。
android drawing hardware-acceleration android-canvas android-view
drawing ×10
android ×2
c# ×2
ios ×2
java ×2
algorithm ×1
android-view ×1
antialiasing ×1
baduk ×1
bitmap ×1
brush ×1
canvas ×1
events ×1
fractals ×1
graphics ×1
html5-canvas ×1
image ×1
javafx ×1
javascript ×1
jquery-tools ×1
paint ×1
performance ×1
pixel ×1
plot ×1
seekbar ×1
svg ×1
timestamp ×1
uibezierpath ×1
wpf ×1