我试图保存具有指定编码质量的位图jpg格式.但是,在调用save方法时,我得到一个异常("参数无效.").
如果我省略了bmp.save中的最后两个参数,它可以正常工作.
EncoderParameters eps = new EncoderParameters(1);
eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 16);
ImageCodecInfo ici = GetEncoderInfo("image/jpeg");
string outfile = outputpath + "\\" + fileaddition + sourcefile.Name;
bmp.Save(outfile,ici,eps );
bmp.Dispose();
image.Dispose();
return true;
}
ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
作为练习,我正在将我们庞大而且经过强化的Delphi框架的一部分翻译成C#.
此框架中包含一个通用的单例父类.当然,在C#中实现单例是相当容易的(甚至还有Jon Skeet文章,所以我还希望如此),但是我们的Delphi单例对模式的看法略有不同:与发布'实例'相反property/method,它有一个"伪"构造函数,它总是返回相同的实例.这种方法的本质特征是单例类的用户不知道他正在处理单例:他们知道,他们只是构造任何旧类并从中请求一些信息.
我想在C#中完成同样的事情(作为练习,所以它不一定是生产质量的代码,邪恶的hackery很好),但到目前为止,我已经失败了.
任何建议简单myInstance = new MyClass();总是返回相同的实例是最受欢迎的!
我们正在谈论框架提供的单例模式的便利实现.它不一定必须是父类,但它也必须帮助开发人员创建自己的单例.要求他们手动将所有方法调用重定向到单实例,不会让他们满心欢喜.:-)
我真的没有兴趣辩论这是否是处理单身人士的正确方法,因为现在我只对c#-tweaking的精细艺术感兴趣.
我的老板要求我只编写ANSI SQL以使其与数据库无关.但我了解到并不是那么容易,因为没有数据库完全兼容ANSI SQL.SQL代码很少在没有修改的情况下在数据库系统之间移植.
我看到人们以不同的方式使他们的程序数据库独立.例如:
你总是把你的代码写成"任何数据库就绪"吗?或者只在需要时才这样做?如果是的话,你是如何实现的?
我是.net 3.5的新手.我有一个项目集合:
IList<Model> models;
Run Code Online (Sandbox Code Playgroud)
哪里
class Model
{
public string Name
{
get;
private set;
}
}
Run Code Online (Sandbox Code Playgroud)
我想得到名称长度最长的元素.我试过了
string maxItem = models.Max<Model>(model => model.Name.Length);
Run Code Online (Sandbox Code Playgroud)
但它当然会返回最大长度(我需要一个Model对象).我知道有一种方法可以使用扩展方法,但我不知道如何.
这个任务似乎很简单:如何在xml文档中包含一个Javascript文件,以便至少Opera和Firefox可以实际解析它并执行代码?
C#3中的Lambda语法使得创建单行匿名方法非常方便.它们比C#2给我们的匿名委托语法有了明显的改进.然而,lambda的便利性带来了诱惑,在我们不一定需要它们提供的函数式编程语义的地方使用它们.
例如,我经常发现我的事件处理程序(或者至少是开始时)设置状态值的简单单行,或调用另一个函数,或者在另一个对象上设置属性等.对于这些,我应该杂乱无章我的类有另一个简单的函数,或者我应该在构造函数中将lambda填充到事件中?
在这种情况下,lambdas有一些明显的缺点:
由于上述原因,这两件事并没有太多困扰我.通过将lambda存储在成员委托中,我可以解决这两个问题,如果它们确实存在问题,但这样就会破坏使用lambdas的目的,以保证类的清晰度.
不过,还有另外两件事我认为可能不那么明显,但可能更有问题.
每个lambda函数在其包含范围内形成一个闭包.这可能意味着由于闭包维护对它们的引用,在构造函数中较早创建的临时对象保持活动的时间比它们需要的时间长得多.现在希望编译器足够聪明,可以从lambda不使用的闭包中排除对象,但我不确定.有人知道吗?
幸运的是,这并不总是一个问题,因为我不经常在我的构造函数中创建临时对象.我可以想象一下我所做的一个场景,而且我不能轻易将它放在lambda之外.
所以我想借鉴其他人的建议和经验,也许是那些具有其他语言经验和函数式编程功能的人.对于这种事情,是否有任何既定的最佳实践?您是否会避免在事件处理程序中使用lambdas,或者在lambda明显超过其封闭范围的其他情况下使用lambdas?如果没有,你会在什么门槛上决定使用真正的函数而不是lambda?上述任何陷阱都会严重咬伤任何人吗?有没有我没想过的陷阱?
有时我想从论坛测试新代码,或者我需要帮助我的朋友解决特定的C#问题.问题是我不想每次只在Visual Studio中编写/运行这个小代码时在Visual Studio中创建新的"项目".
Java和Eclipse IDE提供了"Scrapbook"功能,允许执行任意Java表达式.C#程序员有哪些选择?
我使用LINQ-to-SQL从具有一对多关系的两个表的数据库加载数据(一个Recipe有许多成分).
我加载一个Recipe,LINQ将Ingredient对象检索到绑定到ListBox的EntitySet中.
如果我想从食谱中删除一些成分,我会得到一个"尝试删除食谱和成分之间的关系.但是,其中一个关系的外键(Ingredient.RecipeID)不能设置为null.
我通过在DBML文件中添加'DeleteOnNull ="true"'使用众所周知的解决方案解决了这个问题.但添加此设置仅在我们删除从DB检索到的Ingredient对象时才会消除此问题.
问题在于在代码中创建的成分对象(添加到配方中)并添加到成分的EntitySet集合中,然后在调用SubmitUpdates之前删除.然后,再次发生同样的异常.这通常发生在一个新的,未保存的食谱上,当用户向其添加成分,出错并从食谱中删除一种成分时.我将DeleteOnNull添加到DBML中的'Association Name ="Recipe_Ingredient"'行.
我该如何删除这些物品?我目前看到的唯一解决方案是,我会将成分加载到不在DataContext下的集合中,然后在保存时,删除配方中的所有成分,然后再从该缓存中添加..
好吧,我正在四处寻找将PIL图像对象来回转换为numpy数组,这样我就可以比PIL的PixelAccess对象允许更快的像素转换.我已经想出如何通过以下方式将像素信息放在一个有用的3D numpy数组中:
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
Run Code Online (Sandbox Code Playgroud)
但在完成所有令人敬畏的变换后,我似乎无法弄清楚如何将其加载回PIL对象.我知道这个putdata()方法,但似乎无法让它表现出来.
为了将离线客户端写入Google阅读器服务,我想知道如何最好地与服务同步.
似乎还没有官方文档,我到目前为止找到的最佳来源是:http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI
现在考虑一下:有了上面的信息,我可以下载所有未读的项目,我可以指定下载多少项目并使用atom-id我可以检测到已经下载的重复项目.
对我来说缺少的是一种指定我只想要自上次同步以来的更新的方法.我可以说给我10个(参数n = 10)最新(参数r = d)条目.如果我指定参数r = o(日期升序),那么我也可以指定参数ot = [最后一次同步],但只有那时,升序顺序没有任何意义,当我只想阅读一些项目而不是所有项目项目.
知道如何解决这个问题,而无需再次下载所有项目,只是拒绝重复项目?不是一种非常经济的民意调查方式.
有人建议我可以指定我只想要未读条目.但是为了使该解决方案能够像Google Reader再次提供此条目一样,我需要将它们标记为已读.反过来,这意味着我需要在客户端保持自己的已读/未读状态,并且当用户登录到Google阅读器的在线版本时,条目已被标记为已读.这对我不起作用.
干杯,马里亚诺