小编Oma*_*mar的帖子

ASP.NET TextRenderer.DrawText可怕的文本图像

因为我试图用平滑和渲染的每个组合绘制字符串,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)

c# asp.net

7
推荐指数
1
解决办法
2860
查看次数

如何在依赖属性中获取/设置什么都不做?

我已经创建了一个这样的依赖属性:

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调用的用途是什么?

c# wpf dependency-properties

7
推荐指数
1
解决办法
1269
查看次数

从方法返回多个值

我可以想到以下几种方法从一个方法返回多个值(以及一个分成两个方法的方法)

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参数,但不能将它分成两个方法,CanParseParse也可以正常工作,如果不是更好的话.

c#

7
推荐指数
1
解决办法
3012
查看次数

非常缓慢的foreach循环

我正在研究现有的应用程序.此应用程序从大文件中读取数据,然后在进行一些计算后,将数据存储在另一个表中.

但这样做的循环(见下文)需要很长时间.由于文件有时包含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)

.net c# ado.net

7
推荐指数
2
解决办法
3672
查看次数

将通用列表转换为特定类型

我有一个包含一些值的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>>有数据.

.net c#

7
推荐指数
3
解决办法
2万
查看次数

优化数百万个char*到字符串转换

我有一个应用程序需要接受数百万个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)

c# algorithm performance c++-cli string-conversion

7
推荐指数
1
解决办法
535
查看次数

使用TryParse的整数列表的整数字符串

我有这段代码:

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#

6
推荐指数
2
解决办法
3060
查看次数

C编程初学者 - 请解释这个错误

我刚刚从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)

c arrays

6
推荐指数
2
解决办法
361
查看次数

将表达式的值打印为字符串

我想采用一个数学表达式,它接受变量并打印(赋值给字符串)填充变量的公式.

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"结束;

思考?

.net c#

6
推荐指数
1
解决办法
1069
查看次数

Color.FromArgb(...); 安全信息

我正在定义一个来自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)

也是.

c# colors visual-studio windows-runtime

6
推荐指数
1
解决办法
727
查看次数