小编Big*_*les的帖子

数码相机算法

我正在研究一个简单的视频设备,我想介绍一些标准的酷相机功能.其中我想介绍一下

  • 重点指标
  • 自动对焦
  • 自动曝光(理想曝光时间估算)

现在我正在寻找一些例子,如何实现这些功能.你有任何有用的链接吗?

编辑:好的,我将使用标准的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)

c# algorithm camera image-processing

24
推荐指数
2
解决办法
6163
查看次数

如何创建Bitmap深层副本

我在我的应用程序中处理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深层副本.感谢那 :)

c# bitmap deep-copy

20
推荐指数
1
解决办法
1万
查看次数

是否有一个孩子实施了一个界面而另一个没有违反Liskov替换原则?

我最近一直在考虑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

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

SQL查询中使用的表的列表

有没有办法获取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)

谢谢

c# sql

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

计时器之谜 - Forms.Timer与Threading.Timer

今天我遇到了一个非常有趣的问题,我很幸运能够很快解决,但是我想知道问题的本质.

我写了一个管理操纵杆动作的控件类.我想启动一些操作并在按钮单击时启动计时器,并在计时器间隔后停止此操作.

我有一个类(伪代码),如下所示:

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重写了它,突然它开始在两个应用程序中工作.我们都不知道为什么会这样.

我知道我的问题很模糊,但可能是这个问题的根源?

谢谢

c# timer

3
推荐指数
1
解决办法
379
查看次数

PetaPoco无法使用Guid newid主键插入记录

我正在尝试使用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# sql-server petapoco

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