c#解决图片被锁住无法修改删除的问题

 Image im = Image.FromFile(str_path1);
                    Bitmap bm = new Bitmap(im);
                    im.Dispose();
                    pictureBox1.Image = bm;

如果直接将读到的图片赋值给pictureBox,w会造成程序不关闭会一直占用的该文件,从而其它程序无法修改、删除图片。

以上代码解决被占用的问题。

另一种copy方法:

 Bitmap bitmapcopy = new Bitmap(_bitmap.Width, _bitmap.Height);
                copyBitmap(_bitmap, bitmapcopy);
                pictureBox2.Image = bitmapcopy;

其它关于图片格式转换的一些方法:

   ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
                System.Drawing.Imaging.Encoder myEncoder =
                System.Drawing.Imaging.Encoder.Quality;
              
                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, xianWeiJingCanShu.picLevel);
                myEncoderParameters.Param[0] = myEncoderParameter;
                picID._bitmap.Save($@"D:\检测系统图像\{picID.id}\图像\{picID.id}_{pointNo}_{picID.imageCount.ToString("D2")}.jpg",jpgEncoder,myEncoderParameters);//,ImageFormat.Jpeg
                //imageCount++;
                picID._bitmap.Dispose();
                return;
                System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, picID._bitmap.Width, picID._bitmap.Height);
                System.Drawing.Imaging.BitmapData bmpData = picID._bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.WriteOnly, picID._bitmap.PixelFormat);

                System.Drawing.Imaging.PixelFormat pf = picID._bitmap.PixelFormat;
                if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb)
                {
                    stride = picID._bitmap.Width * 4;
                }
                else
                {
                    stride = picID._bitmap.Width * 3;
                }
                Loger loger = new Loger();
                loger.WriteLog(DateTime.Now.ToString("G"));
                loger.WriteLog($"开始识别------{picID.imageCount}--------"+picID.id);
                byte[] error = new byte[1024 * 10];
                var s = "";
                // DetectImage(im_ptr, size.Width, size.Height, step, ref error[0]);
                DetectImage_img((IntPtr)bmpData.Scan0, picID._bitmap.Width, picID._bitmap.Height, stride, ref error[0]);
                s = Encoding.UTF8.GetString(error);
                dynamic model = JObject.Parse(s);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boat99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值