标签: scaletransform

WPF为什么我的ScaleTransform被冻结,如何绑定到它?

我有一个非常简单的用户控件,我想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)

有用!我得到了应用的规模

所以有两个问题:

  1. 为什么我的Transform Frozen是第一名?
  2. 为什么克隆转换时绑定不起作用?

谢谢大家! …

data-binding wpf scaletransform

5
推荐指数
1
解决办法
2270
查看次数

将RichTextBox绑定到C#中的Slider控件

我有以下要在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)

c# wpf xaml binding scaletransform

5
推荐指数
1
解决办法
1134
查看次数

Graphics.ScaleTransform的替代品

我正在使用GDI +进行自定义绘图.

通常情况下,如果我想要适合我正在绘制的窗口,我会计算出适当的比例,并且我按比例调整ScaleTransform的所有内容:

e.Graphics.ScaleTransform(ratio, ratio);
Run Code Online (Sandbox Code Playgroud)

ScaleTransform的问题在于它可以缩放包括笔划和笔刷在内的所有内容.

我可以缩放我绘制的所有像素坐标吗?每个线,矩形或路径基本上都是一系列点.所以我可以手动将所有这些点乘以比率,但是有一个简单的替代方案可以更加无缝地完成吗?

c# graphics gdi+ scaletransform

5
推荐指数
1
解决办法
5014
查看次数

Three.js:如何在负标度后翻转法线

我克隆并使用负刻度翻转对象,这会导致我的单面朝向反转.我的问题是,我怎样才能翻转法线呢?

我不想使用material.side = THREE.DoubleSide,原因是:1)没有正常工作(一些阴影是从内部绘制的)和2)想保持尽可能多的性能.所以DoubleSide对我来说不是一个选择.

这是我的对象如何翻转.

mesh.scale.x = - scale_width;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

flip normals scaletransform three.js

5
推荐指数
2
解决办法
6041
查看次数

缩放导致CSS形状之间的间隙

我有一系列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)

css transform scale css3 scaletransform

5
推荐指数
1
解决办法
1080
查看次数

DecodePixelWidth Vs和有什么区别?ScaleTransform?

我想用来自Stream的byte []图像制作缩略图。我有两个选择,DecodePixelWidth或ScaleTransform。

我的问题:

  1. 哪一个更快?
  2. 哪种方法更合适?
  3. 他们每个人都做什么?
  4. 哪个使用更少的内存/ CPU?

第一:

我更喜欢这种方法。它使用更多的内存,但似乎更快。但是,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)

谢谢您的帮助。

.net c# decode pixel scaletransform

5
推荐指数
1
解决办法
1555
查看次数

webkit变换规模制作项目消失

我试图在我的HTML页面中缩放div.这个div包含很多canvas元素和其他div元素.基本上,此div充当页面中所有其他项的容器.使用Chrome"23.0.1271.95 m"和IOS6.0 safari,缩放后不会出现此div右侧和底部的项目.如果我调整窗口大小(或更改iPad上的方向),div会正确缩放并开始显示项目,但在一定大小后会再次消失.

这曾经适用于IOS 5.0和以前的chrome/safari版本.这是最新webkit版本中的错误吗?此外,是否有任何解决方法来避免这种行为?

webkit ipad scaletransform webkit-transform ios6

4
推荐指数
1
解决办法
1735
查看次数

ios CATransform3DMakeScale扩展动画

我有以下动画:

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%.有谁知道我该怎么做?

xcode animation subview scaletransform ios

3
推荐指数
1
解决办法
5529
查看次数

绘制直线与矩形时的奇怪行为

好吧,我该如何开始呢?

我有一个应用程序,可以在屏幕上绘制一些形状(实际上是几千).它们有两种类型:矩形和直线.矩形有一个填充,行有一个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)

c# wpf canvas line scaletransform

3
推荐指数
1
解决办法
844
查看次数

计算将一个矩形的 point1(x,y 坐标) 转换为不同矩形的 Point1(x,y) 的缩放因子

将一个矩形的 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)转换为原点位于最左侧和最顶部位置的矩形的比例因子

scaling geometry transformation scaletransform c#-4.0

3
推荐指数
1
解决办法
1721
查看次数