一、由于System.Common.Drawing在.netcore 6.0以上版本无法使用所以需要安装第三方库,这里使用的是SkiaSharp
1、使用VSCODE打开项目,在终端输入以下指令安装SkiaSharp
dotnet add package SkiaSharp
2、使用以下指令查看SkiaSharp版本
dotnet list package | grep SkiaSharp
3、使用以下指令安装制定版本的SkiaSharp.NativeAssets.Linux.NoDependencies(此步骤可能不需要,由于调试过程中遇到问题后使用过该步骤所以给记录上,可以先不用此步骤运行以下步骤看看是否可以,如果不可以再运行此指令)
dotnet add package SkiaSharp.NativeAssets.Linux.NoDependencies --version 88.8
二、通过上面完成SkiaSharp的安装后,后面则是对程序进行修改
1、打开.csproj文件将下面的内容拷入
<ItemGroup>
<PackageReference Include="SkiaSharp" Version="2.88.8" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.8" />
</ItemGroup>
这里有两个问题一、如果不配置VSCODE在调试时会提示找不到库。二需要注意NoDependencies的版本,如果设置的不对也会提示异常
2、代码实现,这里由于数据直接从读卡器里面读取出来的byte数组所以这里直接将byte数组转换为SKBitmap并保存到指定位置
if (iRtnVal == 1)
{
//下面三行代码用于从读卡器中取得照片数据可以忽略替换为实际业务代码后面都是对此byte数组进行处理
byte[] photoByte=new byte[40960];
int photoLength=40960;
CV100Gen.GetBMPData(ref photoByte[0],ref photoLength);
//在指定目录下生成一个空的文件并转换为流
using Stream pathSteam = File.OpenWrite("123.jpg");
if(photoByte!=null)
{
//将图片byte数组转换为SKBitmap
SKBitmap photoBitMap= SKBitmap.Decode(photoByte);
if(photoBitMap!=null)
{
if(pathSteam !=null)
{
//将生成的SKBitmap对象保存到路径流中即保存图片到指定位置
bool result1=photoBitMap.Encode(pathSteam,SKEncodedImageFormat.Jpeg,100);
}
}
}
}