使用C#从图像数据库文件获取图像
图像文件对象使您可以从图像文件获取图像,以及将获取的图像保存到图像文件中以备后用。VisionPro为图像文件对象提供了几种类,具体取决于您要使用的图像格式:
- 对CDB / IDB文件使用CogImageFileCDB对象
- 将CogImageFileBMP对象用于位图文件
- 对TIFF文件使用CogImageFileTIFF对象
读取带有图像文件对象的图像文件需要执行以下步骤:
- 创建一个图像文件对象。
- 打开图像文件进行读取。
- 获取图像以供使用和显示。
1. 添加引用
- Cognex.VisionPro
- Cognex.VisionPro.ImageFile
2. 定义变量和枚举
public enum ImageFileType {OTHER,IDB,CDB,BMP,TIFF,}private CogImageFileCDB myImageFileOperator;private CogImageFileBMP myImageFileBMP;private CogImageFileTIFF myImageFileTIFF;private int counter;private int maxImage;private ImageFileType CurrentFileType;
3. 创建一个图像文件对象
private ImageFileType ConvertStringToImageFileType(string text) {if (text.Contains(".cdb"))return ImageFileType.CDB;if (text.Contains(".idb"))return ImageFileType.IDB;if (text.Contains(".bmp"))return ImageFileType.BMP;if (text.Contains(".tiff"))return ImageFileType.TIFF;elsereturn ImageFileType.OTHER;}private void InitializeFifo() {counter = 0;CurrentFileType = ConvertStringToImageFileType(Path.GetExtension(textBoxFilePath.Text));switch (CurrentFileType){case ImageFileType.IDB:case ImageFileType.CDB:myImageFileOperator = new CogImageFileCDB();myImageFileOperator.Open(textBoxFilePath.Text, CogImageFileModeConstants.Read);maxImage = myImageFileOperator.Count;break;case ImageFileType.BMP:myImageFileBMP = new CogImageFileBMP();myImageFileBMP.Open(textBoxFilePath.Text,CogImageFileModeConstants.Read);maxImage = myImageFileBMP.Count;break;case ImageFileType.TIFF:myImageFileTIFF = new CogImageFileTIFF();myImageFileTIFF.Open(textBoxFilePath.Text,CogImageFileModeConstants.Read);maxImage = myImageFileTIFF.Count;break;case ImageFileType.OTHER:maxImage = 0;break;default:break;};}
4. 打开图像文件进行读取
打开Form2.cs[设计]界面,新增两个按钮,一个TextBox用于显示路径,一个label显示当前图片位置和总数,一个CogDisplay控件
界面如下:
处理按钮点击事件
private void button2_Click(object sender, EventArgs e){using (OpenFileDialog openFileDialog = new OpenFileDialog()){// 设置文件过滤器openFileDialog.Filter = "Image Files (*.cdb;*.idb;*.bmp;*.tiff)|*.cdb;*.idb;*.bmp;*.tiff";openFileDialog.Title = "选择图片文件";// 显示对话框并检查用户是否选择了文件if (openFileDialog.ShowDialog() == DialogResult.OK){// 将选择的文件路径赋值给文本框textBoxFilePath.Text = openFileDialog.FileName;}}InitializeFifo();}
5. 获取图像以供使用和显示
/// <summary>/// 浏览/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){if (counter==maxImage){counter = 0;}switch (CurrentFileType){case ImageFileType.IDB:case ImageFileType.CDB:cogDisplay1.Image = myImageFileOperator[counter];break;case ImageFileType.BMP:cogDisplay1.Image = myImageFileBMP[counter];break;case ImageFileType.TIFF:cogDisplay1.Image = myImageFileTIFF[counter];break;case ImageFileType.OTHER:MessageBox.Show("图片格式错误!");break;default:break;}counter = counter + 1;this.label1.Text = $"第{counter}张/共{maxImage}张";}
6. 处理窗体关闭事件
private void Form2_FormClosing(object sender, FormClosingEventArgs e){Application.DoEvents();cogDisplay1.Dispose();}
总结
一个简易的图片数据库文件浏览器到这里就实现了.
扩展
如果您的应用程序要求您读取多种文件类型,可以使用通用的CogImageFile对象。
后台代码改动如下:
private int counter;private int maxImages;private CogImageFile ImageFile;private void InitializeFifo() {ImageFile = new CogImageFile();ImageFile.Open(textBoxFilePath.Text,CogImageFileModeConstants.Read);counter = 0;maxImages = ImageFile.Count;}private void button1_Click(object sender, EventArgs e){if (ImageFile==null){MessageBox.Show("没有输入图像!");}if (counter == maxImages){counter = 0;}cogDisplay1.Image = ImageFile[counter];counter = counter + 1;label1.Text = $"第{counter}/{maxImages}张";}private void button2_Click(object sender, EventArgs e){using (OpenFileDialog fileDialog=new OpenFileDialog()){if (fileDialog.ShowDialog()==DialogResult.OK){textBoxFilePath.Text = fileDialog.FileName;}}InitializeFifo();}}
}