我需要为上传的图像添加元数据标签(描述).
我找到了这个答案:https://stackoverflow.com/a/1764913/6776适用于JPG文件,但不适用于PNG.
private string Tag = "test meta data";
private static Stream TagImage(Stream input, string type)
{
bool isJpg = type.EndsWith("jpg", StringComparison.InvariantCultureIgnoreCase) || type.EndsWith("jpeg", StringComparison.InvariantCultureIgnoreCase);
bool isPng = type.EndsWith("png", StringComparison.InvariantCultureIgnoreCase);
BitmapDecoder decoder = null;
if (isJpg)
{
decoder = new JpegBitmapDecoder(input, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
else if (isPng)
{
decoder = new PngBitmapDecoder(input, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
else
{
return input;
}
// modify the metadata
BitmapFrame bitmapFrame = decoder.Frames[0];
BitmapMetadata metaData = (BitmapMetadata)bitmapFrame.Metadata.Clone();
metaData.Subject = Tag;
metaData.Comment …Run Code Online (Sandbox Code Playgroud) 我正在查看powershellpro.com上的一些代码示例,并且不明白他为什么编写通过以下方式循环遍历数组的示例代码:
...增量从零开始然后增加1,直到它小于或等于数组的长度减去1 ...
for ($i=0; $i -le $total-1; $i++)
Run Code Online (Sandbox Code Playgroud)
...而不是让增量从零开始然后再增加1直到它小于数组的长度......
for ($i=0; $i -lt $total; $i++)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?它们在功能上是等效的,并且将循环遍历数组中的每个项目.我个人认为第二个版本更清洁.是否有最好的做法或者说你应该使用第一个?
我有一个运行时间太长的应用程序,我想引入线程/并行化/无论如何.
具体来说,代码会检索几千封邮件,然后发送它们.今天,代码看起来像这样(有点简化):
Dim mails = centreInteretService.GetEmails()
For Each m in mails
m.Body = GetMailContent(m)
If MailSendable(m) Then
SendMail(m)
End If
Next
Run Code Online (Sandbox Code Playgroud)
我想尝试并行发送多封邮件.我想尝试并行使用2个线程.更具体地说,我想将整个循环放在一个线程中(getmailcontent + sendmail).
我想到了这样的事情:
Dim mails1 As New List(Of MailSerialiserCI)
Dim mails2 As New List(Of MailSerialiserCI)
Dim nbFirstList As Integer = CInt(Math.Ceiling(nbTotal / 2))
mails1 = mails.Take(nbFirstList)
mails2 = mails.Skip(nbFirstList)
Dim smt1 As New MailSender.MailSenderThreaded()
smt1.mails = mails1
smt1.nbTotal = nbTotal
Dim threadMails1 As ThreadStart = New ThreadStart(AddressOf smt1.SendMails)
Dim th1 As Thread = New Thread(AddressOf threadMails1)
th1.Start()
Dim …Run Code Online (Sandbox Code Playgroud) 我正在使用RestSharp来访问RubyOnRails API.您可能知道,当参数名称在表单中时,RoR喜欢model_name[property].另一方面,RestSharp不喜欢它.
Fiddler说我把它发送到服务器:
user%5Bemail%5D=user%40email.com&user%5Bpassword%5D=test
Run Code Online (Sandbox Code Playgroud)
看起来R#在发送数据时对参数和值进行编码(与Curl不同,它看起来像是有选择地编码).虽然在大多数情况下我认为这很好,但在这种特殊情况下,它会使API返回401,因为它不了解参数.
是否可以要求R#不对请求的参数进行编码?
谢谢 !
编辑
好的,在R#源代码中,我找到了方法RestClient.EncodeParameters,所以看起来参数的名称总是被编码.我想我将不得不叉它:(
我们有一个 WPF 应用程序,它允许用户按照自己的意愿输入和设置文本样式。然后将它们的文本转换为 XPS 以使用 ABCPdf 插入到 PDF 中。
我们最近切换到 .Net 4,现在 XPS 生成有时会生成格式错误的 XPS。
生成格式错误的 XPS 的唯一时间是当用户使用重叠两个字符的字体时(例如 Sevillana,可在 Google Fonts 上找到)。在 .Net 4 中,字符重叠,而在 .Net 3.5 中,它们不重叠。从另一个 SO 问题中,我认为这是因为 .Net 4.0 已更改其字体渲染引擎。
.Net 3.5:

.Net 4.0 :(注意“d”和“A”是如何重叠的)

看起来 .Net 4 没有考虑撇号的间距,甚至否定它。如果我删除撇号,间距会变宽。我创建了一个简单的测试项目来演示这个问题:https : //github.com/tbroust-trepia/wpf-4-font-rendering
我们将 FlowDocument 保存到 XPS 的方法与从 FlowDocument 创建 XPS 文档并即时附加它的方法几乎相同(我怀疑原始开发人员只是复制/粘贴了该代码);它只是将 XPS 保存到文件而不是流中。
MS 工具 IsXPS表示特定节点无效。事实上,在 Documents\1\Pages\1.fpage 中,Indices 的值为;,-16;,84;;;;,30。我可以看到“0.-16”并不是一个真正的数字。
所以,我有很多问题:
我必须调用一个传统的SOAP Web服务,它从一个发送JSON中描述的数据的干净(呃)REST Web服务发送一个原始DataSet.
我需要将列出我的对象的原始数据集转换为真正的对象列表.
我得到的数据集没有足够的信息,因此转换不是"简单".它涉及从每个对象的DB中获取附加数据.
这样做的最佳设计模式是什么?我的第一个天真的反射是创建一个方法,将这个数据集作为参数,解析它,并返回一个对象列表,但我觉得必须有一个更好的方法来做到这一点.
我已经看到了适配器模式,但我理解它"仅"将现有类转换为"看起来像它"的另一个类.我想完全将数据从类似于带有id和name的字符串表的内容更改为包含每个有用信息的真实实例集合.
我还有另一个类似的问题.我们有一个旧的桌面应用程序和一个新的在线应用程序,它们以不同的方式执行相同的操作.但是,这两个应用程序的保存文件非常不同.
我想在这些格式之间创建一个转换器.正如@ VS1所建议的Mapper模式看起来很有希望进行此操作,但我认为我不能像AutoMapper那样使用简单直接的东西.适配器模式也可能有所帮助.我会研究这些.
我正在尝试使用MahApps.Metro 0.13.1.0在窗口标题栏中添加"刷新"按钮.
我的App.xaml是这样的:
<Application x:Class="VersionSwitcher.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Views/MainWindow.xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d1p1:Ignorable="d"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="/Resources/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:VersionSwitcher.ViewModel" />
</ResourceDictionary>
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
然后在我的MainWindow.xaml中:
<Controls:MetroWindow.WindowCommands>
<Controls:WindowCommands>
<Button ToolTip="{x:Static p:Resources.Button_Refresh}"
Style="{DynamicResource MetroCircleButtonStyle}" Width="30" Height="30">
<Rectangle Fill="Black">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{DynamicResource appbar_refresh}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
</Controls:WindowCommands>
</Controls:MetroWindow.WindowCommands>
Run Code Online (Sandbox Code Playgroud)
我在标题栏中有一个灰色圆圈,但没有图标!任何图标(来自Resources/Icons.xaml)都做同样的事情.
如果图标放在窗口内容而不是标题栏中,它会做同样的事情.
我错过了什么?
谢谢 !
我发现为Rectangle设置宽度和高度会显示图标.如何随时填充按钮我该怎么办?
我刚刚发现了有关该%apply指令的信息(例如,请参见此处)。不幸的是,我不能让它与结构一起工作:
%module packer_cs
%include "carrays.i"
%{
#include "packer.h"
%}
%include "typemaps.i"
%include "arrays_csharp.i"
%apply image_t INPUT[] { image_t *images }
%include "packer.h"
Run Code Online (Sandbox Code Playgroud)
这导致:
swig -csharp -outdir bin\csharp packer\packer.i
Warning 453: Can't apply (image_t INPUT[]). No typemaps are defined.
Run Code Online (Sandbox Code Playgroud)
我找不到有关此警告的任何文档。看起来我必须定义一个自定义类型映射,但我不知道从哪里开始。我对文档的缺乏越来越厌倦,并且非常渴望有一天能够成功地编写我的包装器:(
按照我之前的两篇 文章,我在 C# 中使用 C 库仍然有问题。
回顾一下:我有一个 C 库,我正在尝试使用 Swig 编写一个 C# 包装器。
在 .h 文件中,该方法声明如下:
int pack(image_t *images, int nb_images, parameters_t params);
Run Code Online (Sandbox Code Playgroud)
实际上*images总是传递一个数组。如果我只是像这样生成 swig 文件,在 C# 文件中,该函数需要一个实例:
public static int …Run Code Online (Sandbox Code Playgroud) 我正在学习 C#,目前正在尝试掌握访问器。
看着这个我快疯了,我不知道我做错了什么:
class BankAccount
{
// *PROPERTIES*
private int _initialDeposit = 0;
// **ACCESSORS**
public int SavingsAccount
{
set
{
_initialDeposit = value;
}
get
{
return _initialDeposit;
}
}
}
Run Code Online (Sandbox Code Playgroud)
表格如下所示:
public partial class BankForm : Form
{
private BankAccount _myAccount;
public BankForm()
{
InitializeComponent();
_myAccount = new BankAccount();
}
private void initialDepositButton_Click(object sender, EventArgs e)
{
_myAccount.SavingsAccount = Convert.ToInt32(initialDepositTextBox.Text);
bankAccountListBox.Text = "Account opened with initial Deposit " + initialDepositTextBox.Text;
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
属性或索引器必须至少有一个访问器
我这里有一堆单元测试.其中一个人希望代码什么也不做,因为参数解析不起作用.
不幸的是,解析库的参数我Console.Write()在这种情况下使用了强制,现在我的单元测试输出充满了库的消息,这使得它很难阅读.
有没有办法在调用此方法之前将标准控制台输出重定向到空(或临时文件或其他),然后在完成后将其重定向回标准输出?
谢谢!
实际上这是需要重定向的错误输出...