我正在研究一个简单的视频设备,我想介绍一些标准的酷相机功能.其中我想介绍一下
现在我正在寻找一些例子,如何实现这些功能.你有任何有用的链接吗?
编辑:好的,我将使用标准的CCD相机,它可以提供约20fps的~1MPix分辨率.我打算用C#编写它,如果出现性能问题,我会使用C++.我将有镜头+ CCD相机+电机.
编辑:我想看一些更详细的算法描述.我肯定有些人必须在大学课程中教授,但我找不到一些麻烦.对于焦点指示器我尝试了一种原始方法,但在某些情况下它失败了.
int verticalPoints = 0, horizontalPoints = 0;
///Calculate the vertical differences
for (int x = 0; x < toAnalyze.Width; x++)
{
for (int y = 1; y < toAnalyze.Height; y++)
{
byte* pixel = (byte*)data.Scan0 + y * stride + x;
verticalDiff += Math.Abs(*pixel - *(pixel - stride));;
}
}
verticalDiff /= toAnalyze.Width * (toAnalyze.Height-1);
///Calculate horizontal differences
for (int y = 0; y < toAnalyze.Height; y++)
{
for (int x = …
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中处理Bitmaps,出于某些目的,我需要创建Bitmap的深层副本.有一种优雅的方式怎么做?
我试过了
Bitmap deepCopy = original.Clone();
Run Code Online (Sandbox Code Playgroud)
,显然这不会创建一个深层副本,而是浅层副本.我的下一个尝试是创建一个新的位图
Bitmap deepCopy = new Bitmap(original);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个构造函数是Bitmap(Image),而不是Bitmap(Bitmap),而Bitmap(Image)会将我漂亮的8bppIndexed Pixelformat转换为另一个.
另一种尝试是使用MemoryStream
public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
Bitmap result;
using (MemoryStream stream = new MemoryStream())
{
source.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
result = new Bitmap(stream);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
好吧,这也不起作用,因为必须在Bitmap的整个生命周期内打开MemoryStream.
所以,我总结了所有的后端,我真的很想看到一个很好的优雅方式来创建一个Bitmap深层副本.感谢那 :)
我最近一直在考虑Liskov替换原则以及它与我当前任务的关系.我有一个包含菜单的主表单; 在这个主要表单中,我将一个特定的表单作为MDI子对接.此特定表单可能包含也可能不包含菜单.如果是,我想将它与主菜单合并.所以情况是这样的:
public class MainForm
{
public void Dock(SpecificBaseForm childForm)
{
this.Dock(childForm);
if (childForm is IHaveMenu)
{
this.Menu.Merge(childForm as IHaveMenu).Menu;
}
}
}
public interface IHaveMenu
{
Menu Menu {get;}
}
public abstract class SpecificBaseForm{}
public class SpecificFormFoo : SpecificBaseForm {}
public class SpecificFormBar: SpecificBaseForm,IHaveMenu
{
public Menu Menu{get {return this.Menu;}}
}
Run Code Online (Sandbox Code Playgroud)
现在这两个孩子并不是"完全"可互换的:一个有菜单; 另一个没有.这是在C#中误用is/as contruct吗?如果这不正确,那么干净的解决方案是什么?
c# design-patterns single-responsibility-principle design-principles solid-principles
有没有办法获取SQL查询中使用的表列表?示例:我有类似的东西:
SELECT * FROM Table t JOIN OtherTable ON t.id=OtherTable.t_id
Run Code Online (Sandbox Code Playgroud)
我希望得到
Table, OtherTable
Run Code Online (Sandbox Code Playgroud)
谢谢
今天我遇到了一个非常有趣的问题,我很幸运能够很快解决,但是我想知道问题的本质.
我写了一个管理操纵杆动作的控件类.我想启动一些操作并在按钮单击时启动计时器,并在计时器间隔后停止此操作.
我有一个类(伪代码),如下所示:
public class Joystick : UserControl
{
private Form.Timer timer; //or System.Threading.Timer
public void Init()
{
timer.Tick += new EventHandler(timerCallback) //Threading.Timer(timerCallback)
timer.Stop();//timer.Change(Timeout.Infinite, Timeout.Infinite);
}
public void ButtonCallback()
{
StartSomething();
timer.Stop();
timer.Start(); //timer.Change(500, Timeout.Infinite);
}
public void timerCallback()
{
StopSomething();
timer.Stop();//timer.Change(Timeout.Infinite, Timeout.Infinite);
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个应用程序,一个是非常简单的(只是一个表单),第二个是更复杂的,但是这个复杂性背后仍然是一个包含这个UserControl的普通Form(好的DotNetMagicForm).管理代码在两个应用程序中完全相同,但在更复杂的应用程序中,从未调用过timerCallback().简单来说,一切都很好.在两种情况下都会调用init(断点).即使我在ButtonCallback中分配timerCallback - 仍未调用timerCallback.
我按照我的同事的建议,并使用Threading.Timer而不是Forms.Timer重写了它,突然它开始在两个应用程序中工作.我们都不知道为什么会这样.
我知道我的问题很模糊,但可能是这个问题的根源?
谢谢
我正在尝试使用Peta POCO ORM,我非常喜欢它,但是有一件事我无法工作.我正在使用MS SQL和带uniqueidentifier的表作为主键.但是,当我插入新记录时,POCO会抛出一个InvalidCastException,试图将DBNull强制转换为Guid.我创造了一个简单的例子.MS SQL表定义:
CREATE TABLE MyTable
(
id uniqueidentifier NOT NULL DEFAULT newid(),
name nvarchar(50) NULL,
surname nvarchar(50) NULL,
CONSTRAINT pk_MyTable PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
然后在C#中我有:
[PetaPoco.TableName("MyTable")]
[PetaPoco.PrimaryKey("id")]
public class MyTable
{
public Guid id { get; set; }
public string name { get; set; }
public string surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后我尝试插入新记录:
using (var conn = new SqlConnection(myConnString))
{
conn.Open()
using (var db = new PetaPoco.Database(conn))
{
for (int i = 0; i < 3; …
Run Code Online (Sandbox Code Playgroud) c# ×6
algorithm ×1
bitmap ×1
camera ×1
deep-copy ×1
petapoco ×1
single-responsibility-principle ×1
sql ×1
sql-server ×1
timer ×1