WPF之图片处理系列

WPF 中的一些图片处理方法

一,视觉处理(控件展示)

1,显示图片

  • Image控件展示

Xaml代码:

<Image source="/Resources/Images/1.png"/>
  • 缩放位图渲染算法

Xaml代码:

<Image Source="/Resources/Images/1.jpg" RenderOptions.BitmapScalingMode="Fant"/>

枚举值 描述
Fant 使用超高质量 Fant 位图缩放,虽然速度比所有其他位图缩放模式都慢,但输出质量更高。
HighQuality 使用高质量位图缩放,虽然速度比 LowQuality 模式慢,但输出质量更高。 HighQuality 模式与 Fant 模式相同。
Linear 使用线性位图缩放,虽然速度比 HighQuality 模式快,但输出质量较低。
LowQuality 使用双线性位图缩放,虽然速度比 HighQuality 快,但输出质量较低。 LowQuality 模式与 Linear 模式相同。
NearesNeighbor 使用最近邻域位图缩放,当使用软件光栅器时,该缩放提供优于 LowQuality 模式的性能。 该模式常用于放大位图。
Unspecified 使用默认位图缩放模式,即 Linear。

2,Image遮罩

  • OpacityMask

来自微软官方的说明:
获取或设置一个作为 Brush 实现的不透明蒙板,该蒙板可应用到此元素所呈现内容的任何 Alpha 通道蒙板。 这是依赖项属性。

来自个人的经验解释:
OpacityMask也是一张图片,它用来改变被它遮住的内容的显示区域,
OpacityMasK本身:有内容的区域被镂空,没有内容的区域被填充
被它遮住的控件或者画布:镂空的区域就展示,填充的区域变透明


3,图片DPI

  • 图片DPI是每英寸显示的点的个数(点/英寸)
  • 图片的宽像素=宽dpi*尺寸
  • 图片的高像素=高dpi*尺寸
  • WPF 中,所有图片在Xaml中都会被强制拉成96dpi。

4,控件的Transform

来自微软官方的说明:
Transform 定义如何将点从一个坐标空间映射或转换到另一个坐标空间。 此映射由转换 Matrix描述,该转换是包含三列 Double 值的三行的集合。

枚举值 描述
RotateTransform 按指定角度旋转元素。
ScaleTranform 按指定的 ScaleX 和 ScaleY 量来缩放元素。
SkewTransform 按指定的 AngleX 和 AngleY 量倾斜元素。
TranslateTransform 按指定的 X 和 Y 量移动(平移)元素。

Xaml代码:

<Image Width="450" Source="/Images/3.jpg">
    <Image.RenderTransform>
        <TransformGroup>
            <TranslateTransform X="10" Y="10" />
            <RotateTransform Angle="20" CenterX="200" CenterY="121"/>
            <ScaleTransform ScaleX="1.5" ScaleY="1.5" CenterX="200" CenterY="121"/>
            <SkewTransform AngleX="10" AngleY="10" CenterX="200" CenterY="121"/>
        </TransformGroup>
    </Image.RenderTransform>
</Image>


二,输出文件

1,显示图片

①,BitmapImage的保存

与Bitmap.Save()不同,需要对BitmapImage的数据转为Stream,通过文件流保存

C#代码

BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frame.Add(BitmapFrame.Create(bitmapImage));
using(var straem=new FileStream(path,FileMode.Create)){
    encoder.Save(stream);
}

②,BitmapImage的Width,Height和PixelWidth,PixelHeight

Width和Height:获取位图的宽/高度(以与设备无关的单位(每个单位 1/96 英寸)为单位)。(会根据电脑DPI的更改获取到不同的值)
PixelWidth和PixelHeight:获取位图的宽/高度(以像素为单位)

③,BitmapImage与Bitmap的互相转换

同样是转为流数据,向Bitmap的构造函数传参

//BitmapImage  to  Bitmap
public static Bitmap GetBitmapByBitmapImage(this BitmapImage bitmapImage,bool isPng=false) {
    Bitmap bitmap;
    MemoryStream outStream = new MemoryStream();
    BitmapEncoder enc = new BmpBitmapEncoder();
    if (isPng) {
        enc = new PngBitmapEncoder();
    }
    enc.Frames.Add(BitmapFrame.Create(bitmapImage));
    enc.Save(outStream);
    bitmap = new Bitmap(outStream);
    return bitmap;
}
// Bitmap  to BitmapImage
public static BitmapImage GetBitmapImageBybitmap(this Bitmap bitmap) {
    BitmapImage bitmapImage = new BitmapImage();
    try {
        using (MemoryStream ms = new MemoryStream()) {
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = ms;
            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
            bitmapImage.EndInit();
            bitmapImage.Freeze();
        }
    }
    catch (Exception ex) {
        log.ErrorFormat("bitmap to BitmapImage Failed:" + ex.Message);
    }
        return bitmapImage;
}

2,Visual和DrawingContext

①,Visual

Visual:为 WPF 中的呈现提供支持,其中包括命中测试、坐标转换和边界框计算。

层级关系:
System.Windows.Media.Visual
     System.Windows.Media.ContainerVisual
            System.Windows.UIElement

②,DrawingContext

DrawingContext:使用绘图、推送和弹出命令描述可视内容。

绘制方法:

DrawDrawing: 画Drawing对象

DrawEllipse: 画圆

DrawGeometry: 画几何图形

DrawGlyphRun:画文字

DrawImage: 画图

DrawLine:画线

DrawRectangle/DrawRoundedRectangle:画矩形

DrawText:画带格式的文本

DrawVideo:画视频

PushClip:推送剪切区域

③,RenderTargetBitmap

RenderTargetBitmap:将System.Windows.Media.Visual 对象转换为位图。

④,Image遮罩

和控件方式类似,在后台代码中使用Visual来展示

C#代码

RenderTargetBitmap bmp = new RenderTargetBitmap((int)img.Source.Width, (int)img.Source.Height, 96, 96, PixelFormats.Default);
DrawingVisual visual = new DrawingVisual() { OpacityMask = imgBrush };//遮罩Visual
using (DrawingContext dc = visual.RenderOpen()) {
    dc.DrawImage(img.Source, new Rect(0, 0, img.Source.Width, img.Source.Height));
}
bmp.Render(visual);

⑤,图像变化

同样是修改Visual的Transform
这里注意:文件渲染的Transform和前台的Transform不全相同!!!!
因为界面显示的图片大小和实际大小不一样

C#代码

RenderTargetBitmap bmp = new RenderTargetBitmap((int)img.Source.Width, (int)img.Source.Height, 96, 96, PixelFormats.Default);
DrawingVisual visual = new DrawingVisual() { Transform=img.RenderTransform };//修改Transform
using (DrawingContext dc = visual.RenderOpen()) {
    dc.DrawImage(img.Source, new Rect(0, 0, img.Source.Width, img.Source.Height));
}
bmp.Render(visual);

⑥,PathGeometry

来自微软官方的解释:表示一个可能由弧、曲线、椭圆、直线和矩形组成的复杂形状

LineGeometry 直线
ps:这个LineGeometry可以实现线头和线尾的圆滑笔触效果

new LineGeometry(start, end).GetWidenedPathGeometry(new Pen(Brushes.Black, 10) { StartLineCap = PenLineCap.Round, EndLineCap = PenLineCap.Round }); 

EllipseGeometry 圆
RectangleGeometry 矩形

⑦,抠图

通过DrawingContext的PushClip可以将指定的剪辑区域推送到绘图上下文上。
需要利用到上面的Geometry几何图形
配合一些鼠标事件可以手动实现inkcanvas和类似PS的背景橡皮擦

C#代码

RenderTargetBitmap bmp = new RenderTargetBitmap((int)img.Source.Width, (int)img.Source.Height, 96, 96, PixelFormats.Default);
DrawingVisual visual = new DrawingVisual() { OpacityMask = imgBrush };//遮罩Visual
using (DrawingContext dc = visual.RenderOpen()) {
    RectangleGeometry full = new RectangleGeometry(new Rect(0,0,777,523));//全图区域
    var clip= Geometry.Combine(full, new RectangleGeometry(new Rect(200,200,300,300)), GeometryCombineMode.Exclude, null);//减去一个矩形的区域
    dc.PushClip(clip);//推送clip区域结果
    dc.DrawImage(img.Source, new Rect(0, 0, img.Source.Width, img.Source.Height));
}
bmp.Render(visual);

正方形抠图

线条抠图

⑧,裁剪

  • BitmapSource中有一个方法叫做CopyPixels,复制像素点集到一个新的BitmapSource里面。可以实现裁剪

stride:位图的跨距(一行的字节数)。
pixels:表示位图图像内容的字节数组。

public static BitmapSource CutImage(BitmapSource bitmapSource, Int32Rect cut) {
    //计算Stride
    var stride = bitmapSource.Format.BitsPerPixel * cut.Width / 8;
    //声明字节数组
    byte[] data = new byte[cut.Height * stride];
    //调用CopyPixels
    bitmapSource.CopyPixels(cut, data, stride, 0);
    return BitmapSource.Create(cut.Width, cut.Height, 0, 0, PixelFormats.Bgra32, null, data, stride);
}           

本文转载于网络 如有侵权请联系删除

相关文章

  • pytest数据驱动及conftest文件及装饰器使用

    一:数据驱动file_operate.py文件#coding=utf-8 """ @Project:pachong-master @File:file_operate.py @Author:gaojs @Date:2022/7/123:00 @Blogs:https://www.gaojs.com.cn """ importopenpyxlasxl importyaml defread_excel(filepath,sheet_name): """ 读取数据,将其转换成所需格式 :return: """ #得到整个excel文档对象 wb=xl.load_workbook(filepath) #获取某个sheet工作表数据 sheet_data=wb[sheet_name] #定义空列表,用来存储多行数据,每行数据都是一个列表 data=[] #得到总行数 lines_count=sheet_data.max_row #得到总列数 cols_count=sheet

  • UE5 地形系统初探

    使用的版本:UE5EarlyAccess 地形系统介绍UE可以直接在编辑器中创建并编辑地形,编辑地形的模式有两种:Sculpt和Paint。Sculpt的作用是对地形进行造型和雕刻,Sculpt对地形产生的修改最终会体现在Heightmap即高度图中,UE会在运行时对这张图进行采样,从而产生地形Mesh,很经典的做法。Paint则可以让开发者对地表进行绘制,开发者可以创建多个LandscapeLayer,每一个Layer可以使用不同的纹理,比如雪地、草地、土壤等,在Paint模式下,用户可以选择不同的Layer对地形进行绘制,绘制完成后,会根据Layer的数量生成对应的Weightmap即权重图,其中保存了每一个Layer的权重,由于Weightmap有RGBA四个通道,一张Weightmap至多能保存四个Layer,每四个Layer会额外生成一张Weightmap,Layer数量越多,显存消耗越大。在运行时,UE会对当前地块的Weightmap和Layer纹理进行采样,并进行混合,最终形成地表。在创建地形的时候,有Section的概念,Section可以认为是一块地形,每一个地形Co

  • (3)FlinkSQL滑动窗口demo演示

    滑动窗口(SlidingWindows)与滚动窗口类似,滑动窗口的大小也是固定的。区别在于,窗口之间并不是首尾相接的,而是可以“错开”一定的位置。如果看作一个窗口的运动,那么就像是向前小步“滑动”一样。定义滑动窗口的参数有两个:除去窗口大小(windowsize)之外,还有一个滑动步长(windowslide),代表窗口计算的频率。demo演示:场景:接收通过socket发送过来的数据,定义一个1小时的时间窗口大小,每30秒滑动触发运算一次(1)准备一个实体对象,消息对象packagecom.pojo; importjava.io.Serializable; /** *Createdbyljon2022-07-05. */ publicclassWaterSensorimplementsSerializable{ privateStringid; privatelongts; privateintvc; publicWaterSensor(){ } publicWaterSensor(Stringid,longts,intvc){ this.id=id; this.ts=ts

  • 深入理解 ELK 中 Logstash 的底层原理 + 填坑指南

    官网:www.passjava.cn你好,我是悟空呀,我被憧憬小哥催更了。儿童节、端午节前发一篇,祝大家双节快乐~本文目录如下:前言一、部署架构图二、Logstash用来做什么?三、Logstash的原理3.1从Logstash自带的配置说起3.2Input插件3.3Filter插件3.4Output插件3.5完整配置四、Logstash怎么跑起来的4.1Logstash如何运行的4.2Logstash的架构原理五、Logstash宕机风险5.1Logstash单点部署的风险5.2开机启动Logstash六、总结前言通过本篇内容,你可以学到如何解决Logstash的常见问题、理解Logstash的运行机制、集群环境下如何部署ELKStack。在使用Logstash遇到了很多坑,本篇也会讲解解决方案。日志记录的格式复杂,正则表达式非常磨人。服务日志有多种格式,如何匹配。错误日志打印了堆栈信息,包含很多行,如何合并。日志记录行数过多(100多行),被拆分到了其他的日志记录中。输出到ES的日志包含很多无意义字段。输出到ES的日志时间和本来的日志时间相差8小时。如何优化Logstash的性能L

  • 学术爆款“空间转录组技术”,都有哪些技术?

    空间转录组学的发展极大地扩展了复杂多细胞生物系统的知识。那么大家常常提到的空间转录组技术都有哪些技术?今天小编分享的这篇发表在《BioEssays》的文献综述了现有的空间转录组学方法,讨论了它们的应用及其优缺点。本综述中提及的已发表方法的简要时间表空间转录组技术的比较基于微解剖基因表达的技术捕捉空间基因表达信息的方法只是通过从样本中分离出目标区域,然后将这些区域单独放入试管中进行RNA提取和后续的基因表达谱分析。虽然解剖单个区域进行后续的测序可以完整地提取不同形式的RNA种类,实现同工型存在等分析,但一般来说,覆盖较大的区域通常很麻烦,而且在整个组织中获得整体情况往往是不可行的。基于微解剖基因表达的技术综述激光捕获显微切割激光捕获显微切割(LCM)是一种利用激光束在显微镜下切割组织区域的技术。2017年,LCM方案的一个扩展版本Geo-seq,将LCM与scRNA-seq相结合,以分析小到10个单细胞组织区域的转录组。tomo-seq2014年描述的一种叫做RNA断层扫描(tomo-seq)的冷冻切片方法通过线性扩增单个组织的cDNA。与早期的冷冻切片方法相比,这种方法在RNA定量和空

  • 1000套微信小程序源码分享

    前段时间在整理小程序的时候,需要一些小程序模版做参考!网上找了一些,很多是要收费,已经整理了一部分~后续会持续更新 [下方跳转地址下载~] 部分案例展示源码下载:https://blog.csdn.net/li1669852599/category_10343028.html

  • 概率图模型笔记(PART III)条件随机场简介

    前情提要:概率图模型笔记(PARTI)&概率图模型笔记(PARTII)隐马尔科夫模型条件随机场CRF笔记写在前面前面写完了HMM,比较重点的就是HMM的三个问题,需要好好消化。这篇博客主要介绍条件随机场,相比于HMM,CRF的应用可能会更广。从刚接触CRF开始也很久了,但是由于书上公式非常晦涩难懂,而且网上也有超级多的开源代码实现,所以对CRF的认识也就停留在非常表层的理解。但是就这样的程度让人觉得非常虚,那就拿起小蓝书跟条件随机场来个了断吧~条件随机场定义首先给出来自小蓝书的CRF定义:条件随机场是给定从输入随机变量X条件下,输出随机变量Y的马尔科夫随机场。 那么在这个定义里面,有几个需要我们提前了解的概念:「随机场」:随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。「马尔科夫随机场」:马尔科夫随机场是随机场的特例,它及假设随机场中某个位置的赋值仅仅与和它相邻的位置的赋值有关,与其不相邻的位置的值无关。「条件随机场」:CRF是马尔科夫随机场的特例,它假设马尔科夫随机场中只有X和Y两种变量,且X一般是给定的输入变量,而Y是我们

  • SpringCloud入门之Feign篇

    上面介绍了Ribbon使用负载均衡调用微服务,但存在一个问题:消费端每个请求方法中都需要拼接请求服务的URL地址,存在硬编码问题且不符合面向对象编程思想。如果服务名称发生变化,消费端也需要跟着修改。本篇文章将介绍Feign来解决上边的问题。Feign是一个声明式的WebService客户端。使用Feign能让编写WebService客户端更加简单,同时支持与Eureka、Ribbon组合使用以支持负载均衡。SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Feign的使用方法是定义一个接口,然后在其上边添加@FeignClient注解。添加依赖在common-api和user-web项目中添加依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>

  • 简单对比WDCP与宝塔面板WEB环境区别与选择建议

    简单对比WDCP与宝塔面板WEB环境区别与选择建议老左在"简单对比LNMP与OneinStack一键包区别与选择建议"文章中有简单谈了谈个人对于LNMP和OneinStack的看法,其实两者都各有优势和各自的用户群体。当然,搜罗网络其实我们还可以看到很多很多一键WEB安装脚本工具。我们用户在选择和使用之余,还是要感谢这些热心网友的。同时有用户体验,在使用可视化面板的时候,国产面板中我们可能使用较多的是WDCP、宝塔面板、AMH面板,AMH目前是收费版本从AMH4.2之后我也就没有安装和体验过,但是从平时的用户看应该还是有不少的,其他详细的信息并不是特别清楚,所以无从给予评论和自己的看法。这不,在这篇文章中,老左准备看看对于WDCP和宝塔面板的看法和选择建议。第一、两者共同之处从功能上看,WDCP和宝塔面板都可以较快且准确的部署LNMP和LAMP组合安装WEB环境,而且都是可视化界面管理的。如果是一般的网站环境配置,以及新手的建站需要,都是可以满足的。从平时的接触网友看,两者面板的用户量确实是比较大的。而且看到有些软件安装官方甚至都指明安装哪种面板兼容性较好。第二、两

  • 结合Geotools实现百度09,国测局02和经纬度的相互转换

    概述本文讲述在Java中,结合结合Geotools实现百度09,国测局02和经纬度shp数据的相互转换。结果说明:1、红色的线条是百度09的; 2、蓝色的线条是国测局02的; 3、填充的是原始wgs84的。 4、从图中可以看出,gcj02和wgs84的区别不是很大在一些不是很精确地情况下可以认为是一样的,bd09的区别稍微大一点; #实现思路 由于坐标转换是单个点的,所以在处理一个shp的坐标转换的时候,也是一个个点去做转换的。实现代码1.ProjTransform.javapackagecom.lzugis.geotools.utils; /** *@authorlzugis *提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *命名规则: *1、bd代表百度的坐标,gcj代表国测局火星坐标,wgs代表wgs84坐标 */ publicclassProjTransform{ /** *定义一些常量 */ privatefinaldoublex_PI=3.14159265358979324*3000.0/180.0; privatefina

  • Java线程池管理及分布式Hadoop调度框架搭建

    摘要:多线程一直不是件容易的事情,然而开发过程却又经常碰到,有时甚至还会被作为考校程序员实力的一个指标。这样一来,多线程已然成为一道必须迈过的砍!【编者按】多线程是程序员面试时常常会面对的问题,对多线程概念的掌握和理解水平,也常常被用来衡量一个人的编程实力。不错,普通的多线程已经不容易了,那么当多线程碰到“大象”又会产生什么样的火花?这里我们为大家分享上海创行科技技术总监严澜的博文——Java线程池管理及分布式Hadoop调度框架搭建。 以下为原文: 平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发工程师却在这个上面吃了不少苦头。怎么做一套简便的线程开发模式框架让大家从单线程开发快速转入多线程开发,这确实是个比较难搞的工程。那具体什么是线程呢?首先看看进程是什么,进程就是系统中执行的一个程序,这个程序可以使用内存、处理器、文件系统等相关资源。例如QQ软件、Eclipse、Tomcat等就是一个exe程序,运行启动起来就是一个进程。为什么需要多线程?如果每个进程都是单独处理一件事情不能多个任务同时

  • 仰望星空与物理学之一

    当你仰望星空时,你看到了什么? 墨蓝色的天幕,白色的星星。如果你在大城市,天空会被花哨的霓虹灯渲染得五颜六色。 当第一个智人看向这个神秘的空间时,他无法解释那些闪亮的白点、那个发光的圆球、那些划破天幕的线是什么,于是他给它们起了名字:星、月、闪电。但他依然无法想出他们是怎么来得,为什么星星和月亮会慢慢降落到地平线以下,取而代之的是太阳慢慢从地平线的另一边升起、为什么闪电总是伴随着雷雨。于是他想:一定是有“神”在操控它们。 这就是我们第一次对自然的探索所得出的结论。并且还得出了宇宙的结构:天在上,地在下。 直到有一天,一位哲学家想弄明白为什么太阳、月亮、星辰都围着我们转,于是他的宇宙是这样的:  这位哲学家就是阿那克西曼德,在他的宇宙里,天空把地球包围了起来,而地球像是一个漂浮在空中、不会坠落的大石头,很快就有人意识到,对于一块飞在空中的土地而言,最合理的形状是球形,因为球体在各个方向上都是相等的。 然后另一位伟大的哲学家亚里士多德在他的著作《论天》里用很多具有说服力的科学论证证明了地球是圆的,并且他的宇宙是这样的:星辰日月都围着地球转。  看起来人们对宇宙的认知在当时已有很大的突破,

  • 业界 | 特朗普大选曾利用大数据营销,违规使用5000万Facebook用户数据,扎克伯格仍未回应

    大数据文摘作品作者:龙牧雪、魏子敏可能左右了2016年美国总统大选的Facebook数据泄露丑闻还在持续发酵。剑桥分析公司(CambridgeAnalytica),一家与特朗普(DonaldTrump)总统竞选团队有密切关联的数据公司,被曝获得了大约5千万Facebook用户的信息。其中,有27万Facebook用户将自己的信息授权一个用于学术研究的App使用,其余受影响的用户则是这些授权用户的好友——他们的信息在不知情的情况下被特朗普竞选团队用于向他们针对性地推送广告。这个名为“thisisyourdigitallife”的App由剑桥大学心理学教授AleksandrKogan开发,为学术目的收集数据,这是符合Facebook规则的。但随后这些信息被转移给了第三方,包括剑桥分析公司。数据转移违反了Facebook政策。2016年9月,CambridgeAnalytica的CEOAlexanderNix就大数据在选举中发挥的作用做演讲。Facebook周五晚间表示,已经禁止剑桥分析公司使用其平台。这一事件在Twitter上掀起了轩然大波,许多人批评Facebook在过去两年中已经得知此

  • 拼图游戏 v1.1

    我一直对拼图游戏比较有兴趣,市面上卖的所谓“1000块拼图”也玩过不少,不过玩那个太占地方,后来也不再买了,同时也就萌生了在电脑上玩拼图的想法。 现在虽然有很多拼图游戏,但能大多数只能支持几十或几百块拼图,很少能支持上千块拼图的游戏。 后来,我就利用Direct2D自己实现了一个拼图游戏,可以流畅的支持最高1200块的拼图(更高其实也可以支持,但是感觉已经足够了),拼图碎片之间也可以自动吸附,还可以设置吸附到背景。游戏界面如图1所示。 图1游戏界面 一、系统要求 拼图游戏是使用C#编写的,使用SharpDX类库实现游戏界面。 最低系统要求是Windows7,需要.NetFramework4.5 的支持。一些游戏特效需要DirectX11.1的支持,但不影响游戏过程。 二、游戏介绍 游戏的工具栏如图2所示。 图2工具栏 基本的游戏操作是: Ctrl+鼠标左键单击,可以将拼图放到最底层(不会遮挡其它拼图) 鼠标右键单击,顺时针旋转拼图(如果允许的话) Shift+鼠标右键单击,逆时针旋转拼图 鼠标滚轮,上下滚动界面 Shift+鼠标滚轮,左右滚动界面 Ctrl+鼠标滚轮,缩

  • testng 6.8.6 eclipse plugin

        https://files.cnblogs.com/mikelij/testng.zip  

  • 多项目解决方案使用的配置文件是哪一个?

    只需要记住:哪一个项目是启动项目,就使用哪一个的配置文件 例如有一个解决方案包含两个项目: 其中一个项目是一个类库——用于使用EF持久化实体到数据库中(类库的配置文件是App.config); 另一个项目是.NETFrameworkmvc站点,引用上面的类库(配置文件是Web.config); 当新建实体时或更改了实体时,我们需要使用EntityFramework迁移实例到数据库中,这时我们通常将类库作为启动项目,在App.config中配置连接字符串信息,如果此时我们将下面的MVC站点设置为启动项目,进行迁移时,将读取Web.config中配置的连接字符串。   博客备忘,一起成长。

  • Spring Boot 部署浅析(jar or war)

    对于传统的ssm或者ssh项目的部署,一般会打包成war包,或者是一个编译好的文件夹,再放到tomcat的webapps目录下,如果是war包,会自动解压出来。而SpringBoot默认会内嵌一个Tomcat,因此即便是web项目也可以直接打包成jar包,直接java-jar运行就可以了。 用SpringInitialzr创建的web项目(选择打包成jar),只会有一个spring-boot-starter-web依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 复制 跟进去可以发现这个依赖包括了spring-boot-starter-tomcat这个(内嵌tomcat的依赖包)。如果使用内部的tomcat部署,那么不需要对代码进行修改,直接runxxApplication下的Main方法。 如果创建的是war的web项

  • 数据分析会犯的错误,新人十有九中(转)

    BY 陈老师@接地气学堂 讲一个很严重,很明显,但是很容易被新人们忽视的错误:把要求当需求。最最最典型的,某过于老板丢了句“做个用户画像看一下”于是数据专员吭哧吭哧跑数据,做词云,画图标,码PPT。忙得不亦乐乎。最后辛辛苦苦交了用户画像的报告。老板一句话劈头盖脸丢过来   “我早知道了” “你做了有什么用” “这不是我想要的”   那感觉,简直就是一盆冷水泼下来,一口老血涌上头。好想拿出录了“做个用户画像看一下”的录音笔查到丫耳朵里。这还是好的呢。如果碰到一个不怎么懂的话题,比如“做个聚类分析”“做个因子分析”,可能跑数的小哥还得到处找资料,查书,上各种《数据分析爱好者》QQ群问:“有没有大神教一下怎么做啊??”结果回来还是碰壁,就真的气不打一处来了。   问题出在哪里?问题出在从一开始,这就不是需求,而是一个要求。并且它是出自非专业人士的要求。举个类似的例子,就好比病人去医院看病,对医生说:“来个感冒药”然后回头说医生“你这药不灵啊!你这医生会不会看病啊!”你说这医生当的冤不冤。   冤,也不冤。冤,是冤在明明是病人自己要求的,我按你

  • 无法察觉的严重的拖延症

    7月15号想看没看的智慧公寓,拖延3个月,现在2期已经没房子了,今天去看了看,挺喜欢小区的配套的,但是房间里面一般,车位还很贵。7月份没去打疫苗,一拖延,今天国创中心的疫苗地点也关门了,疫苗也没打成。 原来我的拖延症这么严重:股票没怎么操作,余闲的书还没怎么看,座子上放的NassimTaleb的书也没看,林语堂的老子书这都多少年了?时间都干嘛了,书架上的一本本书如同是actionlist,list是没有用的,哪怕过了再多的时间,他不会自动发生,没有一股能量启动它,可能放进agenda,才能获得初始动能,事情才能开始,一旦开始,可能事情就会运行起来。 没干一件事情背后其实总是有理由或者借口的,一件事没发生背后的理由是啥呢,自己有时候都不知道,因为人是会自我欺骗自己的,自己蒙自己,自己是不知道的。

  • tyum 出现: 请检查源的公钥 URL 问题

    运行: rpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7复制 更新检索密钥

  • CentOS7 监控网络流量集合

    首先,以下介绍的流量监控工具安装之前均需要安装epel源, 安装epel源: [root@bogon~]#yum-yinstallepel-release   一、iftop工具 安装iftop工具,查看各个连接的流量情况 [root@bogon~]#yum-yinstalliftop [root@bogon~]#iftop-iens33-n-P     二、tcptrack工具 或安装tcptrack工具,查看各个连接的流量情况 [root@bogon~]#yuminstall-ylibpcap-devellibpcap [root@bogon~]#wgethttp://packages.psychotic.ninja/6/base/x86_64/RPMS/tcptrack-1.4.2-9.el6.psychotic.x86_64.rpm [root@bogon~]#rpm-ivhtcptrack-1.4.2-9.el6.psychotic.x86_64.rpm [root@bogon~]#tcptrack-iens33    

相关推荐

推荐阅读