草庐IT

c# - 将 24 位 bmp 转换为 16 位?

我知道.NETFramework自带图像转换类(System.Drawing.Image.Save方法)。但我需要将24位(R8G8B8)位图图像转换为16位(X1R5G5B5),我真的不知道这种转换,以及bmp中24位到16位的变化header不起作用(因为我们需要转换整个图像数据)。另外我想知道是否可以控制图像抖动等想法?任何形式的帮助将不胜感激。 最佳答案 声明了Format16bppRgb1555像素格式,但GDI+实际上并不支持它。没有主流视频驱动程序或图像编解码器曾经使用过该像素格式。GDI+设计者猜测可能的事情已经发生

C# 访问 64 位注册表

我想知道是否可以在64位电脑上使用C#访问以下注册表项。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run在32位电脑上访问时它工作正常,但在64位电脑上它重新定向到具有不同key的HKLM\SOFTWARE\Wow6432Node的native64位路径。我已经浏览了有关此的各种文章,但无法真正找到关于如何在C#中访问64位pc中的32位key的明确答案。谢谢。 最佳答案 如果您的目标是.NetFramework4.0或更高版本,那么您可以通过传递RegistryView.Regi

c# - 列出标志 Enum 中的所有位名称

我正在尝试创建一个辅助方法来列出枚举值中设置的所有位的名称(用于记录目的)。我想要一个方法来返回在某些变量中设置的所有枚举值的列表。在我的例子中[Flag]EnumHWResponse{None=0x0,Ready=0x1,Working=0x2,Error=0x80,}我给它0x81,它应该给我一个IEnumerable包含{Ready,Error}.由于没有找到更简单的方法,我试着写了下面的代码,但我无法编译。publicstaticIEnumerableMaskToList(Enummask){if(typeof(T).IsSubclassOf(typeof(Enum))==fa

c# - .net c# 异常处理在 64 位模式下失败

我的C#Web服务应用程序遇到问题。异常不再在某个时刻被处理。应用程序直接停止,没有任何进一步的消息/故障异常。这是发生了什么:问题:在一个方法的catch部分,我抛出一个新的异常包含有关异常(exception)情况的其他信息;底层异常来self应用程序的另一部分;异常的“堆栈”大约是20,但这似乎不是这里有一个问题;当使用VS2012开发服务器(我假设是32位)或32位模式的IIS时,抛出的异常被调用方法按预期拾取(最终导致我的网络服务出现FaultException)到目前为止我采取的步骤或其他可能有用的信息:我可以很容易地重现异常;它只是停止工作每次我运行我的代码时,都是完全相

c# - 从 Single 到 Decimal 的显式转换导致不同的位表示

如果我将singles转换为decimald我注意到它的位表示与直接创建的小数。例如:Singles=0.01f;Decimald=0.01m;int[]bitsSingle=Decimal.GetBits((decimal)s)int[]bitsDecimal=Decimal.GetBits(d)返回(为简洁起见删除了中间元素):bitsSingle:[0]=10[3]=196608bitsDecimal:[0]=1[3]=131072这两个都是十进制数,都(看起来)准确地表示0.01:查看规范没有任何亮点,除了可能:§4.1.7Contrarytothefloatanddouble

c# - 串口通讯,读取第9位

我有一个与外部协议(protocol)连接的应用程序使用串行通信。我需要知道它发送给我的每个数据包上是否设置了唤醒位(第9位),并且通信速率必须低于40毫秒,并且响应必须在20毫秒内发送。框架,封装从端口读取的位,只将8位数据发回给我。此外,由于时间问题,我无法等待奇偶校验错误事件。我需要知道如何读取9位,或者是否有http://www.wcscnet.com/CdrvLBro.htm的免费替代品 最佳答案 您是否尝试将串行读取函数放在奇偶校验错误事件处理程序中?根据驱动程序的不同,这可能足够快。这不会恰好适用于某种老虎机协议(pr

c# - 如何在32位应用程序中获取64位 "program files"目录

我有一个以x86模式(在c#中)编译的应用程序,我需要从中访问64位程序文件文件夹(当然是64位Windows)中存在的某个文件。我不想在我的应用程序中将C:\ProgramFiles硬编码为字符串,因为一些目标计算机可能将Windows安装在不同的驱动器中,或者可能使用其他语言。我遇到的问题是使用Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)返回x86风格而不是所需的目录,除非我在64位模式下编译我的程序。出于好奇,我该怎么做才能避免这样做? 最佳答案

c# - 我怎样才能从一个字节中分离出每一位?

我是C#的新手(一般来说C也是如此)我从外部源返回一个字节值,表示IO设备端口上8个输入引脚的状态,所以我得到一个0-255的值表示端口上存在的二进制模式。我怎样才能去除单个位并将它们设置为boolvars,所以做这样的事情:if(inputBuffer[1]==1){IO.Input0=true;IO.Input1=false;IO.Input2=false;IO.Input3=false;IO.Input4=false;IO.Input5=false;IO.Input6=false;IO.Input7=false;}我可能过度解释了我想要实现的目标,但我认为这是最好的例子,尽管非常

c# - 为什么写入 24 位结构不是原子的(当写入 32 位结构时似乎是)?

我是一个修补匠——这一点毋庸置疑。出于这个原因(除此之外几乎没有其他原因),我最近做了一个小实验来证实我的怀疑,即写入struct不是原子操作,这意味着所谓的“不可变”值类型,它试图强制执行某些约束,假设可能无法实现其目标。我写了ablogpostaboutthis使用以下类型作为说明:structSolidStruct{publicSolidStruct(intvalue){X=Y=Z=value;}publicreadonlyintX;publicreadonlyintY;publicreadonlyintZ;}虽然上面的看起来像X!=Y或Y!=Z永远不可能为真的类型,在事实上,如

c# - 如何在 C# Express 中选择 32 位或 64 位构建?

当我尝试在C#Express2008中构建我的解决方案时遇到问题。我需要为32位架构构建它,但它总是为64位构建。在VisualStudio2008中,我可以选择体系结构,但在C#Express中找不到此选项。有没有办法在C#Express中做到这一点? 最佳答案 在完整的VisualStudio中查看项目文件中的差异,并手动对C#Express项目进行相同的编辑-VS将尊重这些更改,即使它不允许您进行它们来自IDE。编辑:正如Jeff在评论中指出的那样,如果您转到“工具”->“选项”,请勾选左下角的“显示所有设置”框。然后在“项目