<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kamera Auslesen, Fragen zu DIB]]></title><description><![CDATA[<p>Ich habe eine Kamera die ich mit C++ auslesen möchte. Leider habe ich als Beispielcode für die DLL nur Delphi Code und stehe vor dem Rätsel wie man das nun in MFC unsemtzen könnte.</p>
<p>Da steht folgendes (delpi code, gekürzt):</p>
<pre><code class="language-cpp">pBuf : pointer;
DibPixels : pchar;
FrameBuf : TRgbPixArray;
FrameP : PChar;
Status := CxGetSnapshot(H, 1, True, True, True, FrameP, RAME_WIDTH*FRAME_HEIGHT, RetLen);
pBuf := FrameP;
DibPixels:=pBuf;
SetDIBitsToDevice(DC, dx, dy, ScW, ScH, 0, 0, 0, ScH, DibPixels, TBitMapInfo((@FDib)^), DIB_RGB_COLORS);
</code></pre>
<p>SetDIBitsToDevice gibts ja auch in Win32<br />
aber wie setzte ich das ganze nun in MFC um?</p>
<p>Konkret:<br />
- wie muss ich ein Array anlegen so dass die Daten als DIB darin gespeichert werden können?<br />
- gibt es eine andere/einfacherer Methode als SetDIBitsToDevice um dieses Array darzustellen?<br />
- was sollte ich sonst noch beachten?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190184/kamera-auslesen-fragen-zu-dib</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 15:20:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190184.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Aug 2007 13:52:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Mon, 20 Aug 2007 13:52:54 GMT]]></title><description><![CDATA[<p>Ich habe eine Kamera die ich mit C++ auslesen möchte. Leider habe ich als Beispielcode für die DLL nur Delphi Code und stehe vor dem Rätsel wie man das nun in MFC unsemtzen könnte.</p>
<p>Da steht folgendes (delpi code, gekürzt):</p>
<pre><code class="language-cpp">pBuf : pointer;
DibPixels : pchar;
FrameBuf : TRgbPixArray;
FrameP : PChar;
Status := CxGetSnapshot(H, 1, True, True, True, FrameP, RAME_WIDTH*FRAME_HEIGHT, RetLen);
pBuf := FrameP;
DibPixels:=pBuf;
SetDIBitsToDevice(DC, dx, dy, ScW, ScH, 0, 0, 0, ScH, DibPixels, TBitMapInfo((@FDib)^), DIB_RGB_COLORS);
</code></pre>
<p>SetDIBitsToDevice gibts ja auch in Win32<br />
aber wie setzte ich das ganze nun in MFC um?</p>
<p>Konkret:<br />
- wie muss ich ein Array anlegen so dass die Daten als DIB darin gespeichert werden können?<br />
- gibt es eine andere/einfacherer Methode als SetDIBitsToDevice um dieses Array darzustellen?<br />
- was sollte ich sonst noch beachten?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348318</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 20 Aug 2007 13:52:54 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Mon, 20 Aug 2007 20:42:32 GMT]]></title><description><![CDATA[<p>Mal anders gefragt, hast du überhaupt schon ein Bild der Cam in einem IVideoWindow oder überhaupt etc., den so wie ich das sehe, sind wohl gesonderte Delphidateien dazu zuständig und solang du die Cam noch nicht in einem FilterGraph mit SampleGrabber hast, oder eine CaptureCallback für VfW, bringt dir das da reichlich wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348560</guid><dc:creator><![CDATA[orr lol]]></dc:creator><pubDate>Mon, 20 Aug 2007 20:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Tue, 21 Aug 2007 06:55:36 GMT]]></title><description><![CDATA[<p>orr lol schrieb:</p>
<blockquote>
<p>Mal anders gefragt, hast du überhaupt schon ein Bild der Cam in einem IVideoWindow oder überhaupt etc., den so wie ich das sehe, sind wohl gesonderte Delphidateien dazu zuständig und solang du die Cam noch nicht in einem FilterGraph mit SampleGrabber hast, oder eine CaptureCallback für VfW, bringt dir das da reichlich wenig.</p>
</blockquote>
<p>Ich verstehe nicht wirklich was du meinst.<br />
Für die (Film)Kamera gibt es ein Programm mit dem ich die Bilder anschauen, die Einstellungen verändern und ein Video abspeichern kann.</p>
<p>Um das ganze auch selber machen zu können gibt es eine dll mit einer Wrapperklasse die die DLL lädt und die Funktionen zur Verfügung stellt (Alles C++). CxGetSnapshot ist eine solche Funktion.</p>
<p>In Delphi6 und VB5 gibt es Beispielprojekte die diese DLL nutzen. Mein Problem ist nur eine äquivalente C++ Ansteuerung zu schreiben, und dabei genauer die Daten auf den Bildschirm zu bringen.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348656</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 21 Aug 2007 06:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Tue, 21 Aug 2007 07:11:00 GMT]]></title><description><![CDATA[<p>das mit dem IVideoWindow kannst ignoriern<br />
er redet von directshow und das benutzt du hier garnich und brauchst du auch nich</p>
<p>nun zu deinem problem<br />
prinzipiell gibt es imho nur eine SetDIBitsToDevice funktion, d.h. delphi ruft<br />
die c funktion auf</p>
<p>du musst also eigentich nur den delphi code in c++ umschreiben</p>
<p>SetDIBitsToDevice funktioniert an sich so, dass du einen HDC von deinem fenster<br />
brauchst auf das du zeichnen willst, dann gibst gibst du noch den bereich an<br />
den du zeichnen willst. an der adresse von lpvBits müssen sich die bilddaten<br />
befinden und dann musst du auch noch einen Bitmapinfoheader übergeben der das<br />
format der bilddaten enthält.</p>
<p>is an sich nich so schwer aber beim ersten mal n bissi hakelig.</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/ms532346.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms532346.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348674</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Tue, 21 Aug 2007 07:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Tue, 21 Aug 2007 14:35:45 GMT]]></title><description><![CDATA[<p>Ich habe jetzt folgendes probiert und wüsste gerne ob das vom Ansatz her richtig ist. Inbesondere ist mir unklar ob BYTE die richtige Initialisierung für ein Array von DIB Daten ist.</p>
<pre><code class="language-cpp">BYTE* m_CameraFrameArray;

CDlgCamera::CDlgCamera(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgCamera::IDD, pParent)
{
	m_camera.Initialize(); //loads Camera dll and does initialisation
	m_HandleCamera = m_camera.CxOpenDevice(0); // open camera and save device
	m_camera.CxGetScreenParams(m_HandleCamera, &amp;m_CameraParameters);
	m_CameraSize.x=m_CameraParameters.Width;
	m_CameraSize.y=m_CameraParameters.Height;
	m_CameraFrameArray = new BYTE[m_CameraSize.x * m_CameraSize.y];	
}
</code></pre>
<pre><code class="language-cpp">int BufSize = m_CameraSize.x*m_CameraSize.y;
	int iTimeOut=1;
	bool boolTriggerEnabled = false;
	bool boolTriggerPosEnabled = false;
	DWORD *retlength;
	int result = m_camera.CxGetSnapshot(m_HandleCamera, 
		iTimeOut, 
		boolTriggerEnabled, 
		boolTriggerPosEnabled, 
		true, 
		m_CameraFrameArray, 
		BufSize, 
		retlength);

	m_WndGraphCamera.SetDIB(m_CameraFrameArray);
</code></pre>
<pre><code class="language-cpp">void CGraphCtrl::SetDIB(BYTE* DIBArray)
{	
	if  ((PixelNumber.x&gt;0) &amp;&amp; (PixelNumber.y &gt; 0))
	{
		DIBDataEnabled = true;
		pDIBData = new BYTE[PixelNumber.x*PixelNumber.y];
		memcpy(pDIBData, DIBArray, PixelNumber.x*PixelNumber.y*sizeof(BYTE));
	}
}
</code></pre>
<pre><code class="language-cpp">void CGraphCtrl::OnPaint() 
{
	CPaintDC dc(this); // device context for painting	

	if (PixelNumber.x == 0)
		return;

	if (DIBDataEnabled)
	{

   //First step: Create BITMAP Header info:
  BITMAPINFOHEADER bitmapInfo;
  ::ZeroMemory(&amp;bitmapInfo,sizeof(BITMAPINFOHEADER));
  bitmapInfo.biSize = sizeof(BITMAPINFOHEADER);
  bitmapInfo.biWidth = PixelNumber.x;/*enter Width*/
  bitmapInfo.biHeight = PixelNumber.y;/*enter Height*/
  bitmapInfo.biPlanes = 1;
  bitmapInfo.biBitCount = 32/*bit per pixel 24,32 */ ; //&lt;-------LOOK HERE!!!
  bitmapInfo.biCompression = 0;  //RGB
  bitmapInfo.biSizeImage = bitmapInfo.biWidth*bitmapInfo.biHeight*bitmapInfo.biBitCount/8;

SetDIBitsToDevice(dc, 0, 0, bitmapInfo.biWidth, bitmapInfo.biHeight, 0, 0, 0, bitmapInfo.biHeight, pDIBData, (LPBITMAPINFO)&amp;bitmapInfo, DIB_RGB_COLORS);
		DIBDataEnabled=false;
		return;
	}
}
</code></pre>
<p>In der jetzigen Form stürzt das Programm jedoch bei &quot;CxGetSnapshot&quot; ab.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349120</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 21 Aug 2007 14:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Tue, 21 Aug 2007 15:22:35 GMT]]></title><description><![CDATA[<p>welches bildformat hat die kamera, was sagt die kamera doku?<br />
in deinem code nimmst du ein graubild mit einem hpitch von einem byte und einem vpitch von m_CameraParameters.Width byte an.</p>
<p>bist sicher, dass des stimmt?</p>
<p>BYTE is als datentyp ok denk ich... kannst aber auch gleich unsigned char* nehmen</p>
<p>was bedeuten die parameter von CxGetSnapshot?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349157</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Tue, 21 Aug 2007 15:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Tue, 21 Aug 2007 15:46:40 GMT]]></title><description><![CDATA[<p>Sovok schrieb:</p>
<blockquote>
<p>welches bildformat hat die kamera, was sagt die kamera doku?</p>
</blockquote>
<p>Das bekomme ich mit</p>
<pre><code>m_camera.CxGetScreenParams(m_HandleCamera, &amp;m_CameraParameters);
    m_CameraSize.x=m_CameraParameters.Width;
    m_CameraSize.y=m_CameraParameters.Height;
</code></pre>
<p>Kann ich aber auch einstellen mit</p>
<pre><code>m_camera.CxSetScreenParams(m_HandleCamera, &amp;m_CameraParameters);
</code></pre>
<p>Sovok schrieb:</p>
<blockquote>
<p>in deinem code nimmst du ein graubild mit einem hpitch von einem byte und einem vpitch von m_CameraParameters.Width byte an.</p>
</blockquote>
<p>Diese Daten sagen mir jetzt nichts. Ein Graybild ist es aber auf jeden Fall.</p>
<p>Sovok schrieb:</p>
<blockquote>
<p>BYTE is als datentyp ok denk ich... kannst aber auch gleich unsigned char* nehmen</p>
</blockquote>
<p>Ich hatte an 8 Bit gedacht. Dann vermute ich das unsigned char* auch 8 Bit breit ist.</p>
<p>Sovok schrieb:</p>
<blockquote>
<p>was bedeuten die parameter von CxGetSnapshot?</p>
</blockquote>
<p>Aus der Doku:</p>
<blockquote>
<p>CxGetSnapshot</p>
<p>Grabs the hardware snapshot into the memory buffer.</p>
<p>Parameters:<br />
DeviceHandle 32-bit integer value previously returned by CxOpenDevice function<br />
Timeout 32-bit integer value, wait timeout period, sec<br />
ExtTrgEnabled boolean, TRUE if wait external event<br />
ExtTrgPositive boolean, TRUE if wait positive level else negative<br />
SnapshotMode boolean, reserved, always True<br />
pBuf pointer to the frame buffer that receives the data<br />
BufSize 32-bit integer value specifying the buffer size, in bytes<br />
pRetLen pointer to 32-bit unsigned integer receiving the return snapshot size</p>
<p>Return Value:<br />
Nonzero if successful</p>
<p>Remarks:<br />
This function requires to turn the video stream OFF.</p>
</blockquote>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349177</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 21 Aug 2007 15:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kamera Auslesen, Fragen zu DIB on Tue, 21 Aug 2007 16:00:14 GMT]]></title><description><![CDATA[<p>es geht im prinzip darum, dass manche kameras z.b. ein 640x480 bild haben<br />
aber z.b. 800x600 byte speicher für die bildaufnahme brauchen</p>
<p>hpitch = horizontaler abstand zweier pixel im bild in bytes<br />
vpitch = vertikaler abstand zweier zeilen im bild in bytes</p>
<p>der absturz deutet drauf hin, dass über den speicherbereich rausgelaufen wird<br />
kannst du noch posten welche exception auftritt?</p>
<p>müsstest du im debugmodus im ausgabefenster sehn<br />
ich tipp auf access violation</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349190</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Tue, 21 Aug 2007 16:00:14 GMT</pubDate></item></channel></rss>