因为我试图用平滑和渲染的每个组合绘制字符串,Graphics.DrawString()我认为文本渲染器会更好地绘制我的字符串,但我认为是错误的.
这是它应该是这样的:

这就是它的样子:

这是我的代码:
Graphics objGraphics2 = Graphics.FromImage(objBitmap);
objGraphics2.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
objGraphics2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
objGraphics2.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
objGraphics2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
Font textFont = new Font(textFontFamily, PxtoEm(textSize));
SolidBrush b = new SolidBrush(textColor);
TextRenderer.DrawText(objGraphics2, textValue, textFont, new Rectangle(0, 0, Width, Height), textColor);
Run Code Online (Sandbox Code Playgroud)
我的PxtoEm方法错了吗?
public float PxtoEm(int px)
{
float em = (float)(Convert.ToDouble(Convert.ToDouble(px) * Convert.ToDouble(72) / Convert.ToDouble(objBitmap.HorizontalResolution)));
return em;
}
Run Code Online (Sandbox Code Playgroud)
我需要一些建议,因为这非常糟糕,更大的字体和图像不会缩小,情况会变得更糟.
更新:使用更大的字体(即20px),但使用较小的字体,它会在某些字母上被删除:
这就是它与字体Arial 10px一起使用的方式:

这是结果 Graphics.DrawString()

你可以看到它真的不是很好,但我最接近.我对代码进行了一些更改,并使用更大的字体获得了更好的结果
这就是如何使用字体Arial 20px:

这是绘图结果:

这里是更改的代码(我直接使用em方法并使用像素,切换到Graphics.DrawString()而不是TextRenderer.DrawText()
Graphics objGraphics = Graphics.FromImage(objBitmap);
objGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
objGraphics.TextRenderingHint …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个这样的依赖属性:
public partial class MyControl: UserControl
{
//...
public static DependencyProperty XyzProperty = DependencyProperty.Register("Xyz",typeof (string),typeof (MyControl),new PropertyMetadata(default(string)));
public string Xyz
{
get { return (string) GetValue(XyzProperty ); }
set { SetValue(XyzProperty , value); }
}
//...
}
Run Code Online (Sandbox Code Playgroud)
然后将它绑定到我的wpf窗口,一切正常.
当我尝试向setter 添加一些逻辑时,我注意到它没有被调用.我修改了get;设置为一个点现在它们看起来像这样:
get{return null;}
set{}
Run Code Online (Sandbox Code Playgroud)
它仍然有效!怎么会?GetValue/SetValue调用的用途是什么?
我可以想到以下几种方法从一个方法返回多个值(以及一个分成两个方法的方法)
private bool IsCarFaulty(Car car, out string fault)
{
fault = string.Empty;
return false;
}
Run Code Online (Sandbox Code Playgroud)
private Tuple<bool, string> IsCarFaulty(Car car)
{
return Tuple.Create(false, string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
private ResultAndMessage IsCarFaulty(Car car)
{
return new ResultAndMessage(false, string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
private bool IsCarFaulty(Car car)
{
return false;
}
private string GetCarFault(Car car)
{
return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
基本上我的问题是,是否存在一个优于另一个的情况?如果我以int.TryParse为例.它使用out参数,但不能将它分成两个方法,CanParse和Parse也可以正常工作,如果不是更好的话.
我正在研究现有的应用程序.此应用程序从大文件中读取数据,然后在进行一些计算后,将数据存储在另一个表中.
但这样做的循环(见下文)需要很长时间.由于文件有时包含1,000条记录,因此整个过程需要数天.
我可以foreach用其他东西替换这个循环吗?我尝试过使用Parallel.ForEach它确实有所帮助.我是新手,所以非常感谢你的帮助.
foreach (record someredord Somereport.r)
{
try
{
using (var command = new SqlCommand("[procname]", sqlConn))
{
command.CommandTimeout = 0;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(…);
IAsyncResult result = command.BeginExecuteReader();
while (!result.IsCompleted)
{
System.Threading.Thread.Sleep(10);
}
command.EndExecuteReader(result);
}
}
catch (Exception e)
{
…
}
}
Run Code Online (Sandbox Code Playgroud)
在查看答案后,我删除了Async并使用了编辑后的代码.但这并没有提高性能.
using (command = new SqlCommand("[sp]", sqlConn))
{
command.CommandTimeout = 0;
command.CommandType = CommandType.StoredProcedure;
foreach (record someRecord in someReport.)
{
command.Parameters.Clear();
command.Parameters.Add(....)
command.Prepare();
using (dr = command.ExecuteReader())
{
while (dr.Read())
{
if …Run Code Online (Sandbox Code Playgroud) 我有一个包含一些值的List.
例:
List<object> testData = new List <object>();
testData.Add(new List<object> { "aaa", "bbb", "ccc" });
testData.Add(new List<object> { "ddd", "eee", "fff" });
testData.Add(new List<object> { "ggg", "hhh", "iii" });
Run Code Online (Sandbox Code Playgroud)
我有一个类似的课程
class TestClass
{
public string AAA {get;set;}
public string BBB {get;set;}
public string CCC {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
如何转换testData为类型List<TestClass>?
除此之外有没有办法转换?
testData.Select(x => new TestClass()
{
AAA = (string)x[0],
BBB = (string)x[1],
CCC = (string)x[2]
}).ToList();
Run Code Online (Sandbox Code Playgroud)
我不想提及列名,因此无论类更改如何,我都可以使用此代码.
我也有一个IEnumerable<Dictionary<string, object>>有数据.
我有一个应用程序需要接受数百万个char*作为输入参数(通常字符串小于512个字符(在unicode中)),并将它们转换并存储为.net字符串.
它结果是我的应用程序性能的真正瓶颈.我想知道是否有一些设计模式或想法使其更有效.
有一个关键部分让我觉得它可以改进:有很多重复.假设有100万个对象进入,可能只有50个独特的char*模式.
为了记录,这里是我用于将char*转换为字符串的算法(此算法在C++中,但项目的其余部分在C#中)
String ^StringTools::MbCharToStr ( const char *Source )
{
String ^str;
if( (Source == NULL) || (Source[0] == '\0') )
{
str = gcnew String("");
}
else
{
// Find the number of UTF-16 characters needed to hold the
// converted UTF-8 string, and allocate a buffer for them.
const size_t max_strsize = 2048;
int wstr_size = MultiByteToWideChar (CP_UTF8, 0L, Source, -1, NULL, 0);
if (wstr_size < max_strsize)
{
// Save the malloc/free overhead if it's a …Run Code Online (Sandbox Code Playgroud) 我有这段代码:
TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries
List<int> TheListOfIDs = new List<int>();
TheListOfLeadIDs = from string s in TheString.Split(',')
select Convert.ToInt32(s)).ToList<int>();
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用try catch来确保转换不会引发错误,但我想知道如何在linq语句中使用TryParse来完成这项工作.
谢谢.
我刚刚从C开始,正在尝试Ritchie的书中的一些例子.我写了一个小程序来理解字符数组,但偶然发现了一些错误,并希望对我所理解的错误有所了解:
#include <stdio.h>
#define ARRAYSIZE 50
#include <string.h>
main () {
int c,i;
char letter[ARRAYSIZE];
i=0;
while ((c=getchar()) != EOF )
{
letter[i]=c;
i++;
}
letter[i]='\0';
printf("You entered %d characters\n",i);
printf("The word is ");
printf("%s\n",letter);
printf("The length of string is %d",strlen(letter));
printf("Splitting the string into chars..\n");
int j=0;
for (j=0;j++;(j<=strlen(letter)))
printf("The letter is %d\n",letter[j]);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
$ ./a.out
hello how are youYou entered 17 characters
The word is hello how are you
The length of string is 17Splitting the string …Run Code Online (Sandbox Code Playgroud) 我想采用一个数学表达式,它接受变量并打印(赋值给字符串)填充变量的公式.
int iTwo = 2;
int iResult = 0;
iResult = iTwo * iTwo;
string theString = (iTwo * iTwo).ToString();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,iResult = 4,theString ="4"
我想做一些填充变量并返回数学表达式的东西,如:
theString = (iTwo * iTwo).ExpressionToString();
Run Code Online (Sandbox Code Playgroud)
并以theString ="2*2"结束;
思考?
我正在定义一个来自argb的颜色,例如
Color.FromArgb(255,255,0,0);
Run Code Online (Sandbox Code Playgroud)
在visual studio 2012中,winRT应用程序表示它被标记为[security critical].有什么理由吗?我试过搜索,没有结果.并且不知道为什么这与安全性有关.
更新:
现在我注意到,不仅FromArgb(...); 方法给出了[SECURITY CRITICAL]警告.任何这些:
c.A = 255;
c.R = 255;
c.G = 0;
c.B = 0;
Run Code Online (Sandbox Code Playgroud)
也是.