首先需要使用 Nuget 安置 win2d ,安置参见win10 uwp win2d
如果没有更新 dot net core 那么在运行可能会呈现下面异常System.TypeLoadException: Requested Windows Runtime type ‘Microsoft.Graphics.Canvas.Text.CanvasTextLayout‘ is not registered
那么直接更新 dot net core 到最新,然后清理项目就可以
获得图片要对图片措置惩罚惩罚,首先需要拿到图片,拿到图片的要领可以是从剪贴板获得或者使用文件拔取拿到。
如果是从剪贴板拿到图片,需要把图片生存到本地的姑且文件夹,然后拿到文件。
如果使用文件拔取拿到文件,可以使用这个要领
var pick = new FileOpenPicker(); pick.FileTypeFilter.Add(".jpg"); pick.FileTypeFilter.Add(".png"); var file = await pick.PickSingleFileAsync();注意后缀名用的是 .+后缀名,这里我写的是很少的图片后缀名,实际上可以撑持的图片后缀是很多。
创建图片如果需要对图片措置惩罚惩罚,使用的是 CanvasRenderTarget ,可以看到这个类需要传入两个参数ICanvasResourceCreatorWithDpi,Size,我也就使用这个函数
在 win2d 使用图片需要 CanvasBitmap ,这个类不成以直接创建,需要通过LoadAsync、CreateFromBytes、CreateFromColors、CreateFromSoftwareBitmap 这些要领来创建,,下面就使用第一个要领创建。
第一个要领有很多重载,需要注意,如果不是解决方案里的文件,千万不要使用文件名或 URI 的要领,因为经常呈现文件无法访谒。
如果不是解决方案里的文件,千万不要使用 fileName 或 URI 的要领读取图片,因为一般的文件是没有权限。即使使用 FilePick 拿到文件,文件的路径也可能拿不到。
建议使用的要领是使用流的重载,在上面,已经拿到文件,这时把文件读出来,传入就可以
var duvDbecdgiu = await CanvasBitmap.LoadAsync(new CanvasDevice(true), await _file.OpenAsync(FileAccessMode.Read)); 措置惩罚惩罚图片此刻创建 CanvasRenderTarget 措置惩罚惩罚图片,在使用 CanvasRenderTarget 记得释放,所以一般需要使用下面代码
using (var canvasRenderTarget = new CanvasRenderTarget(duvDbecdgiu, duvDbecdgiu.Size))创建一个图片措置惩罚惩罚,巨细就和图片巨细不异。
在图片添加文字的要领实际上和在 win2d 的其他措置惩罚惩罚不异,具体可以去看我的win2d博客。
using (var dc = canvasRenderTarget.CreateDrawingSession()) { dc.DrawImage(duvDbecdgiu); dc.DrawText("lindexi", new Vector2((float) (duvDbecdgiu.Size.Width / 2), (float) duvDbecdgiu.Size.Height/2), Colors.Black); }也许大家会感受上面的DrawImage是做什么的,适才不是从图片创建的?实际上从图片创建,但是没有画图片,也就是在使用的时候需要先画图片,然后画出文字。
生存此刻测验考试生存一个图片,生存需要让用户选一个文件
var pick = new FileSavePicker(); pick.FileTypeChoices.Add("image", new List<string>() {".jpg"}); var file = await pick.PickSaveFileAsync();生存很简单
await canvasRenderTarget.SaveAsync(await file.OpenAsync(FileAccessMode.ReadWrite),CanvasBitmapFileFormat.Jpeg);注意生存的格局可以是很多,但是后缀名需要和生存的格局不异。
此刻这个成果写在图床
欢迎大家访谒我搭建的博客 win2d 图片水印 我本身搭建的博客会不停更新
本作品给与常识共享署名-非商业性使用-不异方法共享 4.0 国际许可协议进行许可。欢迎转载、使用、从头颁布,但务必保存文章署名林德熙(包罗链接: ),不得用于商业目的,基于本文改削后的作品务必以不异的许可颁布。如有任何疑问,请与我。