public int Save(string filePath, JFImageSaveFileType fileType = JFImageSaveFileType.Bmp) { if (string.IsNullOrWhiteSpace(filePath)) { return((int)ErrorDef.ParamError); } string extension = "bmp"; switch (fileType) { case JFImageSaveFileType.Jpg: extension = "jpeg"; break; case JFImageSaveFileType.Png: extension = "png"; break; case JFImageSaveFileType.Tif: extension = "tiff"; break; default: break; } try { HOperatorSet.WriteImage(hoImage, extension, 0, filePath); } catch { return((int)ErrorDef.FileExc); } return((int)ErrorDef.Success); }
/// <summary>保存图像到文件中 </summary> public int Save(string filePath, JFImageSaveFileType fileType = JFImageSaveFileType.Bmp) { string dir = Path.GetDirectoryName(filePath); if (!Directory.Exists(dir)) { DirectoryInfo di = Directory.CreateDirectory(dir); if (di == null || !di.Exists) { return((int)ErrorDef.FolderUnExist); } } try { if (fileType == JFImageSaveFileType.Bmp || fileType == JFImageSaveFileType.Jpg) //调用Hik提供的功能 { int imgFileBuffLen = _frameInfo.nHeight * _frameInfo.nWidth * 3 + 2048; byte[] imgFileBytes = new byte[imgFileBuffLen]; IntPtr pBufImage = Marshal.UnsafeAddrOfPinnedArrayElement(imgFileBytes, 0); MyCamera.MV_SAVE_IMAGE_PARAM_EX stSaveParam = new MyCamera.MV_SAVE_IMAGE_PARAM_EX(); stSaveParam.enImageType = (MyCamera.MV_SAVE_IAMGE_TYPE)(fileType + 1); stSaveParam.enPixelType = _frameInfo.enPixelType; stSaveParam.pData = Marshal.UnsafeAddrOfPinnedArrayElement(_dataBytes, 0);; stSaveParam.nDataLen = _frameInfo.nFrameLen; stSaveParam.nHeight = _frameInfo.nHeight; stSaveParam.nWidth = _frameInfo.nWidth; stSaveParam.pImageBuffer = pBufImage; stSaveParam.nBufferSize = (uint)(_frameInfo.nHeight * _frameInfo.nWidth * 3 + 2048); if (fileType == JFImageSaveFileType.Jpg) //if(stSaveParam.enImageType == MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg) { stSaveParam.nJpgQuality = 99; } int err = _cmr.MV_CC_SaveImageEx_NET(ref stSaveParam); if (MyCamera.MV_OK != err) { return((int)ErrorDef.InvokeFailed); } FileStream pFile = new FileStream(filePath, FileMode.Create); pFile.Write(imgFileBytes, 0, (int)stSaveParam.nImageLen); pFile.Close(); } else if (fileType == JFImageSaveFileType.Tif) { string fn = Path.GetFileNameWithoutExtension(filePath); if (string.IsNullOrEmpty(fn)) { return((int)ErrorDef.FolderUnExist); } object oimg; int ret = GenHalcon(out oimg); if (0 != ret) { return(ret); } string extension = Path.GetExtension(filePath); //if (string.IsNullOrEmpty(extension) || // 0 != string.Compare(".tiff", extension, true) || // 0 != string.Compare(".tif", extension, true)) // filePath += ".tiff"; //if (!string.IsNullOrEmpty(extension)) // 去掉后缀 // filePath = Path.GetFileNameWithoutExtension(filePath); HOperatorSet.WriteImage(oimg as HObject, "tiff", 0, filePath); (oimg as HObject).Dispose(); return((int)ErrorDef.Success); } else if (fileType == JFImageSaveFileType.Png) { string fn = Path.GetFileNameWithoutExtension(filePath); if (string.IsNullOrEmpty(fn)) { return((int)ErrorDef.FolderUnExist); } object oimg; int ret = GenHalcon(out oimg); if (0 != ret) { return(ret); } //string extension = Path.GetExtension(filePath); //if (string.IsNullOrEmpty(extension) || // 0 != string.Compare(".png", extension, true) ) // filePath += ".png"; HOperatorSet.WriteImage(oimg as HObject, "png", 0, filePath); (oimg as HObject).Dispose(); return((int)ErrorDef.Success); } else { return((int)ErrorDef.Unsupported); //throw new ArgumentException("不支持的图像存储格式:" + fileType.ToString()); } return((int)ErrorDef.Success); } catch { return((int)ErrorDef.FileExc); } }