|
楼主 |
发表于 2024-4-16 18:07:50
|
显示全部楼层
广东省东莞市
这里的 IntPtr bytes 我想把 bytes 转换成Bitmap
public static IntPtr ByteFunc(IntPtr bytes) { var len = LstrlenA(bytes); byte[] buffer = new byte[len]; Marshal.Copy(bytes, buffer, 0, len); return Marshal.StringToHGlobalAnsi(string.Join(",", buffer)); }我现在是这么写的,但貌似不对!![DllImport("kernel32.dll", EntryPoint = "lstrlenA", CharSet = CharSet.Ansi)]public extern static int LstrlenA(IntPtr ptr); [DllExport(CallingConvention = System .Runtime .InteropServices .CallingConvention .StdCall)]public static string DecodeQRCode(IntPtr imageData){ var len = LstrlenA(imageData); byte[] buffer = new byte[len]; Marshal.Copy(imageData, buffer, 0, len); using (MemoryStream ms = new MemoryStream(buffer)) { Bitmap bitmap = new Bitmap(ms); //// 将 IntPtr 转换为 Bitmap //Bitmap bitmap = Bitmap.FromHbitmap(imageData); // 创建解码器对象 BarcodeReader barcodeReader = new BarcodeReader(); // 解码二维码 Result result = barcodeReader.Decode(bitmap); // 释放 Bitmap 资源 bitmap.Dispose(); if (result != null) { // 返回解析后的内容和坐标 return $"内容: {result.Text}, 坐标: 左上角({result.ResultPoints[0].X}, {result.ResultPoints[0].Y}), 右上角({result.ResultPoints[1].X}, {result.ResultPoints[1].Y}), 右下角({result.ResultPoints[2].X}, {result.ResultPoints[2].Y}), 左下角({result.ResultPoints[3].X}, {result.ResultPoints[3].Y})"; } else { return "未能解析二维码"; } }}
|
|