但是没有画图片

时间:2022-03-30 02:52:15

首先需要使用 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 国际许可协议进行许可。欢迎转载、使用、从头颁布,但务必保存文章署名林德熙(包罗链接: ),不得用于商业目的,基于本文改削后的作品务必以不异的许可颁布。如有任何疑问,请与我。