我的高效编程秘诀

1、解锁 Ruby 编程的高效秘诀 本文深入探讨了Ruby编程的多个核心领域,包括Ruby语言的发展与魅力、代码测试的关键要点、API设计的实用技巧、动态工具包的掌握、文本处理与文件管理、函数式编程技巧、问题处理与调试、文化障碍的消除以及项目维护的技巧。同时,补充了编写兼容代码、利用标准库及避免不良实践等重要知识点。通过全面学习和实践,开发者可以提升Ruby编程的效率与代码质量,为构建高效、可维护的应用程序打下坚实基础。 阅读详情

DanielBMarkham曾发表博文《To code quickly, you must quit coding》,文中他为我们分享了高效编程的几个秘诀。《外刊IT评论》对本文进行了翻译,现转载于此,全文如下:
昨天我做了一些事情使我的编程效率提高了一倍。简单,容易,但使我的生活发生了巨大的变化。

你们中可能有些人已经知道我是怎么做的。对于其他的人,这听起来有些疯狂。

我不持续工作。

或者,我把定时器设置成50分钟,在此期间我只干一件事——没Email,没聊天工具,没游戏,没分心的事。50分钟后,我去散步。

它使我效率增倍。而且作为一个副作用,它使我的工作更加快乐。

我知道你们中的很多人在想什么。无论何时这个(或其它特别的Pomodoro技巧)被提及时,我都会听到各种的常见的怀疑声。

那就让我们一一看来:

这样做不会使我的注意力不能集中在我正要努力解决的难题上吗?很奇怪,跟你的直觉相反,不会。当你做其它的事情来放松你的神经时,你的大脑却仍然在思考你的问题。很多次,思路豁然开朗,把很多一直都无法解决的难题都解决掉了,这是因为你开始从远处观察这个问题,在大背景下,而不是紧紧的死揪着某处。

你是怎么停下来的?当我编程时我从来不看表。昨天我使用的是微波炉的定时器,但我工作效率上的变化使我大为震惊,我买了一个秒表,就是上面图中的那个。

我的生活中有太多的各种各样的打搅我的事情,邮件,聊天工具,电话短信。你的方法对我不管用。我有个原则:在我的工作时间里不允许有分心的东西。当我休息完后,我会花几分钟把这种分心的事情处理掉:检查邮件,回复聊天软件里的消息,回电话。当把这些事情全做完后我才开始启动定时器。

看起来它会给我的生活带来不必要的压力。的确会,但却是积极性质的。我发现自己急切的想知道在每个工作时间段里 能究竟能做多少工作。我不由的开始把工作细化成更小的模块,催促自己看是否能在这时间段里完成这个模块。但这没有压力。我有个更好的词来描述督促自己把工 作完成的更好更高效的现象:愉快。我很愉快。它把难题变成了游戏。

工作后你会用多长时间来休闲? 我不知道。这难住我了。我会去散步 — 一个足够长的散步,至少10分钟。有时我会到阳台上,吃个橘子,听听大自然的声音。有时我会把秒表倒计时10分钟,以免我回来的太早。

在休息时间我可以做任何想做的活动吗? 我想不能。我觉得你必须只做一种活动,让你大脑闲置的活动。散步,乒乓,玩乐器,发呆,打盹。考虑那些温和的、有目标挑战的活动 — 特别是户外的 — 效果会更好,但这只是我的猜测。

这里有什么秘密? 秘密,以我个人的见解,是当你强迫大脑释放缠绕很久的问题时,潜意识里会使它缠绕的更紧:你的大脑强烈希望回到问题上。于是它会一直研究它,思考它。你越 使你的大脑从工作上拽走,它就越强的返回到工作中。越是特意的停止工作,你越更多的投入到问题中,你把思想带离工作越远,思想会越想回去。这比起你死盯着 电脑屏幕/敲出一堆垃圾代码来,你的大脑会更有效率的多。退一步,海阔天空。我可以保证,当你又重新回到座位上坐下来时,你会有各种更好的该怎么样做的想 法。就像是有一个小程序、设计评审程序,当你在玩乐时,在你的大脑深处后台运行,帮你思考问题。

如果你非常的聪明,怎么会想到要依赖这样的做法? 这个嘛。这里我的故事要转向说一下坏的事情:我过去做事情也是这样“玩玩干干”!事实上,我的工作时间和娱乐时间的分配已经无法控制。我以前编程就像是在受煎熬。我决定要改变。

为什么?因为我发现当浏览器变得越来越友好,计算机变得约来越使人分心时,我开始在潜意识里把计算机的娱乐功能和工作功能混淆在一起了。我工作一会儿,就去看看骇客新闻,再去读几篇有趣的文章,然后再工作一会儿,然后写几条评论,然后看看邮件,等等。

回头一想我在做什么?很显然:我正在拿各种各样新鲜刺激的事物过程来轰炸我的大脑。我的大脑不能工作在我的“主要”问题上,因为我忙着来回折腾在数 十个不同的产生刺激因素的事物过程中。事后你会发现这最后的结果是把一心只放到一件编程事情上的情况转变成一心放在了很多事情上,而这些事情都跟编程没有 关系。如果你喜欢使用计算机进行娱乐活动,你可以在工作前,午餐时,或工作休息期间。我越观察现代的计算机活动,我越相信计算机功能繁多、使娱乐更方便的 性质已经严重的跟它作为一种能够生产工作的机器的用途相抵触了。几年来,我甚至慢慢的停止了赛场运动,约来越多的时间“沉浸”在了计算机世界里。这对你的 大脑不是件好事,请相信我。

这是一个很简单的事情,你也许会很难想象到它会有什么用处。但请给自己一次机会 — 谁能预料你会有什么发现呢?

作为一个边注,从所有的这些事情,我发现物理的把你的电子设备按功能分离开也许是另外一个能提高你的工作效率的好方法。(这是一个防止你把消极的电子设备和消极的设备之间的界限弄混淆的方法)

如何让编程效率提高了一倍,高效编程的秘诀有什么呢?不持续工作,集中精力干50分钟后就去散步。是作者总结出的提高编程效率的一个秘诀。
以上是DanielBMarkham的观点


对高效编程每个人都有 不同观点.
举个图形操作例子:
需要用到获取或设置像素颜色方法:GetPixel 和 SetPixel,如果直接对这两个方法进行操作的话速度很慢
图形操作有两种方式,1是内存法,2是指针法.

1、内存法
 public class LockBp
        {
            Bitmap source = null;
            IntPtr Iptr = IntPtr.Zero;
            BitmapData bitmapData = null;

            public byte[] Pixels { get; set; }
            public int Depth { get; private set; }
            public int Width { get; private set; }
            public int Height { get; private set; }

            public LockBp(Bitmap source)
            {
                this.source = source;
            }

            /// <summary>
            /// Lock bitmap data
            /// </summary>
            public void LockBits()
            {
                try
                {
                    // Get width and height of bitmap
                    Width = source.Width;
                    Height = source.Height;

                    // get total locked pixels count
                    int PixelCount = Width * Height;

                    // Create rectangle to lock
                    Rectangle rect = new Rectangle(0, 0, Width, Height);

                    // get source bitmap pixel format size
                    Depth = System.Drawing.Bitmap.GetPixelFormatSize(source.PixelFormat);

                    // Check if bpp (Bits Per Pixel) is 8, 24, or 32
                    if (Depth != 8 && Depth != 24 && Depth != 32)
                    {
                        throw new ArgumentException("Only 8, 24 and 32 bpp images are supported.");
                    }

                    // Lock bitmap and return bitmap data
                    bitmapData = source.LockBits(rect, ImageLockMode.ReadWrite,
                                                 source.PixelFormat);

                    // create byte array to copy pixel values
                    int step = Depth / 8;
                    Pixels = new byte[PixelCount * step];
                    Iptr = bitmapData.Scan0;

                    // Copy data from pointer to array
                    Marshal.Copy(Iptr, Pixels, 0, Pixels.Length);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            /// <summary>
            /// Unlock bitmap data
            /// </summary>
            public void UnlockBits()
            {
                try
                {
                    // Copy data from byte array to pointer
                    Marshal.Copy(Pixels, 0, Iptr, Pixels.Length);

                    // Unlock bitmap data
                    source.UnlockBits(bitmapData);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            /// <summary>
            /// Get the color of the specified pixel
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            public Color GetPixel(int x, int y)
            {
                Color clr = Color.Empty;

                // Get color components count
                int cCount = Depth / 8;

                // Get start index of the specified pixel
                int i = ((y * Width) + x) * cCount;

                if (i > Pixels.Length - cCount)
                    throw new IndexOutOfRangeException();

                if (Depth == 32) // For 32 bpp get Red, Green, Blue and Alpha
                {
                    byte b = Pixels[i];
                    byte g = Pixels[i + 1];
                    byte r = Pixels[i + 2];
                    byte a = Pixels[i + 3]; // a
                    clr = Color.FromArgb(a, r, g, b);
                }
                if (Depth == 24) // For 24 bpp get Red, Green and Blue
                {
                    byte b = Pixels[i];
                    byte g = Pixels[i + 1];
                    byte r = Pixels[i + 2];
                    clr = Color.FromArgb(r, g, b);
                }
                if (Depth == 8)
                // For 8 bpp get color value (Red, Green and Blue values are the same)
                {
                    byte c = Pixels[i];
                    clr = Color.FromArgb(c, c, c);
                }
                return clr;
            }

            /// <summary>
            /// Set the color of the specified pixel
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <param name="color"></param>
            public void SetPixel(int x, int y, Color color)
            {
                // Get color components count
                int cCount = Depth / 8;

                // Get start index of the specified pixel
                int i = ((y * Width) + x) * cCount;

                if (Depth == 32) // For 32 bpp set Red, Green, Blue and Alpha
                {
                    Pixels[i] = color.B;
                    Pixels[i + 1] = color.G;
                    Pixels[i + 2] = color.R;
                    Pixels[i + 3] = color.A;
                }
                if (Depth == 24) // For 24 bpp set Red, Green and Blue
                {
                    Pixels[i] = color.B;
                    Pixels[i + 1] = color.G;
                    Pixels[i + 2] = color.R;
                }
                if (Depth == 8)
                // For 8 bpp set color value (Red, Green and Blue values are the same)
                {
                    Pixels[i] = color.B;
                }
            }
        }

  使用:先锁定Bitmap,然后通过Pixels操作颜色对象,最后释放锁,把数据更新到Bitmap中

            string file = @"H:\lo.jpg";
            Bitmap bmp = new Bitmap(Image.FromFile(file));

            LockBp lockbmp = new LockBp(bmp);
            //锁定Bitmap,通过Pixel访问颜色
            lockbmp.LockBits();

            //获取颜色
            Color color = lockbmp.GetPixel(10, 10);

            //从内存解锁Bitmap
            lockbmp.UnlockBits();




2、指针法
这种方法访问速度比内存法更快,直接通过指针对内存进行操作,不需要进行拷贝,但是在C# 中直接通过指针操作内存是不安全的,所以需要在代码中加入unsafe关键字,在生成选项中把允许不安全代码勾上,才能编译通过

  public class PointBitmap
            {
                Bitmap source = null;
                IntPtr Iptr = IntPtr.Zero;
                BitmapData bitmapData = null;

                public int Depth { get; private set; }
                public int Width { get; private set; }
                public int Height { get; private set; }

                public PointBitmap(Bitmap source)
                {
                    this.source = source;
                }

                public void LockBits()
                {
                    try
                    {
                        // Get width and height of bitmap
                        Width = source.Width;
                        Height = source.Height;

                        // get total locked pixels count
                        int PixelCount = Width * Height;

                        // Create rectangle to lock
                        Rectangle rect = new Rectangle(0, 0, Width, Height);

                        // get source bitmap pixel format size
                        Depth = System.Drawing.Bitmap.GetPixelFormatSize(source.PixelFormat);

                        // Check if bpp (Bits Per Pixel) is 8, 24, or 32
                        if (Depth != 8 && Depth != 24 && Depth != 32)
                        {
                            throw new ArgumentException("Only 8, 24 and 32 bpp images are supported.");
                        }

                        // Lock bitmap and return bitmap data
                        bitmapData = source.LockBits(rect, ImageLockMode.ReadWrite,
                                                     source.PixelFormat);

                        //得到首地址
                        unsafe
                        {
                            Iptr = bitmapData.Scan0;
                            //二维图像循环

                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                public void UnlockBits()
                {
                    try
                    {
                        source.UnlockBits(bitmapData);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                public Color GetPixel(int x, int y)
                {
                    unsafe
                    {
                        byte* ptr = (byte*)Iptr;
                        ptr = ptr + bitmapData.Stride * y;
                        ptr += Depth * x / 8;
                        Color c = Color.Empty;
                        if (Depth == 32)
                        {
                            int a = ptr[3];
                            int r = ptr[2];
                            int g = ptr[1];
                            int b = ptr[0];
                            c = Color.FromArgb(a, r, g, b);
                        }
                        else if (Depth == 24)
                        {
                            int r = ptr[2];
                            int g = ptr[1];
                            int b = ptr[0];
                            c = Color.FromArgb(r, g, b);
                        }
                        else if (Depth == 8)
                        {
                            int r = ptr[0];
                            c = Color.FromArgb(r, r, r);
                        }
                        return c;
                    }
                }

                public void SetPixel(int x, int y, Color c)
                {
                    unsafe
                    {
                        byte* ptr = (byte*)Iptr;
                        ptr = ptr + bitmapData.Stride * y;
                        ptr += Depth * x / 8;
                        if (Depth == 32)
                        {
                            ptr[3] = c.A;
                            ptr[2] = c.R;
                            ptr[1] = c.G;
                            ptr[0] = c.B;
                        }
                        else if (Depth == 24)
                        {
                            ptr[2] = c.R;
                            ptr[1] = c.G;
                            ptr[0] = c.B;
                        }
                        else if (Depth == 8)
                        {
                            ptr[2] = c.R;
                            ptr[1] = c.G;
                            ptr[0] = c.B;
                        }
                    }
                }
            }

还有一些c#秘诀

以前的代码是这样写的

public class Pers
    {

        private string _trueName;
        private string _nickName;
        private int _age;

        public string TrueName 
        {
            get {
                return _trueName;
            }
            set {
                _trueName= value;
            }
        }

        public string NickName 
        {
            get {
                return _nickName;
            }
            set {
                _nickName= value;
            }
        }

        public int Age 
        {

            get {
                return _age;
            }
            set {
                _age = value;
            }
        }
    } 

后来08可以这样写

public class Pers
    {
        public string TrueName {    get; set;        }
        public string NickName {    get; set;        }
        public int Age {     get; set;        }
    } 

以前是

 Pers person = new Pers();
   person.TrueName = "Csdn";
   person.NickName = "全球最大中文IT社区";
   person.Age = 16; 

现在可以:

 Persperson = new Pers { TrueName="Csdn", NickName = "全球最大中文IT社区", Age=16 }; //一行搞定,真是方便!
List<Pers> people = new List<Pers> {
      new Person { TrueName = "Csdn", NickName = "全球最大中文IT社区", Age = 16 },
      new Person { TrueName = "BillG", NickName = "比尔大哥", Age = 40 },
      new Person { TrueName = "Jim", NickName = "帅哥", Age = 20 }
   }; 

秘诀千变万化,高效是编码速度,程序运行速度是一个软件是否得到更多人使用。

高效学习3D视觉编程的秘诀 通过以上代码,你可以生成随机的3D点云数据,并实现点云坐标的平移、协方差矩阵的计算、特征值分解和点云投影等基本操作。选择一些具体的3D视觉编程项目,如目标检测、图像分割或立体视觉等,逐步实践,并通过不断调试和优化提升自己的技能。这些资源可以帮助你系统地学习3D视觉编程的各个方面,提供实例代码和案例,加深理解。不断挑战自我:保持学习的热情和动力,尝试解决更复杂的问题,参与开源项目或比赛等,不断挑战自己,提高编程能力和解决问题的能力。划定学习时间:制定合理的学习计划,每天保留固定的时间用于学习3D视觉编程。 阅读详情

相关推荐

26、打造高效编程团队的管理秘诀

本文探讨了打造高效编程团队的关键管理秘诀,涵盖了建立文化、以身作则、技术问题解决、管理与辅导、关注员工、享受乐趣、学习与成长以及良好工作条件的营造策略。通过详细的分析和实践建议,为管理者提供了全面的指导方案,以提升团队效率和员工满意度。

peach的博客 103

高效编程

聊聊我的高效编程之路 摘要:在程序开发过程中,一些IDE的配置、常用代类的积累以及常用框架的使用。能帮助我们迅速写好代码,快速定位错误。同时,又有利于我们快速构造和部署,以及进行后续的迭代开发。本文主要从IDE的配置、代码的规范、常用代码的积累等方面来聊下自己一些编程方面的见解。 目录: 一、IDE配置篇 二、规范工程篇 三、常用代码篇 四、常用框架篇 五

攻城狮Luke 1487

高效前端:Web高效编程与优化实践

《高效前端:Web高效编程与优化实践》该版为非高清版,比正常扫描版清晰

《QT - QT开发笔记》第1章 Qt入门简介

1.1 Qt简介 Qt是桌面,嵌入式和移动的跨平台应用开发框架。支持的平台包括Linux,OS X,Windows,VxWorks,QNX,Android,iOS,BlackBerry,Sailfish OS等。 Qt本身不是一种编程语言。它是一个用C ++编写的框架。但它不仅仅只是一个GUI工具包,它提供了在网络,数据库,OpenGL,Web技术,传感器,通信协议(蓝牙,串行端口,NFC),...

不问归期的博客 1652

只有高手才会的C语言高效编程方法

编写高效简洁的C 语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。

Pyinstaller 打包 Pyzbar 时缺失 DLL 文件的排查与修复指南

本文详细解析了使用Pyinstaller打包Pyzbar库时,因缺失关键DLL文件导致程序闪退的常见问题。文章提供了从问题复现、错误诊断到最终修复的完整解决方案,核心在于通过修改.spec配置文件,手动将缺失的libzbar-64.dll等文件添加到打包过程中,确保生成的可执行文件能独立运行。

wdx012345的博客 502

QT常用模块

[Qt]常用实用Qt小模块(经典) 猫哥 发布于 2016-03-16 0:website http://quitcoding.com/ 1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegExpValidator(regExp,this)); lineEdit->setValidator(new QRegExpValidator(regExp,this)); 2:QObjec

qq_20189555的博客 922

组态王|通过日历控件选择时间段查询历史报警

哈喽,你好啊,我是雷工!这节记录下查询历史报警信息的功能实现。以下为实现笔记。

做有价值的事,积累有价值的笔记! 3762

高效编程的11条规则

  这绝不是详尽无遗的清单,而是我在IT工作了数年之后的主观排名。 希望您发现其中一些有用的      以下链接提供了该文章的俄语版本   谢谢吉娜!   1.童子军规则   "一定要让营地的清洁剂比您发现的要干净"-这是一个很好的生活准则。 当您靠近营地时,即使不是由您自己造成的,也应使其清洁。 这是侦察兵的规则之一。 编程同样适用。 正如罗伯特·C·马丁(Robert C. Martin)所说:"让代码比发现的要好"。 如果我们发现别人写的一些难以阅读的应用程序,并且花了一些时间来理解..

linjingyg的博客 347

从零开始:QNX SDP 8.0开发环境搭建与实战入门

本文详细介绍了如何从零开始搭建QNX SDP 8.0开发环境并进行实战入门。内容涵盖许可证获取、环境安装、命令行与IDE工具使用、BSP构建、系统镜像生成,以及编写、编译和运行第一个QNX程序的全过程。旨在帮助嵌入式开发者,特别是汽车电子和工业控制领域的工程师,快速掌握这一实时操作系统(RTOS)的开发基础。

weixin_29163857的博客 640

Masta调用Geometry Modeller(Space Claim)进行根据三维模型快速建模设置方法

masta中调用ANSYS的space claim的设置方法

xifegnlie的博客 240

【转】高效编程的秘诀

DanielBMarkham曾发表博文《To code quickly, you must quit coding》,文中他为我们分享了高效编程的几个秘诀。《外刊IT评论》对本文进行了翻译,现转载于此,全文如下:昨天我做了一些事情使我的编程效率提高了一倍。简单,容易,但使我的生活发生了巨大的变化。你们中可能有些人已经知道我是怎么做的。对于其他的人,这听起来有些疯狂。我不持续工作。或者,我把定时器设...

weixin_30655219的博客 163

介绍七种常见还危险的病毒(带样本)

简介:能够感染用户计算机bai系统中的.exe、.dll和.html文件,将自身加密以后缀加到目标文件中。样本(源文件):https://wwx.lanzoux.com/iJx4njrpz1c / https://wwx.lanzoui.com/iYRNLwd8ldc。英文名称:Virus.Win32.Viking.A(标准) / Worm.Win32.Fujack.A(标准)英文名称:Net-Worm.Win32.Blaster.A(标准)/ Lovesan.A/ Msblast.A。

2301_78858007的博客 8381

第一期博客征文《我的高效编程秘诀》获奖名单揭晓

让各位小伙伴久等啦! 第一期博客征文《我的高效编程秘诀》终于落下帷幕,下面跟大家分享一下技术干货,快来一起看看吧! 排名 标题 文章地址 1 iOS_高效开发之道 http://ink.youkuaiyun.com/articles/show/55ebd185934b5add1714dfb6  2 高效程序员的狂暴之路 http://ink.csdn.n

优快云 官方博客 2万+

小红书私信接口与Hook技术实战:微信跳转卡片的合规与破解之道

本文深入探讨了小红书私信接口与Hook技术的实战应用,重点解析了微信跳转卡片的合规使用与破解方法。通过官方私信接口的合规玩法与Xposed框架的Hook技术对比,为开发者提供了技术选型指南和实战建议,帮助实现高效的用户跳转与转化。

weixin_30399821的博客 730

2023华为od机试C卷【最富裕的小家庭】C语言 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 499

高效编程的秘诀

来自:http://sd.youkuaiyun.com/a/20101130/282739.htmlDanielBMarkham曾发表博文《To code quickly, you must quit coding》,文中他为我们分享了高效编程的几个秘诀。《外刊IT评论》对本文进行了翻译,现转载于此,全文如下:昨天我做了一些事情使我的编程效率提高了一倍。简单,容易,但使我的生活发生了巨大的变化。你们中可能有些人已经知道我是怎么做的。对于其他的人,这听起来有些疯狂。我不持续工作。或者,我把定时器设置成50分钟,在此期间我

Ailoloke的专栏 541

SAP 实例解析分期付款配置及应用

SAP系统的付款条件支持分期付款功能,其奥妙之处就在于需要定义一个母条款和一个子条款,其中,母条款需要标识“分期付款”。 首先,定义分期付款的母条款OBB8:             然后,定义子条款(即分期付款的具体方式)OBB9:   由上图可以看出,分期付款的配置还是很强大的,针对每次付款,都可以进行第二层次付款条件的设置。   然后,我们做一笔发票,

heng0757的专栏 1万+

Python从入门到实践掌握高效编程的秘诀

使用清晰的变量命名、避免冗余代码、充分利用Python的内置特性,能让代码既易于维护又运行高效。理解GIL(全局解释器锁)的限制并选择合适的并发模型,是Python高性能编程的关键。虽然Python是动态类型语言,但使用类型注解(Type Hints)不仅能提高代码可读性和可维护性,还能帮助IDE提供更好的代码补全和错误检查,间接提高开发效率。使用with语句和上下文管理器确保资源(如文件、网络连接)的及时释放,不仅能避免资源泄漏,还能使代码更加清晰。记住,不必要的优化可能反而降低代码可读性。

qq_32692911的博客 302

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Geek(极客) 头条分析
下一篇: 关于Csdn水区被占领一事 (2015-08-01)
程序员鼓励师
博客等级 码龄21年 320粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值