2

プログラムで写真を撮るためにWIAを使用しています。この画像は、デスクトップの特定のフォルダーにコピーされます。保存部分を除いて、すべてが順調に進んでいます。

void deviceManager_OnEvent(string EventID, string DeviceID, string ItemID)
    {

        for (int i = 1; i <= d.Items.Count; i++)
        {
            wiaImageFile = (WIA.ImageFile)d.Items[i].Transfer(FormatID.wiaFormatJPEG);
            wiaImageFile.SaveFile(Properties.Settings.Default.FolderNameRaw + "\\1.jpg");
            if (wiaImageFile != null)
                Marshal.ReleaseComObject(wiaImageFile);
        }
    }

このコードでは、カメラのSDカードに写真が2枚しかないにもかかわらず、d.Items.Countが絶えず増加しています(たとえば、実際のカウントとは完全に異なる29)。ファイルを自分のコンピューターに正しく転送したり、切り取ったりする方法はありますか?これは私が受け取る例外です。 ここに画像の説明を入力してください

4

1 に答える 1

1

これに対する答えは、単にインデックスの最後のエントリを選択することです。私の場合、最新の写真を撮るだけでよいので、これでうまくいきます。

if (EventID == WIA.EventID.wiaEventDeviceConnected)
        {
            Console.WriteLine("Connected: D5100");
        }
        if (EventID == WIA.EventID.wiaEventItemCreated)
        {
            if (d != null)
            {
                foreach (Property p in d.Properties)
                {
                    if (p.Name.Equals("Pictures Taken"))
                        Console.WriteLine("Taken");
                }

                wiaImageFile = (WIA.ImageFile)(d.Items[d.Items.Count].Transfer(FormatID.wiaFormatJPEG));
                wiaImageFile.SaveFile(Properties.Settings.Default.FolderNameRaw + "\\" + imageCount + ".jpg");
                imageCount++;
            }
        }

これは非常にうまく機能します。ただし、何らかの理由でファイルがすでに存在する場合は、キャッチして問題を修正する必要があります。

于 2012-12-18T03:39:47.643 に答える