简介:
一台尼康D5100数码相机,里面已经拍好了若干照片,通过USB连接电脑。现在通过C#程序,获取其相片集合。
主要通过WIA操作。WIA:Microsoft Windows Image Acquisition Library v2.0。
这是一个COM操作,需要在项目里右键引用,选择COM,勾选Microsoft Windows Image Acquisition Library v2.0。
引用成功后,右键此WIA->属性,将“嵌入互操作类型”修改为False。
WInform代码如下(界面上添加一个Button按钮,一个PictureBox即可):
private void button1_Click(object sender, EventArgs e)
{
Device device = null;
DeviceManager deviceManager = new DeviceManagerClass();
foreach (DeviceInfo deviceInfo in deviceManager.DeviceInfos)
if (deviceInfo.Type == WiaDeviceType.CameraDeviceType)
{
device = deviceInfo.Connect();
break;
}
List<Image> imgList = new List<Image>();
int count = device.Items.Count;
for(int i=1;i<=count;i++)
{
ImageFile imageFile = (ImageFile)device.Items[i].Transfer(FormatID.wiaFormatTIFF);
imgList.Add( ExtractImages(imageFile).FirstOrDefault());
}
this.pictureBox1.Image = imgList[0];
}
/// <summary>
/// Liest alle Bilder aus dem angegebenen ImageFile-Objekt aus
/// </summary>
/// <param name="imageFile">das ImageFile-Objekt, dessen enthaltene Bilder ausgelesen werden sollen</param>
/// <returns>eine Auflistung der Bilder, die das ImageFile-Objekt enthält</returns>
private static IEnumerable<Image> ExtractImages(ImageFile imageFile)
{
for (int frame = 1; frame <= imageFile.FrameCount; frame++)
{
imageFile.ActiveFrame = frame;
ImageFile argbImage = imageFile.ARGBData.get_ImageFile(imageFile.Width, imageFile.Height);
Image result = Image.FromStream(new MemoryStream((byte[])argbImage.FileData.get_BinaryData()));
yield return result;
}
}
备注:附带资源下载资源