Tag:

64位应用程序启动32位进程

我正在研究用.Net 4.0,C#编码的64位应用程序。 在这个应用程序中,在某些时候,我需要使用以下代码启动另一个exe文件: l_process.StartInfo.FileName = _sFullFilePath; l_process.StartInfo.Verb = “Open”; l_process.StartInfo.CreateNoWindow = true; l_process.StartInfo.Arguments = l_sParams; l_process.Start(); 现在,这个外部应用程序在32位环境(x86)下编译,我收到以下错误: **The specified executable is not valid for this OS platform** 甚至可以这样做吗? 如果是的话,我如何设法从我的应用程序启动这个应用程序没有麻烦?

位图克隆问题

请考虑以下代码来加载,修改和保存位图图像: using (Bitmap bmp = new Bitmap(“C:\\test.jpg”)) { bmp.RotateFlip(RotateFlipType.Rotate180FlipNone); bmp.Save(“C:\\test.jpg”); } 它运行没有任何例外。 但考虑一下: using (Bitmap bmp = new Bitmap(“C:\\test.jpg”)) { using (Bitmap bmpClone = (Bitmap)bmp.Clone()) { //You can replace “bmpClone” in the following lines with “bmp”, //exception occurs anyway bmpClone.RotateFlip(RotateFlipType.Rotate180FlipNone); bmpClone.Save(“C:\\test.jpg”); } } 它以ExternalException结束,并显示以下消息:“GDI +中发生了一般错误”。 这有什么不对? 对打开的文件有什么样的锁定? 如果是这样,为什么第一个块有效? 克隆System.Drawing.Bitmap的正确代码是什么,而我们可能需要在内存中编辑主对象或其克隆,并且仍然将它们都加载到内存中?

使用BinaryWriter将一个位写入二进制文件

我想将一个位写入二进制文件。 using (FileStream fileStream = new FileStream(@”myfile.bin”, FileMode.Create)) using (BinaryWriter binaryWriter = new BinaryWriter(fileStream)) { binaryWriter.Write((bool)10); } 像binaryWriter.Write((bit)1); 当我使用binaryWriter.Write((bool)1) ,文件有一个字节,但我想写一个字节。 这可能吗?

在C#中存储长二进制(最多512位)的最佳方法

我试图找出在C#中存储大二进制(超过96位)数字的最佳方法 我正在构建应用程序,它将自动为轮class分配工作人员。 换档时间可短至15分钟(但未来可能会更小)。 为了避免工人的双重预订,我计划得到他们每日时间的二进制映射:24小时以相等的块(15分钟)分开,每个块都有一个标志(0表示免费,1表示忙)所以当我们试图给另一个转移到工人,我们可以对工人的每日可用性与轮class时间进行二元比较。 简单易行。 但是C#long只允许最多64位,并且在当前设置下我需要至少96位(每个周期24小时* 60分钟/ 15分钟)。 这种表示必须是内存友好的,因为一次操作大约有一百万个对象。 我考虑的其他选择很少: 串。 内存饥渴,实现逐位操作并不简单 位数组。 但据我所知,C#没有位类型 无符号整数数组。 每个数组仅代表一天的一部分。 我能想到的最好的 还有其他建议吗? 提前致谢!

在C#中将Bitmap转换为布尔数组的快速方法?

我正在制作一个XNA应用程序,我从网络摄像头捕获屏幕截图每秒4次,然后当像素颜色红色低于某个阈值时我尝试将其转换为布尔数组。 当我将它转换为Texture2D时,它不会滞后,但是当我尝试获取单个像素时,它确实会滞后,即使网络摄像头分辨率为176×144。 这是获取位图的代码: public Bitmap getBitmap() { if (!panelVideoPreview.IsDisposed) { Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height, PixelFormat.Format32bppRgb); using (Graphics g = Graphics.FromImage(b)) { Rectangle rectanglePanelVideoPreview = panelVideoPreview.Bounds; Point sourcePoints = panelVideoPreview.PointToScreen(new Point(panelVideoPreview.ClientRectangle.X, panelVideoPreview.ClientRectangle.Y)); g.CopyFromScreen(sourcePoints, Point.Empty, rectanglePanelVideoPreview.Size); } return b; } else { Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height); return b; } } 这是将Bitmap转换为布尔数组的代码: public bool[,] […]

De Bruijn算法二进制数字计数64位C#

我使用“De Bruijn”算法来发现大数(最多64位)的二进制位数。 例如: 1022具有10位二进制数字。 130具有8位二进制数字。 我发现使用基于De Bruijn的表查找使我有能力比传统方式(功率,方形……)计算x100倍。 根据该网站 ,2 ^ 6具有用于计算64位数的表。 这将是c#中暴露的表 static readonly int[] MultiplyDeBruijnBitPosition2 = new int[64] { 0,1,2,4,8,17,34,5,11,23,47,31,63,62,61,59, 55,46,29,58,53,43,22,44,24,49,35,7,15,30,60,57, 51,38,12,25,50,36,9,18,37,10,21,42,20,41,19,39, 14,28,56,48,33,3,6,13,27,54,45,26,52,40,16,32 }; (我不知道我是否正确地从该网站带来了桌子)然后,基于R ..评论在这里 。 我应该使用它来使用输入uint64号码的表。 public static int GetLog2_DeBruijn(ulong v) { return MultiplyDeBruijnBitPosition2[(ulong)(v * 0x022fdd63cc95386dull) >> 58]; } 但是c#编译器不允许我使用“ 0x022fdd63cc95386dull ”,因为它溢出了64位 。 我必须使用“ 0x022fdd63cc95386d ”代替。 使用这些代码。 问题是我没有得到给定输入的正确结果。 例如,做1.000.000计算的数字:17012389719861204799(使用64位)这是结果: 使用pow2方法我在1380ms内得到64百万次的结果。 使用DeBruijn方法,我在32ms内得到结果40 1百万次。 […]

如何获取和设置图像的propertyitems

我试图理解Bitmap或Image的这两种方法。 一个是.SetPropertyItem() ,另一个是.GetPropertyItem() 。 我完全混淆了文档说我要设置属性项的方式。 从Microsoft文档中,它声明我们应该通过图像中已存在的属性项的id选择属性项,为该属性项提供新ID,设置属性,然后使用该检索到的属性设置image属性项项目。 这太奇怪了,但真正让我感到的是,我们不能只将属性项的id设置为我们必须将属性项id设置为属性项ID列表中已存在的id的任何ID。 令人困惑的是,我正在使用已经通过其他方式设置并覆盖其属性的属性,然后将其添加回图像,其中包含来自属性ID列表的其他现有ID。 我在这里想念的是什么? 有没有办法简单地创建一个新的PropertyItem,然后将具有任何给定ID的属性项添加到图像或位图? 这是我正在谈论的一个例子。 20752的ID是图像已有的属性,当我设置PropertyItem的ID时,20753是Image所具有的ID。 这将成功设置属性项。 private void Form1_Load(object sender, EventArgs e) { string path = Environment.CurrentDirectory + @”\sample.png”; Image image = Image.FromFile(path); PropertyItem pi = image.GetPropertyItem(20752); pi.Id = 20753; pi.Type = 1; pi.Value = Encoding.UTF8.GetBytes(“MyImageInfo”); pi.Len = pi.Value.Length; image.SetPropertyItem(pi); image.Save(Environment.CurrentDirectory + @”\sample2.png”); } 这将成功检索PropertyItem。 private void Form1_Load(object […]

Bitmap.LockBits是否将位图“固定”到内存中?

我最近使用锁定的位图,并且一直“试图访问无效内存”错误。 这主要是因为位图已在内存中移动。 有些人使用GCHandle.Alloc()在CLR中分配内存并固定它。 Bitmap.LockBits()也这样做吗? 我不明白“锁定”内存和“固定”内存之间的区别。 你能解释术语和差异吗?

LockBits图像旋转方法不起作用?

大家好。 在厌倦了Get / Set Pixel和RotateTransfom的缓慢性能和古怪行为之后,我使用LockBits进行2D位图图像旋转。 所以这是我提出的代码,通过我的计算,它应该完美地工作。 它没有。 private static void InternalRotateImage(Bitmap originalBitmap, Bitmap rotatedBitmap, PointF centerPoint, float theta) { BitmapData originalData = originalBitmap.LockBits( new Rectangle(0, 0, originalBitmap.Width, originalBitmap.Height), ImageLockMode.ReadOnly, originalBitmap.PixelFormat); BitmapData rotatedData = rotatedBitmap.LockBits( new Rectangle(0, 0, rotatedBitmap.Width, rotatedBitmap.Height), ImageLockMode.WriteOnly, rotatedBitmap.PixelFormat); unsafe { byte[,] A = new byte[originalData.Height * 2, originalBitmap.Width * 2]; byte[,] R […]

c#中布尔值的二进制表示forms是什么

我知道布尔值是1个字节(8位长)但我想知道它的二进制表示是什么。 例如decimal => binary 4 => 100(0000 0100)8 => 1000(0000 1000)bool值=> ???