Witam. Piszę w C++ za pomocą visual studio 2008. Korzystam z biblioteki OpenCV.
Za pomocą obiekt timer 2 pobieram ramkę z kamery USB, dodaję do niej pobrany czas i datę i wyświetlam w komponencie PictureBox (poniższy kod). Wszystko działa jak należy :)
private: System::Void timer2_Tick(System::Object^ sender, System::EventArgs^ e)
{
//pobranie daty i czasu systemowego
GetSystemTime(&st);
System::String^ data;
data = ("Data:"+st.wDay+":"+st.wMonth+":"+st.wYear+" Czas:"+(st.wHour+1)+":"+st.wMinute+":"+st.wSecond+"");
//konwersja string data do char napis
//
pin_ptr<const wchar_t> wch = PtrToStringChars(data);
size_t convertedChars = 0;
size_t sizeInBytes = ((data->Length + 1) * 2);
errno_t err = 0;
char* napis = (char *)malloc(sizeInBytes);
err = wcstombs_s(&convertedChars,napis, sizeInBytes,wch, sizeInBytes);
//
//definicja czcionki
CvFont font;
double hScale=0.5;
double vScale=0.5;
int lineWidth=1;
cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX, hScale,vScale,0,lineWidth);
frame = cvQueryFrame(capture);
//naniesienie tekstu na ramkę
cvPutText (frame,napis,cvPoint(370,380), &font, cvScalar(255,255,0));
//podgląd obrazu z kamery
this->pictureBox1->Image = gcnew
System::Drawing::Bitmap(frame->width,frame->height,frame->widthStep,
System::Drawing::Imaging::PixelFormat::Format24bppRgb,
(System::IntPtr) frame->imageData);
}
Za pomocą obiekt timer 3 pobieram ramkę, wyświetlam w pictureBox i zapisuję do pliku AVI za pomocą writera
inicjalizowanego wcześniej kodem:
CvVideoWriter* writer;
writer = cvCreateVideoWriter("tmp.avi", CV_FOURCC('D','I','V','X'), 20, cvSize( frameW, frameH ), 1);
:)
poniżej kod timera 3
private: System::Void timer3_Tick(System::Object^ sender, System::EventArgs^ e)
{
frame = cvQueryFrame(capture);
//podgląd obrazu z kamery
this->pictureBox1->Image = gcnew
System::Drawing::Bitmap(frame->width,frame->height,frame->widthStep,
System::Drawing::Imaging::PixelFormat::Format24bppRgb,
(System::IntPtr) frame->imageData);
//rejestracja sekwencji wideo
cvWriteFrame(writer,frame);
}
Chcę jednak aby do pliku zapisywany był obraz z datą i czasem. ( połączenie timera 2 i 3) Wystarczy teoretycznie dołączyć linię zapisu do pliku (
cvWriteFrame(writer,frame);
) do timera 2 i już. Wyświetlany jest wówczas błąd i komunikat **"próba dostępu do pamięci chronionej". **Nie mam pojęcia jak to obejść :( Proszę o pomoc :)