foto's opslaan met webcam en tevens plaatjes nummeren

  • Onderwerp starter Onderwerp starter zwiep
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

zwiep

Nieuwe gebruiker
Lid geworden
6 okt 2006
Berichten
2
dag mensen,

kan iemand mij helpen met het volgende probleem.
ik probeer plaatjes met een webcam op te slaan, hetgeen nog wel lukt.
maar daarna wil ik deze filename ook een telling meegeven zodat men krijgt
t0001.bmp
t0002.bmp
t0003.bmp

enz.

hieronder heb ik een gedeelte van de code neergezet

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "c_cap.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

TCap *Cap;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
int ii;
TMenuItem *NewItem;

Timer1->Enabled = false;
Cap = new TCap (Handle);

Cap->EnumCapDrv ();

for (ii=0; ii<Cap->pStringCapDrivers->Count; ii++) {
NewItem = new TMenuItem(Options1);
NewItem->Caption = Cap->pStringCapDrivers->Strings[ii];
NewItem->Tag = ii;
NewItem->Checked = ii==0 ? true:false;
NewItem->OnClick = MyMenyClick;
Options1->Add (NewItem);
}
if (ii > 0 )
Cap->Connect (0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyMenyClick(TObject *Sender)
{
int ii;
TMenuItem *MenuItem;

MenuItem = reinterpret_cast <TMenuItem *> (Sender);

if (MenuItem) {
// ---- Disable rest og checked menu
for (ii=0; ii<Options1->Count; ii++) {
Options1->Items[ii]->Checked = false;
}
MenuItem->Checked = true;
Cap->Connect (MenuItem->Tag);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Format1Click(TObject *Sender)
{
Cap->Format ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Source1Click(TObject *Sender)
{
Cap->Source ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Close ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Save1Click(TObject *Sender)
{
if (SavePictureDialog1->Execute ()) {
Cap->CaptureFrame (SavePictureDialog1->FileName.c_str());
}

en ik had de captureFrame in een timer gezet zodat hij telkens een foto neemt. dit is geen probleem, het probleem is als ik wil opslaan en aan de foto telkens een ander nummer wil meegeven.

Heeft iemand hier ervaring mee laat hem dan plz reageren
alvast bedankt
 
Je zou eerst een string kunnen maken met een tellertje erin voor de bestandsnaam (bijv. t0001.bmp t00002.bmp etc) en dan met findfirst() findnext en findclose() gaan kijken of die naam al bestaat. zo nee: maak hem aan, zo ja: verhoog het tellertje.

toch maar even een voorbeeldje, dit had ik nog liggen en is voor MFC gemaakt, maar iig krijg je een idee van wat ik bedoel. De casting e.d. moet je er zelf maar uit vissen ;)


Code:
int iTeller = 0;
char acBuffer[50];

WIN32_FIND_DATA FindFileData;
HANDLE hNaam;
CString str;

while (iTeller <=9999)							
{
        sprintf(acBuffer,"T%04d.bmp", iTeller);		
        str = acBuffer;

        hNaam = FindFirstFile((LPCTSTR)str, &FindFileData);		
        if (hNaam == INVALID_HANDLE_VALUE) //nieuwe naam gevonden!!
        break;
iTeller ++;


}
FindClose(hNaam);

Nogmaal: het kan allemaal mooier, maar werken doet het wel
 
ja dit wil idd, Thnx!!.

alleen nu maakt hij meerdere bestanden aan, alleen hij kopiert telkens dezelfde foto in de bestanden. weet iemand hoe ik dan kan zorgen dat er telkens een niewe foto in het bestand komt te staan?

hoe kan ik deze functie refreshen zo er telkens een nieuwe Frame wordt gecaptured en in de aangemaakte bestanden wordt gezet.

void TCap::CaptureFrame (char *FileName)
{
capFileSaveDIB (hwndVideo, FileName);
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan