我想编写一个函数来缩小图像的大小以适应指定的边界.例如,我想调整2000x2333图像的大小以适应1280x800.必须保持纵横比.我想出了以下算法:
NSSize mysize = [self pixelSize]; // just to get the size of the original image
int neww, newh = 0;
float thumbratio = width / height; // width and height are maximum thumbnail's bounds
float imgratio = mysize.width / mysize.height;
if (imgratio > thumbratio)
{
float scale = mysize.width / width;
newh = round(mysize.height / scale);
neww = width;
}
else
{
float scale = mysize.height / height;
neww = round(mysize.width / scale);
newh = height;
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作.好吧......好像.但后来我试图将1280x1024图像调整为1280x800边界,它给了我1280x1024的结果(显然不适合1280x800).
有没有人有任何想法这个算法应该如何工作?
我试图让一个多边形完全从屏幕左侧移动,穿过屏幕,然后完全离开屏幕右侧,然后再返回.
我已经开始工作了.但是,出于某种原因,只要左边距变为负值,动画就会突然减慢.一旦左边距变为正,它就会再次加速.
为什么会这样?我怎么能阻止它?
这是完整的代码,用于演示:
<Window x:Class="Geometry.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<PathGeometry x:Key="MyGeometry">
<PathGeometry.Figures>
<PathFigure>
<PathFigure.Segments>
<LineSegment Point="0.30,0" />
<LineSegment Point="0.70,1" />
<LineSegment Point="0.40,1" />
<LineSegment Point="0,0" />
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
<Storyboard x:Key="MovingAnimation">
<ThicknessAnimationUsingKeyFrames RepeatBehavior="1:0:0" FillBehavior="HoldEnd" Storyboard.TargetName="_path" Storyboard.TargetProperty="Margin" >
<DiscreteThicknessKeyFrame KeyTime="0:0:0" Value="-2.0,0,0,0" />
<LinearThicknessKeyFrame KeyTime="0:0:10" Value="1.0,0,0,0" />
<LinearThicknessKeyFrame KeyTime="0:0:20" Value="-2.0,0,0,0" />
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard Storyboard="{StaticResource MovingAnimation}" ></BeginStoryboard>
</EventTrigger>
</Window.Triggers>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Label>Margin:</Label>
<TextBlock Text="{Binding …Run Code Online (Sandbox Code Playgroud) 我有以下xaml:
<DockPanel>
<DockPanel>
<CheckBox IsChecked="{Binding Path=Test}" />
<CheckBox IsChecked="{Binding Path=Test}" />
</DockPanel>
<DockPanel DockPanel.Dock="Left" Width="10" Background="Blue">
<DockPanel.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Test}" Value="True">
<Setter Property="DockPanel.Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</DockPanel.Style>
</DockPanel>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
现在 - 2个复选框正确链接 - 检查一个将检查另一个 - 但数据触发器根本没有触发.
我究竟做错了什么?
我有物品,他们得到锁.我想测试他们是否被锁定而没有获得锁定.我们的想法是,如果我TryEnter()的话,我要Exit()如果true只正常检查锁定.
看起来像一个非常基本的问题,它是如何完成的?
我有一个WPF应用程序,设计遵循标准的MVVM模型.
当基础数据发生更改时,我的视图模型会触发PropertyChanged事件,以便控件可以更新.
我的主视图是一个制表符控件,因此大多数控件在任何时候都是不可见的.存在性能问题,我意识到大部分CPU时间专用于获取数据以更新不可见控件.(我的视图模型使用延迟评估,因此它会触发PropertyChanged事件,但在询问之前实际上并不计算最终的可显示属性).
WPF是否有标准的方法来处理这个问题?
理想情况下,如果一个不可见的控件收到一个相关的PropertyChanged事件,它应该只是想"我必须重新查询该属性一旦我再次可见 ".
我正在使用jQuery ajax通过HTTP POST调用我的WCF服务.响应是GZIP编码的,这会导致我的环境出现问题.(见这个问题).如果响应不是GZIP编码,一切都很好.
所以看着Fiddler,我看到jQuery生成的查询有以下标题:
Accept-Encoding: gzip,deflate,sdch
Run Code Online (Sandbox Code Playgroud)
如果,通过fiddler,我将此值更改为None,则响应不会被压缩,这就是我想要的.我需要做的就是更改"Accept-Encoding"标头中的值.
似乎无法通过.ajax命令更改此标头值.(见本论坛帖子).
任何人都可以告诉我有什么选项可以更改此标头值.
这是我目前的尝试.我的headers参数似乎被忽略了.
$telerik.$.ajaxSetup({
accepts: 'application/json, text/javascript, */*'
});
var parameters = {
"playerId": args.playerId
};
var dataInJsonFormat = '{ "playerId": ' + args.playerId + '}';
var ajaxCallParameters = {
accepts: 'application/json, text/javascript, */*',
async: true,
cache: false,
contentType: "application/json; charset=utf-8",
url: "../Services/CmsWebService.svc/SendUpdateRequestToPlayer",
headers: { "Accept-Encoding" : "None" },
type: "POST",
data: dataInJsonFormat,
dataType: 'json',
error: function (jqXHR, textStatus, errorThrown) {
var errorString …Run Code Online (Sandbox Code Playgroud) 我编写了一个应用程序来检查目录上的所有文件系统权限.
目录有许多访问规则(类型FileSystemAccessRule).
每个访问规则都有一个属性FileSystemRights,它是一个标志枚举.
运行时,我会遇到一个FileSystemRights值268435456(以0x10000000十六进制表示).
这个值只是没有出现在枚举中!它实际上高于最高的单个标志值(Synchronize具有值0x100000).
有谁知道这是什么?
可能重复:
如何使用.net创建具有特定扩展名的临时文件?
可以通过调用在.NET中创建临时文件
string fileName = System.IO.Path.GetTempFileName();
Run Code Online (Sandbox Code Playgroud)
这将在临时目录中创建一个扩展名为.TMP的文件.
如果您特别希望它有不同的扩展名怎么办?为了这个例子,假设我需要一个以.TR5结尾的文件.
明显的(和错误的)解决方案是打电话
string fileName = Path.ChangeExtension(Path.GetTempFileName(), "tr5"))
Run Code Online (Sandbox Code Playgroud)
这里的问题是:
是否有一种简单而安全的方法来生成具有特定文件扩展的临时文件?
我似乎对css"clear"关键字的含义感到困惑.
我有一些div元素,都是"float:left".第二个最后一个div元素也有"clear:right".我认为这将导致后续元素转到下一行.但对我来说,事实并非如此.
这是我的例子:
<div class="Section">
<div class="Thumbnail"></div>
<div class="Number">0</div>
<div class="Title">ShopTVC Wallace and Gromit WOA 6Apr11</div>
<div class="Duration">00:00:32</div>
</div>?
Run Code Online (Sandbox Code Playgroud)
看起来像这样:

我试图使持续时间("00:00:32")显示在下一行,缩略图的右侧(蓝色矩形).
我知道我可以把最后三个div放到另一个容器div中,但这个问题的目的是要理解为什么"clear:right"不会阻止持续时间浮动在标题的右边.
这是CSS:
div.Section
{
overflow:auto;
background:cornsilk;
border:2px solid navy;
padding:12px;
}
div.Section div.Thumbnail
{
width:64px;
height:42px;
background:SteelBlue;
foreground:Navy;
}
div.Number
{
width:16px;
margin-left:6px;
}
div.Duration
{
margin-left:22px;
}
div.Section div
{
float:left;
}
div.Section div.Title
{
color:DarkGreen;
clear:right;
}
Run Code Online (Sandbox Code Playgroud)
当然还有jsfiddle链接:http://jsfiddle.net/8J7V6/3/
我正在尝试显示包含字符串"SQL"的所有已安装服务的名称(只是名称).例如,我想看
所以我试试这个:
Get-WmiObject Win32_Service
Run Code Online (Sandbox Code Playgroud)
这将显示所有服务,但作为列表.
Exit Code : 0
Name : ProtectedStorage
ProcessId : 664
StartMode : Manual
State : Running
Status : OK
Exit Code : 1077
Name : QWAVE
ProcessId : 0
StartMode : Manual
State : Stopped
Status : OK
(etc...)
Run Code Online (Sandbox Code Playgroud)
这很好,但我只想看到这个名字.所以我键入:
Get-WmiObject Win32_Service | select-object Name
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望:
sppuinotfy
SQLAgent$SQL2008_RT
SQLBrowser
SQLWriter
SSDPSRV
(etc ..)
Run Code Online (Sandbox Code Playgroud)
一切都很好.我采取下一步过滤名称只包括SQL相关的名称:
Get-WmiObject Win32_Service | select-object Name | select-string -pattern 'SQL'
Run Code Online (Sandbox Code Playgroud)
现在它令人困惑.这是我的输出:
@{Name=BcmSqlStartupSvc}
@{Name=MSOLAP$SQL2008_R2}
@{Name=MSSQL$SQL2008_R2}
(etc ...)
Run Code Online (Sandbox Code Playgroud)
为什么我得到这个输出,而不仅仅是名字?我应该输入什么才能获得名字?