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);