我有一个非常简单的用户控件,我想ScaleTransform在后面的代码中将属性绑定到DP,如下所示:
<UserControl
x:Name="RoundByRound"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
...
>
<Canvas x:Name="MyCanvas">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="{Binding ZoomTransform.ScaleX, ElementName=RoundByRound}"
ScaleY="{Binding ZoomTransform.ScaleY, ElementName=RoundByRound}"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform X="{Binding TranslateTransform.X, ElementName=RoundByRound}"
Y="{Binding TranslateTransform.Y, ElementName=RoundByRound}"/>
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
然后在后面的代码中执行此操作:
ZoomTransform.ScaleX = 3;
ZoomTransform.ScaleY = 3;
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误消息:
无法在对象“ ...”上设置属性,因为它处于只读状态。
所以我将其更改为:
var cloned = ZoomTransform.Clone();
cloned.ScaleX = 3;
cloned.ScaleY = 3;
ZoomTransform = cloned;
Run Code Online (Sandbox Code Playgroud)
但是现在实际上什么也没做...没有缩放比例应用到我的画布上。
然而
如果我删除上的绑定,ScaleTransform而只是将其作为一个空的XAML元素:
<ScaleTransform />
Run Code Online (Sandbox Code Playgroud)
然后在我的代码中执行以下操作:
(MyCanvas.RenderTransform as TransformGroup).Children[0] = new ScaleTransform(3, 3);
Run Code Online (Sandbox Code Playgroud)
有用!我得到了应用的规模
所以有两个问题:
Frozen是第一名?谢谢大家! …
我有以下要在xaml.cs中执行的XAML代码.
<RichTextBox.LayoutTransform>
<ScaleTransform ScaleX="{Binding ElementName=mySlider, Path=Value}"
ScaleY="{Binding ElementName=mySlider, Path=Value}"/>
</RichTextBox.LayoutTransform>
Run Code Online (Sandbox Code Playgroud)
基本上它将滑块绑定到richtextbox并执行缩放.
以下是我的尝试:
RichTextBox newtext = new RichTextBox();
ScaleTransform mytran = new ScaleTransform();
mytran.ScaleX = mySlider.Value;
mytran.ScaleY = mySlider.Value;
newtext.LayoutTransform = mytran;
Run Code Online (Sandbox Code Playgroud) 我正在使用GDI +进行自定义绘图.
通常情况下,如果我想要适合我正在绘制的窗口,我会计算出适当的比例,并且我按比例调整ScaleTransform的所有内容:
e.Graphics.ScaleTransform(ratio, ratio);
Run Code Online (Sandbox Code Playgroud)
ScaleTransform的问题在于它可以缩放包括笔划和笔刷在内的所有内容.
我可以缩放我绘制的所有像素坐标吗?每个线,矩形或路径基本上都是一系列点.所以我可以手动将所有这些点乘以比率,但是有一个简单的替代方案可以更加无缝地完成吗?
我克隆并使用负刻度翻转对象,这会导致我的单面朝向反转.我的问题是,我怎样才能翻转法线呢?
我不想使用material.side = THREE.DoubleSide,原因是:1)没有正常工作(一些阴影是从内部绘制的)和2)想保持尽可能多的性能.所以DoubleSide对我来说不是一个选择.
这是我的对象如何翻转.
mesh.scale.x = - scale_width;
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我有一系列CSS六边形.我想对不同的视口宽度应用CSS缩放变换,尽管在我的六边形形状中出现间隙.
这个问题在任何规模值的Firefox上都是最明显的.如果缩放到非整数值,它也会出现在Chrome中.Firefox还在:before和:after伪元素中显示了令人困惑的水平线,尽管这些线位于边框的中心,而不是任何形状的边缘.
我的标记和样式的简化版本如下,还有JS Fiddle.
HTML:
<div class="scale">
<div class="hex"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
样式:
.scale {
margin: 8em auto;
text-align: center;
-webkit-transform:scale(2.5, 2.5);
-moz-transform:scale(2.5, 2.5);
-ms-transform:scale(2.5, 2.5);
-o-transform:scale(2.5, 2.5);
transform:scale(2.5, 2.5);
}
.hex {
position: relative;
display: inline-block;
margin: 0 30px;
width: 60px;
height: 104px;
background-color: #000;
&:before, &:after {
position: absolute;
width: 0;
border: 1px solid transparent;
border-width: (52px) (30px);
content: "";
}
&:before {
border-right-color: #000;
right: 100%;
}
&:after {
border-left-color: #000;
left: …Run Code Online (Sandbox Code Playgroud) 我想用来自Stream的byte []图像制作缩略图。我有两个选择,DecodePixelWidth或ScaleTransform。
我的问题:
第一:
我更喜欢这种方法。它使用更多的内存,但似乎更快。但是,Idk为什么呢?是否使用Matrix并使用GPU进行工作?在这种情况下,我的客户可能会或可能无法尽快完成。
using (var stream = new MemoryStream(rasterizedPage.ImageData, false))
{
var bitmap = DocHelper.ConvertToBitmapImage(stream);
var transform = new ScaleTransform(0.1, 0.1);
var thumbnail = new WriteableBitmap(new TransformedBitmap(bitmap, transform));
byte[] byteImage = DocHelper.ConvertToBytes(thumbnail);
return byteImage;
}
Run Code Online (Sandbox Code Playgroud)
第二:
此方法使用较少的内存,但看起来速度较慢,并且图像模糊,但它们是缩略图,因此可以。不过,ScaleTransform更好吗?
using (var stream = new MemoryStream(rasterizedPage.ImageData, false))
{
byte[] byteImage;
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.DecodePixelWidth = 120;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
byteImage = DocHelper.ConvertToBytes(bitmap);
return byteImage;
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助。
我试图在我的HTML页面中缩放div.这个div包含很多canvas元素和其他div元素.基本上,此div充当页面中所有其他项的容器.使用Chrome"23.0.1271.95 m"和IOS6.0 safari,缩放后不会出现此div右侧和底部的项目.如果我调整窗口大小(或更改iPad上的方向),div会正确缩放并开始显示项目,但在一定大小后会再次消失.
这曾经适用于IOS 5.0和以前的chrome/safari版本.这是最新webkit版本中的错误吗?此外,是否有任何解决方法来避免这种行为?
我有以下动画:
CATransform3D scaleTransform = CATransform3DMakeScale(0.1,0.1, 1.0);
scaleAnimation.toValue = [NSValue valueWithCATransform3D:scaleTransform];
keyframeAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];;
Run Code Online (Sandbox Code Playgroud)
在哪里我缩小子视图.但我正试图做相反的事情.从子视图大小的0.01%开始,并转到子视图大小的100%.有谁知道我该怎么做?
好吧,我该如何开始呢?
我有一个应用程序,可以在屏幕上绘制一些形状(实际上是几千).它们有两种类型:矩形和直线.矩形有一个填充,行有一个Stroke + StrokeThickness.
我从两个文件中读取数据,一个是顶部数据,一个是底部数据.为了显示数据,我使用了一个带有Canvas的Viewbox(所以内容很好地拉伸).显示屏上的整个内容看起来像这样(这是正确的):

现在,同一个应用程序应该将此图像打印到打印机(用于测试我使用Windows附带的XPS打印机).
当我打印它(代码如下)时,它给出了相同的绘图顶部,但对于底部以下内容:

看起来所有"线"都缺失(矩形存在).为了显示底部,我使用-1/-1的比例变换(水平和垂直镜像).如果我将比例变换设置为1/1,我会得到以下结果:

现在我被卡住了.为什么所有的线条都会消失,但如果它没有镜像,它们就在那里.最外面的矩形也有点移位(这可能是由于数据,所以请不要关注它).
我用于在屏幕上绘图的代码是:
<Viewbox Grid.Row="0" RenderTransform="{Binding RenderTransform}" Margin="20" Name="VwBox">
<Viewbox.RenderTransformOrigin>
<Point X="0.5" Y="0.5"></Point>
</Viewbox.RenderTransformOrigin>
<ItemsControl ItemsSource="{Binding Drawing}" ItemTemplateSelector="{StaticResource DataTypeTemplateSelector}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="{Binding DrawingWidth}" Height="{Binding DrawingHeight}">
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Viewbox>
Run Code Online (Sandbox Code Playgroud)
对于打印我不依赖于XAMl,而是手动执行(如果我使用ContentPresenter则不会改变它):
if (gs is GerberLine)
{
ContentPresenter cp = new ContentPresenter();
var line = new Line();
Canvas.SetLeft(cp, gs.Left);
Canvas.SetTop(cp, gs.Top);
line.X1 = 0.0;
line.Y1 = 0.0;
line.X2 = gs.Width; …Run Code Online (Sandbox Code Playgroud) 将一个矩形的 x,y 坐标缩放到其他矩形坐标的过程非常简单,正如在此链接中更好地解释的那样
http://www.icoachmath.com/math_dictionary/scale_factor.html
如果我们有两个矩形,一个是 Maxwidth: 2000 和 Maxheight: 1000
和第二个大小为 MaxWidth 的矩形:4000 和 MaxHeight = 2000
所以将 rect1 的坐标转换为 rect2 的比例因子将是
对于 rect2 中的 x :(rect1 中的 x)*(Rect2 的 MaxWidth/Rect1 的 MaxWidht) 对于 rect2 中的 y:(rect1 中的 y)*(Rect2 的 MaxHeight/Rect1 的 MaxHeight)
但是什么时候应该是比例因子
对于一个矩形中心,origin(X,Y - 0,0) 将位于中心,如果您从中心向左走,x 和 y 也会有负值,那么 x 将为负,而在右侧则为Y 是正数,如果你上升,那么 y 将是正数,但如果你走到底部,那么 Y 将是负数,所以这个矩形的范围趋向于(-MaxWidth 到 +MaxWidth,-MaxHeight 到 +MaxHeight)
现在我们有第二个矩形,它的中心位于最左侧和最顶部位置(最左侧和最顶部 - 0,0),因为我们必须沿 x 轴向右移动,沿 y 轴向下移动,所以总会有x 和 y 的正值。
那么,如何计算将原点位于矩形中心的矩形坐标(MaxWidth/2,MaxHeight/2)转换为原点位于最左侧和最顶部位置的矩形的比例因子
scaletransform ×10
c# ×4
wpf ×3
.net ×1
animation ×1
binding ×1
c#-4.0 ×1
canvas ×1
css ×1
css3 ×1
data-binding ×1
decode ×1
flip ×1
gdi+ ×1
geometry ×1
graphics ×1
ios ×1
ios6 ×1
ipad ×1
line ×1
normals ×1
pixel ×1
scale ×1
scaling ×1
subview ×1
three.js ×1
transform ×1
webkit ×1
xaml ×1
xcode ×1