强强的个人技术博客 医技科室软件(PACS, RIS)码农

在C#中使用OpenCV(使用OpenCVSharp)

1、什么是OpenCVSharp

      为了解决在Csharp下编写OpenCV程序的问题,我做过比较深入的研究,并且实现了高效可用的方法(GOCW);这几天在搜集资料的时候,偶尔看见了OpenCVSharp,从时间上来看,它已经经过了更久的发展,应该有许多直接借鉴、或者直接使用的地方。

       OpenCVSharp有一名日本工程师开发,项目地址为:https://github.com/shimat/opencvsharp。其是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV,并且有很多的样例参考,其采用LGPL发行,对商业应用友好(基本上相当于BSD)。

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

NET(C#):线程本地存储(Thread-Local Storage)

1. 使用ThreadStatic特性
ThreadStatic特性是最简单的TLS使用,且只支持静态字段,只需要在字段上标记这个特性就可以了:

//TLS中的str变量
[ThreadStatic]

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

C# 利用MetadataType 实现对象统一验证

       在我们开发过程中经常会遇到数据有效性性验证,例如非空验证,长度验证以及其他验证,如果每个方法单独验证会导致方法入口一堆重复的代码,如果利用MetadataType进行统一验证就能减少很多重复的代码

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

基于.NET平台常用的框架整理

NET常用的一些开源组件整理:

1.导出Excel报表的插件:NOPI.dll(基于微软OpenXml实现)

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

常见的 软件操作SQL[iEIS]

1.备份模板表:

create table t_repttempback1
as
select * from t_repttemp


2022年11月8日 | 发布:强强 | 分类:PACS业务知识 | 评论:0

Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法

Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法
原因:
Scrapy需要的组 twisted 需要 C++环境编译。

方法一:
根据错误提示去对应的网站下载C++ 14.0  ,然后重新安装

方法二:
直接下载对应系统的whl 安装

2022年11月8日 | 发布:强强 | 分类:日常 | 评论:0

远程映射错误 “发生系统错误 1312 指定的登录会话不存在。可能已被终止 IIS 访问 远程共享目录”

远程映射错误 “发生系统错误 1312 指定的登录会话不存在。可能已被终止 IIS 访问 远程共享目录”


最近和其他公司做接口,需要将数据上传给对方。

我们发送程序部署在前置机上,文件在内网数据中。需要映射到文件服务器后上传数据。本机vs开发是可以映射成功,但是部署到远程的IIS中,就不能成功.

报错: 1312 指定的登录会话不存在。可能已被终止 IIS 访问 远程共享目录

2022年11月8日 | 发布:强强 | 分类:日常 | 评论:0

C# 代码记录 可序列化对象拷贝

程序开发中经常遇到对象复制的,C#有浅拷贝和深拷贝的区别,避免浅拷贝的复制一个办法,就是可序列化对象的序列化复制



    /// <summary>
    /// 序列号复制类
    /// </summary>
    public class SerializeHelper
    {
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        public static string Serializable(object target)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                new BinaryFormatter().Serialize(stream, target);
                return Convert.ToBase64String(stream.ToArray());
            }
        }
        /// <summary>
        /// 反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="target"></param>
        /// <returns></returns>
        public static T Derializable<T>(string target)
        {
            byte[] targetArray = Convert.FromBase64String(target);
            using (MemoryStream stream = new MemoryStream(targetArray))
            {
                return (T)(new BinaryFormatter().Deserialize(stream));
            }
        }
        /// <summary>
        /// 合并反序列化与序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <returns></returns>
        public static T DeepClone<T>(T t)
        {
            return Derializable<T>(Serializable(t));
        }
    }


2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

[转载]SQL秘笈 : NOLOCK、ROWLOCK、UPDLOCK的使用!

NOLOCK的使用  
NOLOCK可以忽略锁,直接从数据库读取数据。这意味着可以避开锁,从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。你可能会读取到运行事务正在处理的无须验证的未递交数据。 这种风险可以量化。
如果是金融方面的代码或者一些非常规的总计(你想绝对保证安全性),你应该小心行事并且不使用这种技术。但是我认为使用该技术会比你90%应用系统性能要好,当用户 (或者是交互代码发现一个未递交的修改时,使用该技术会保证不会像未使用该技术那样引起大麻烦。实际上,你可能发现你的大多数数据很少或者甚至不进行修改的,这样我们就不会因为这些数据被锁住而浪费大量的时间。  

2022年11月8日 | 发布:强强 | 分类:数据库 | 评论:0

[DICOM] dicom文件TAG 详解[转]

dicom文件的值类型TAG

dicom全称是医学数字图像与通讯,这里讲diocm格式文件的tag标记做详细解读。

dicom文件,整体结构先是128字节所谓的导言部分,跳过就是了,然后是dataElement元素依次排列的方式, 就是一个dataElement接一个dataElement的方式排到文件结尾.我们要读取dicom里面的各种数据就是在各个数据元素中。通俗的讲dataElement就是指tag,就是破Dicom标准里定义的数据字典,每个dataElement中的tag决定自身或整个文件的某些数据类型或自身dataElement内容类别  

2022年11月8日 | 发布:强强 | 分类:PACS业务知识 | 评论:0

[转]dicom文件中的VR 详解

[转]dicom文件中的VR 详解


dicom文件的值类型VR 

Dicom全称是医学数字图像与通讯,这里讲diocm格式文件的VR标记做详细解读。 

2022年11月8日 | 发布:强强 | 分类:PACS业务知识 | 评论:0

swagger组件给asp.net webapi文档生成

1.名词解释

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

    1)Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API。

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

Oracle解决Ora-01653无法扩展表空间

Oracle解决Ora-01653无法扩展表空间


早上查看客户现场一个后台服务,发现日志很多报错  Ora-01653  查询的网上原因:

2022年11月8日 | 发布:强强 | 分类:数据库 | 评论:0

C# 获取NTP远程服务同步时间

C# 获取NTP远程服务同步时间


现场有一个需要定时同步远程服务器的需求,根据一个时钟电脑,同步服务器时间,保证各个系统之间时间的一致性。

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

C# 实现压缩和解压缩文件

开发时经常会遇到需要压缩文件的需求,利用C#的开源组件ICSharpCode.SharpZipLib,

就可以很容易的实现压缩和解压缩功能。

主要是操作(Zip)压缩算法

上代码:

压缩文件

        /// <summary>  
        /// 压缩指定文件生成ZIP文件  
        /// </summary>  
        /// <param name="topDirName">顶层文件夹名称</param>  
        /// <param name="fileNamesToZip">待压缩文件</param>  
        /// <param name="ZipedFileName">ZIP文件</param>  
        /// <param name="CompressionLevel">压缩比</param>  
        /// <param name="password">密码</param>  
        /// <param name="comment">压缩文件注释文字</param>  
        public static void ZipFile
            (
            string topDirName,  //顶层文件夹名称 
            string fileNameToZip,  //待压缩文件  
            string ZipedFileName,   //ZIP文件   
            int CompressionLevel,    //压缩比   
            string password,    //密码   
            string comment   //压缩文件注释文字  
            )

        {
            var ls = new List<string> { fileNameToZip };
            ZipFile(topDirName, ls.ToArray(), ZipedFileName, CompressionLevel, password, comment);
        }
        /// <summary>  
        /// 压缩指定多个文件生成ZIP文件  
        /// </summary>  
        /// <param name="topDirName">顶层文件夹名称</param>  
        /// <param name="fileNamesToZip">待压缩文件列表</param>  
        /// <param name="ZipedFileName">ZIP文件</param>  
        /// <param name="CompressionLevel">压缩比</param>  
        /// <param name="password">密码</param>  
        /// <param name="comment">压缩文件注释文字</param>  
        public static void ZipFile
            (
            string topDirName,  //顶层文件夹名称  
            string[] fileNamesToZip,  //待压缩文件列表  
            string ZipedFileName,   //ZIP文件   
            int CompressionLevel,    //压缩比  9
            string password,    //密码   ""
            string comment   //压缩文件注释文字  ""
            )
        {
            using (var s = new ZipOutputStream(File.Open(ZipedFileName, FileMode.Create)))
            {
                if (password != null && password.Length > 0)
                    s.Password = password;

                if (comment != null && comment.Length > 0)
                    s.SetComment(comment);

                s.SetLevel(CompressionLevel); // 0 - means store only to 9 - means best compression  

                foreach (string file in fileNamesToZip)
                {
                    using (FileStream fs = File.OpenRead(topDirName + file))
                    {   //打开待压缩文件  
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);      //读取文件流  
                        ZipEntry entry = new ZipEntry(file);    //新建实例   
                        entry.DateTime = DateTime.Now;
                        entry.Size = fs.Length;
                        s.PutNextEntry(entry);
                        s.Write(buffer, 0, buffer.Length);
                    }
                }
                s.Finish();
            }


        }

解压缩文件:

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0

C# 自动注册OCX方法

C# 自动注册OCX方法


C#开发系统时,有时候会遇到调用其他语言开发的模块。如果对方提供了OCX时,就需要注册使用,但是实时时,每个客户端都注册一遍就比较麻烦。所以需要系统第一次启动时自动注册OCX。

2022年11月8日 | 发布:强强 | 分类:ASP.NET | 评论:0