开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 218|回复: 22
收起左侧

[C#] c# flost 问题

[复制链接]
结帖率:67% (28/42)
发表于 2025-1-9 12:22:12 | 显示全部楼层 |阅读模式   辽宁省丹东市
9精币
解决下报错的原因,或者怎么修改下代码
16EAFD1EB6824AC5AF88C502AE7C5929.png


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:97% (507/523)

签到天数: 19 天

发表于 2025-1-9 12:37:45 | 显示全部楼层   河北省石家庄市
完全看不懂
回复

使用道具 举报

结帖率:54% (7/13)

签到天数: 18 天

发表于 2025-1-9 12:59:20 | 显示全部楼层   浙江省嘉兴市
这段代码看起来有点混乱,有很多语法错误
[C#] 纯文本查看 复制代码
int num_grid_y = (int)(inpHeight / stride[n]);

float* pdata_score = (float*)outs[n * 3].Data;
float* pdata_bbox = (float*)outs[n * 3 + 1].Data;
float* pdata_kps = (float*)outs[n * 3 + 2].Data;

for (int i = 0; i < num_grid_y; i++)
{
    for (int j = 0; j < num_grid_x; j++)
    {
        for (int k = 0; k < 4; k++)
        {
            if (pdata_score[k] > confThreshold)
            {
                int xmin = (int)((j + pdata_bbox[k * 4 + 0]) * stride[n] - padw) * ratio;
                int ymin = (int)((i + pdata_bbox[k * 4 + 1]) * stride[n] - padh) * ratio;
                int width = (int)(pdata_bbox[k * 4 + 2] * stride[n] * ratio);
                int height = (int)(pdata_bbox[k * 4 + 3] * stride[n] * ratio);
                confidences.Add(pdata_score[k]);
                boxes.Add(new Rect(xmin, ymin, width, height));
                List<int> landmark = new List<int>();
                for (int l = 0; l < 8; l += 2)
                {
                    landmark.Add((int)((j + pdata_kps[k * 8 + l]) * stride[n] - padw) * ratio);
                    landmark.Add((int)((i + pdata_kps[k * 8 + l + 1]) * stride[n] - padh) * ratio);
                }
            }
        }
    }
}

看着你图片修正了下
下次请直接贴代码,截图可太不方便了


回复

使用道具 举报

结帖率:67% (28/42)

签到天数: 13 天

 楼主| 发表于 2025-1-9 13:07:55 | 显示全部楼层   辽宁省丹东市
源码在这里
cdaima.txt (8.98 KB, 下载次数: 1)
回复

使用道具 举报

结帖率:67% (28/42)

签到天数: 13 天

 楼主| 发表于 2025-1-9 13:08:37 | 显示全部楼层   辽宁省丹东市
尛龍科技 发表于 2025-1-9 12:59
这段代码看起来有点混乱,有很多语法错误
[mw_shl_code=csharp,true]int num_grid_y = (int)(inpHeight / s ...

源码在下面,帮我看下,调用opencv
回复

使用道具 举报

结帖率:54% (7/13)

签到天数: 18 天

发表于 2025-1-9 13:15:58 | 显示全部楼层   浙江省嘉兴市
[C#] 纯文本查看 复制代码
using OpenCvSharp;
using OpenCvSharp.Dnn;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Card
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string startupPath;
        string image_path;
        private void Form1_Load(object sender, EventArgs e)
        {
            startupPath = System.Windows.Forms.Application.StartupPath;

            image_path = "1.jpg";
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);

            opencv_net = CvDnn.ReadNetFromOnnx("carddetection_scrfd34gkps.onnx");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;

            pictureBox1.Image = null;
            pictureBox2.Image = null;
            textBox1.Text = "";

            image_path = ofd.FileName;
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);
        }

        Stopwatch stopwatch = new Stopwatch();
        Net opencv_net;
        Mat BN_image;
        Mat image;
        Mat result_image;

        float[] stride = { 8.0f, 16.0f, 32.0f };
        int inpWidth = 640;
        int inpHeight = 640;
        float confThreshold = 0.5f;
        float nmsThreshold = 0.5f;
        bool keep_ratio = true;

        Mat resize_image(Mat srcimg, ref int newh, ref int neww, ref int top, ref int left)
        {
            int srch = srcimg.Rows, srcw = srcimg.Cols;
            newh = inpHeight;
            neww = inpWidth;
            Mat dstimg = new Mat();
            if (keep_ratio && srch != srcw)
            {
                float hw_scale = (float)srch / srcw;
                if (hw_scale > 1)
                {
                    newh = inpHeight;
                    neww = (int)(inpWidth / hw_scale);
                    Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh));
                    left = (int)((inpWidth - neww) * 0.5);
                    Cv2.CopyMakeBorder(dstimg, dstimg, 0, 0, left, inpWidth - neww - left, BorderTypes.Constant, 0);
                }
                else
                {
                    newh = (int)(inpHeight * hw_scale);
                    neww = inpWidth;
                    Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh));
                    top = (int)((inpHeight - newh) * 0.5);
                    Cv2.CopyMakeBorder(dstimg, dstimg, top, inpHeight - newh - top, 0, 0, BorderTypes.Constant, 0);
                }
            }
            else
            {
                Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh));
            }
            return dstimg;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }
            stopwatch.Restart();
            image = new Mat(image_path);
            result_image = image.Clone();

            int newh = 0, neww = 0, padh = 0, padw = 0;
            Mat img = resize_image(image, ref newh, ref neww, ref padh, ref padw);
            Mat blob = new Mat();

            BN_image = CvDnn.BlobFromImage(img, 1 / 128.0, new OpenCvSharp.Size(inpWidth, inpHeight), new Scalar(127.5, 127.5, 127.5), true, false);

            opencv_net.SetInput(BN_image);

            Mat[] outs = new Mat[9] { new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat() };
            string[] outBlobNames = opencv_net.GetUnconnectedOutLayersNames();
            opencv_net.Forward(outs, outBlobNames);

            List<float> confidences = new List<float>();
            List<Rect> boxes = new List<Rect>();
            List<List<int>> landmarks = new List<List<int>>();
            float ratioh = (float)image.Rows / newh, ratiow = (float)image.Cols / neww;
            int n = 0, i = 0, j = 0, k = 0, l = 0;

            for (n = 0; n < 3; n++)
            {
                int num_grid_x = (int)(inpWidth / stride[n]);
                int num_grid_y = (int)(inpHeight / stride[n]);
                float[] scores = new float[num_grid_x * num_grid_y * 4];
                float[] bboxes = new float[num_grid_x * num_grid_y * 4 * 4];
                float[] kps = new float[num_grid_x * num_grid_y * 4 * 8];

                Marshal.Copy(outs[n * 3].DataPointer, scores, 0, scores.Length);
                Marshal.Copy(outs[n * 3 + 1].DataPointer, bboxes, 0, bboxes.Length);
                Marshal.Copy(outs[n * 3 + 2].DataPointer, kps, 0, kps.Length);

                for (i = 0; i < num_grid_y; i++)
                {
                    for (j = 0; j < num_grid_x; j++)
                    {
                        for (k = 0; k < 4; k++)
                        {
                            int index = i * num_grid_x * 4 + j * 4 + k;
                            if (scores[index] > confThreshold)
                            {
                                int xmin = (int)(((j - bboxes[index * 4 + 0]) * stride[n] - padw) * ratiow);
                                int ymin = (int)(((i - bboxes[index * 4 + 1]) * stride[n] - padh) * ratioh);
                                int width = (int)((bboxes[index * 4 + 2] + bboxes[index * 4 + 0]) * stride[n] * ratiow);
                                int height = (int)((bboxes[index * 4 + 3] + bboxes[index * 4 + 1]) * stride[n] * ratioh);

                                confidences.Add(scores[index]);
                                boxes.Add(new Rect(xmin, ymin, width, height));

                                List<int> landmark = new List<int>();
                                for (l = 0; l < 8; l += 2)
                                {
                                    landmark.Add((int)(((j + kps[index * 8 + l]) * stride[n] - padw) * ratiow));
                                    landmark.Add((int)(((i + kps[index * 8 + l + 1]) * stride[n] - padh) * ratioh));
                                }
                                landmarks.Add(landmark);
                            }
                        }
                    }
                }
            }

            int[] indices;
            CvDnn.NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, out indices);

            for (i = 0; i < indices.Length; ++i)
            {
                int idx = indices;
                Rect box = boxes[idx];
                Cv2.Rectangle(result_image, new OpenCvSharp.Point(box.X, box.Y), new OpenCvSharp.Point(box.X + box.Width, box.Y + box.Height), new Scalar(0, 0, 255), 2);
                for (k = 0; k < 8; k += 2)
                {
                    Cv2.Circle(result_image, new OpenCvSharp.Point(landmarks[idx][k], landmarks[idx][k + 1]), 10, new Scalar(0, 255, 0), -1);
                }
                string label = confidences[idx].ToString("P2");
                int baseLine;
                OpenCvSharp.Size labelSize = Cv2.GetTextSize(label, HersheyFonts.HersheySimplex, 0.5, 2, out baseLine);
                int top = Math.Max(box.Y, labelSize.Height);
                Cv2.PutText(result_image, label, new OpenCvSharp.Point(box.X, top - 10), HersheyFonts.HersheySimplex, 1, new Scalar(0, 255, 0), 2);
            }

            stopwatch.Stop();
            double costTime = stopwatch.Elapsed.TotalMilliseconds;

            textBox1.Text = $"耗时:{costTime:F2}ms";
            pictureBox2.Image = new Bitmap(result_image.ToMemoryStream());
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (pictureBox2.Image == null)
            {
                return;
            }
            Bitmap output = new Bitmap(pictureBox2.Image);
            var sdf = new SaveFileDialog();
            sdf.Title = "保存";
            sdf.Filter = "Images (*.jpg)|*.jpg|Images (*.png)|*.png|Images (*.bmp)|*.bmp";
            if (sdf.ShowDialog() == DialogResult.OK)
            {
                switch (sdf.FilterIndex)
                {
                    case 1:
                        output.Save(sdf.FileName, ImageFormat.Jpeg);
                        break;
                    case 2:
                        output.Save(sdf.FileName, ImageFormat.Png);
                        break;
                    case 3:
                        output.Save(sdf.FileName, ImageFormat.Bmp);
                        break;
                }
                MessageBox.Show("保存成功,位置:" + sdf.FileName);
            }
        }
    }
}

现在你在运行看看
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 17 天

发表于 2025-1-9 13:52:57 | 显示全部楼层   浙江省宁波市
(float)Convert.ToDouble()
回复

使用道具 举报

结帖率:67% (28/42)

签到天数: 13 天

 楼主| 发表于 2025-1-9 14:02:00 | 显示全部楼层   辽宁省丹东市
尛龍科技 发表于 2025-1-9 13:15
[mw_shl_code=csharp,true]using OpenCvSharp;
using OpenCvSharp.Dnn;
using System;

Marshal.Copy(outs[n * 3].DataPointer, scores, 0, scores.Length);
                Marshal.Copy(outs[n * 3 + 1].DataPointer, bboxes, 0, bboxes.Length);
                Marshal.Copy(outs[n * 3 + 2].DataPointer, kps, 0, kps.Length);
这三行还是报错
回复

使用道具 举报

结帖率:67% (28/42)

签到天数: 13 天

 楼主| 发表于 2025-1-9 15:25:50 | 显示全部楼层   辽宁省丹东市
无量科技 发表于 2025-1-9 13:52
(float)Convert.ToDouble()

这个我试验了,不行
回复

使用道具 举报

结帖率:54% (7/13)

签到天数: 18 天

发表于 2025-1-9 16:14:09 | 显示全部楼层   浙江省嘉兴市
黄飞红 发表于 2025-1-9 14:02
Marshal.Copy(outs[n * 3].DataPointer, scores, 0, scores.Length);
                Marshal.Copy(out ...

[C#] 纯文本查看 复制代码
using OpenCvSharp;
using OpenCvSharp.Dnn;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Card
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string startupPath;
        string image_path;
        private void Form1_Load(object sender, EventArgs e)
        {
            startupPath = System.Windows.Forms.Application.StartupPath;

            image_path = "1.jpg";
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);

            opencv_net = CvDnn.ReadNetFromOnnx("carddetection_scrfd34gkps.onnx");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;

            pictureBox1.Image = null;
            pictureBox2.Image = null;
            textBox1.Text = "";

            image_path = ofd.FileName;
            pictureBox1.Image = new Bitmap(image_path);
            image = new Mat(image_path);
        }

        Stopwatch stopwatch = new Stopwatch();
        Net opencv_net;
        Mat BN_image;
        Mat image;
        Mat result_image;

        float[] stride = { 8.0f, 16.0f, 32.0f };
        int inpWidth = 640;
        int inpHeight = 640;
        float confThreshold = 0.5f;
        float nmsThreshold = 0.5f;
        bool keep_ratio = true;

        Mat resize_image(Mat srcimg, ref int newh, ref int neww, ref int top, ref int left)
        {
            int srch = srcimg.Rows, srcw = srcimg.Cols;
            newh = inpHeight;
            neww = inpWidth;
            Mat dstimg = new Mat();
            if (keep_ratio && srch != srcw)
            {
                float hw_scale = (float)srch / srcw;
                if (hw_scale > 1)
                {
                    newh = inpHeight;
                    neww = (int)(inpWidth / hw_scale);
                    Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh));
                    left = (int)((inpWidth - neww) * 0.5);
                    Cv2.CopyMakeBorder(dstimg, dstimg, 0, 0, left, inpWidth - neww - left, BorderTypes.Constant, 0);
                }
                else
                {
                    newh = (int)(inpHeight * hw_scale);
                    neww = inpWidth;
                    Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh));
                    top = (int)((inpHeight - newh) * 0.5);
                    Cv2.CopyMakeBorder(dstimg, dstimg, top, inpHeight - newh - top, 0, 0, BorderTypes.Constant, 0);
                }
            }
            else
            {
                Cv2.Resize(srcimg, dstimg, new OpenCvSharp.Size(neww, newh));
            }
            return dstimg;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }
            stopwatch.Restart();
            image = new Mat(image_path);
            result_image = image.Clone();

            int newh = 0, neww = 0, padh = 0, padw = 0;
            Mat img = resize_image(image, ref newh, ref neww, ref padh, ref padw);
            Mat blob = new Mat();

            BN_image = CvDnn.BlobFromImage(img, 1 / 128.0, new OpenCvSharp.Size(inpWidth, inpHeight), new Scalar(127.5, 127.5, 127.5), true, false);

            opencv_net.SetInput(BN_image);

            Mat[] outs = new Mat[9] { new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat(), new Mat() };
            string[] outBlobNames = opencv_net.GetUnconnectedOutLayersNames();
            opencv_net.Forward(outs, outBlobNames);

            List<float> confidences = new List<float>();
            List<Rect> boxes = new List<Rect>();
            List<List<int>> landmarks = new List<List<int>>();
            float ratioh = (float)image.Rows / newh, ratiow = (float)image.Cols / neww;
            int n = 0, i = 0, j = 0, k = 0, l = 0;

            for (n = 0; n < 3; n++)
            {
                int num_grid_x = (int)(inpWidth / stride[n]);
                int num_grid_y = (int)(inpHeight / stride[n]);
                float[] scores = new float[num_grid_x * num_grid_y * 4];
                float[] bboxes = new float[num_grid_x * num_grid_y * 4 * 4];
                float[] kps = new float[num_grid_x * num_grid_y * 4 * 8];

                // 检查 Mat 对象是否有效
                if (outs[n * 3].DataPointer == IntPtr.Zero || outs[n * 3 + 1].DataPointer == IntPtr.Zero || outs[n * 3 + 2].DataPointer == IntPtr.Zero)
                {
                    Console.WriteLine($"第 {n} 层的 Mat 对象数据为空,跳过处理。");
                    continue;
                }

                // 检查 Mat 对象的数据类型是否为浮点数
                if (outs[n * 3].Type() != MatType.CV_32F || outs[n * 3 + 1].Type() != MatType.CV_32F || outs[n * 3 + 2].Type() != MatType.CV_32F)
                {
                    Console.WriteLine($"第 {n} 层的 Mat 对象数据类型不正确,跳过处理。");
                    continue;
                }

                // 确保 scores、bboxes 和 kps 数组的长度与 Mat 对象中的数据长度一致
                int scoresLength = outs[n * 3].Total() * outs[n * 3].Channels();
                int bboxesLength = outs[n * 3 + 1].Total() * outs[n * 3 + 1].Channels();
                int kpsLength = outs[n * 3 + 2].Total() * outs[n * 3 + 2].Channels();

                if (scores.Length != scoresLength || bboxes.Length != bboxesLength || kps.Length != kpsLength)
                {
                    Console.WriteLine($"第 {n} 层的数据长度不匹配,跳过处理。");
                    continue;
                }

                // 复制数据
                try
                {
                    Marshal.Copy(outs[n * 3].DataPointer, scores, 0, scores.Length);
                    Marshal.Copy(outs[n * 3 + 1].DataPointer, bboxes, 0, bboxes.Length);
                    Marshal.Copy(outs[n * 3 + 2].DataPointer, kps, 0, kps.Length);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"第 {n} 层的数据复制失败: {ex.Message}");
                    continue;
                }

                for (i = 0; i < num_grid_y; i++)
                {
                    for (j = 0; j < num_grid_x; j++)
                    {
                        for (k = 0; k < 4; k++)
                        {
                            int index = i * num_grid_x * 4 + j * 4 + k;
                            if (scores[index] > confThreshold)
                            {
                                int xmin = (int)(((j - bboxes[index * 4 + 0]) * stride[n] - padw) * ratiow);
                                int ymin = (int)(((i - bboxes[index * 4 + 1]) * stride[n] - padh) * ratioh);
                                int width = (int)((bboxes[index * 4 + 2] + bboxes[index * 4 + 0]) * stride[n] * ratiow);
                                int height = (int)((bboxes[index * 4 + 3] + bboxes[index * 4 + 1]) * stride[n] * ratioh);

                                confidences.Add(scores[index]);
                                boxes.Add(new Rect(xmin, ymin, width, height));

                                List<int> landmark = new List<int>();
                                for (l = 0; l < 8; l += 2)
                                {
                                    landmark.Add((int)(((j + kps[index * 8 + l]) * stride[n] - padw) * ratiow));
                                    landmark.Add((int)(((i + kps[index * 8 + l + 1]) * stride[n] - padh) * ratioh));
                                }
                                landmarks.Add(landmark);
                            }
                        }
                    }
                }
            }

            int[] indices;
            CvDnn.NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, out indices);

            for (i = 0; i < indices.Length; ++i)
            {
                int idx = indices;
                Rect box = boxes[idx];
                Cv2.Rectangle(result_image, new OpenCvSharp.Point(box.X, box.Y), new OpenCvSharp.Point(box.X + box.Width, box.Y + box.Height), new Scalar(0, 0, 255), 2);
                for (k = 0; k < 8; k += 2)
                {
                    Cv2.Circle(result_image, new OpenCvSharp.Point(landmarks[idx][k], landmarks[idx][k + 1]), 10, new Scalar(0, 255, 0), -1);
                }
                string label = confidences[idx].ToString("P2");
                int baseLine;
                OpenCvSharp.Size labelSize = Cv2.GetTextSize(label, HersheyFonts.HersheySimplex, 0.5, 2, out baseLine);
                int top = Math.Max(box.Y, labelSize.Height);
                Cv2.PutText(result_image, label, new OpenCvSharp.Point(box.X, top - 10), HersheyFonts.HersheySimplex, 1, new Scalar(0, 255, 0), 2);
            }

            stopwatch.Stop();
            double costTime = stopwatch.Elapsed.TotalMilliseconds;

            textBox1.Text = $"耗时:{costTime:F2}ms";
            pictureBox2.Image = new Bitmap(result_image.ToMemoryStream());
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (pictureBox2.Image == null)
            {
                return;
            }
            Bitmap output = new Bitmap(pictureBox2.Image);
            var sdf = new SaveFileDialog();
            sdf.Title = "保存";
            sdf.Filter = "Images (*.jpg)|*.jpg|Images (*.png)|*.png|Images (*.bmp)|*.bmp";
            if (sdf.ShowDialog() == DialogResult.OK)
            {
                switch (sdf.FilterIndex)
                {
                    case 1:
                        output.Save(sdf.FileName, ImageFormat.Jpeg);
                        break;
                    case 2:
                        output.Save(sdf.FileName, ImageFormat.Png);
                        break;
                    case 3:
                        output.Save(sdf.FileName, ImageFormat.Bmp);
                        break;
                }
                MessageBox.Show("保存成功,位置:" + sdf.FileName);
            }
        }
    }
}

刚回来,现在你在试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表