<?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[ein Array von char[2500] soll als Bitmap dargestellt werden..]]></title><description><![CDATA[<p>Ich habe einen Array von char[2500].<br />
jetzt möchte ich diesen Array darstellen - klar, in meiner WM_PAINT-Section.</p>
<p>Ich bastle also DIB-Sections und möchte das Ganze dann per StretchBlt darstellen:<br />
&lt;&lt; sämtliche Variablenwerte sind an sich ok..&gt;&gt;</p>
<pre><code class="language-cpp">typedef unsigned char T_KACHEL[2500];
struct S_ARCHEAD
{
  int  SizeOfKachel;
  int  XKCount, YKCount;
  char WaterMark;
};
...

HBITMAP CreateBitMap (HWND hwnd, T_KACHEL *K, S_ARCHEAD *aH)
{
  BITMAPINFOHEADER  bi, 
                   *lpbi;
  RGBQUAD          *lpQuad;
  HBITMAP           hBitmap;
  HDC               hDC;
  HANDLE            hDIB;
  int i;

  bi.biSize         = sizeof(BITMAPINFOHEADER);
  bi.biWidth        = aH-&gt;XKCount;
  bi.biHeight       = aH-&gt;YKCount;
  bi.biPlanes       = 1;
  bi.biBitCount     = 8;
  bi.biCompression  = BI_RGB;
  bi.biSizeImage    = aH-&gt;XKCount * aH-&gt;YKCount;

  bi.biXPelsPerMeter = 0;
  bi.biYPelsPerMeter = 0;
  bi.biClrUsed       = 0;
  bi.biClrImportant  = 0;

  hDIB = GlobalAlloc (GHND, sizeof (BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD));
  lpbi = (BITMAPINFOHEADER*) GlobalLock ( hDIB );

  *lpbi = bi;

  lpQuad = &amp;((LPBITMAPINFO)lpbi)-&gt;bmiColors[0]; 

  for (i = 0; i &lt;= aH-&gt;WaterMark; i++)  // Blau bis zur Wassermarke
  {
    lpQuad-&gt;rgbRed   = 0 + 5 * i;
    lpQuad-&gt;rgbGreen = 0 + 5 * i;
    lpQuad-&gt;rgbBlue  = 0x80;
    lpQuad++;
  }

  for (i = aH-&gt;WaterMark + 1; i &lt;= 255; i++)  // Braun bis zur Wassermarke
  {
    lpQuad-&gt;rgbRed   = 0 + i;
    lpQuad-&gt;rgbGreen = 0 + i;
    lpQuad-&gt;rgbBlue  = aH-&gt;WaterMark;
    lpQuad++;
  }

   hDC = GetDC(hwnd);

      hBitmap = CreateDIBSection(hDC, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS, 
                                 (VOID **) &amp;K, NULL, 0);

   ReleaseDC(hwnd, hDC);
   GlobalUnlock( hDIB );                               
   GlobalFree  ( hDIB );

}
</code></pre>
<p>Soviel zum CreateDIBSection()..</p>
<p>hier die (gekürzte Fensterfunktion:</p>
<pre><code class="language-cpp">LRESULT CALLBACK C_mygrid::ChildProc(HWND hWnd, UINT message, 
                                      WPARAM wParam, LPARAM lParam)
{
C_mygrid *Sc = (C_mygrid*) GetWindowLong(hWnd, GWL_USERDATA);
  int ScItemX, ScItemY, ScStep;
  T_KACHEL *K;

  PAINTSTRUCT ps;
  HDC hDC, hMemDC;
  BITMAP bm;  
  RECT rect;
  HBRUSH Brush;

  float MapCX, MapCY; 
  int CiRad; 

    switch (message)                  /* handle the messages */
    {
   ...
        case WM_PAINT:    
/* Todo: Mapdaten darstellen */
            ScStep =(int)(Sc-&gt;fZoom * (float)50);
            K = &amp;Sc-&gt;Felddaten[0];
            GetClientRect(hWnd, &amp;rect);
            for (ScItemX= 0; ScItemX &lt;= Sc-&gt;FileHeader.XKCount; ScItemX += 1)
             {
             for (ScItemY = 0; ScItemY &lt;= Sc-&gt;FileHeader.YKCount; ScItemY += 1)
                 {
                  K = &amp;Sc-&gt;Felddaten[ScItemY * Sc-&gt;FileHeader.XKCount + ScItemX];
                  hMemDC = CreateCompatibleDC( hDC );
                  Sc-&gt;BitMap = CreateBitMap(hWnd, K, &amp;Sc-&gt;FileHeader);

                  GetObject ( Sc-&gt;BitMap, sizeof(BITMAP), &amp;bm);
                  SelectObject (hMemDC, Sc-&gt;BitMap);

//                  rect.left = (int)  (Sc-&gt;fZoom * (50 * Sc-&gt;TickX + ScItemX));
//                  rect.top = (int)   (Sc-&gt;fZoom * (50 * Sc-&gt;TickY + ScItemY));
//                  rect.right = (int) (Sc-&gt;fZoom * (50 * Sc-&gt;TickX + ScItemX + 1.0));
//                  rect.bottom = (int)(Sc-&gt;fZoom * (50 * Sc-&gt;TickY + ScItemY + 1.0));

                  SetStretchBltMode (hDC, STRETCH_DELETESCANS);
                  StretchBlt(hDC, rect.left, rect.top, rect.right, rect.bottom,
                              hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
                  DeleteDC( hMemDC );
                  ReleaseDC ( hWnd, hDC );
                  DeleteObject ( Sc-&gt;BitMap );                       
                 }
             }

/* Raster Darstellen */
             /* funktioniert - deswegen kommt's hier raus. */
            break;
...
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hWnd, message, wParam, lParam);
    }

    return 0;

}
</code></pre>
<p>So, was ist nun nicht richtig?<br />
Ich gebe zu, dass ich sowas noch nie probiert habe und deswegen relativ wenig Ahnung von DIBSections..</p>
<p>plz hlp!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>cYa &amp;&amp; thx<br />
DjR</p>
<p>[ Dieser Beitrag wurde am 04.12.2002 um 21:30 Uhr von <strong>DocJunioR</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/15579/ein-array-von-char-2500-soll-als-bitmap-dargestellt-werden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 18:43:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/15579.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Dec 2002 20:20:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Wed, 04 Dec 2002 20:20:00 GMT]]></title><description><![CDATA[<p>Ich habe einen Array von char[2500].<br />
jetzt möchte ich diesen Array darstellen - klar, in meiner WM_PAINT-Section.</p>
<p>Ich bastle also DIB-Sections und möchte das Ganze dann per StretchBlt darstellen:<br />
&lt;&lt; sämtliche Variablenwerte sind an sich ok..&gt;&gt;</p>
<pre><code class="language-cpp">typedef unsigned char T_KACHEL[2500];
struct S_ARCHEAD
{
  int  SizeOfKachel;
  int  XKCount, YKCount;
  char WaterMark;
};
...

HBITMAP CreateBitMap (HWND hwnd, T_KACHEL *K, S_ARCHEAD *aH)
{
  BITMAPINFOHEADER  bi, 
                   *lpbi;
  RGBQUAD          *lpQuad;
  HBITMAP           hBitmap;
  HDC               hDC;
  HANDLE            hDIB;
  int i;

  bi.biSize         = sizeof(BITMAPINFOHEADER);
  bi.biWidth        = aH-&gt;XKCount;
  bi.biHeight       = aH-&gt;YKCount;
  bi.biPlanes       = 1;
  bi.biBitCount     = 8;
  bi.biCompression  = BI_RGB;
  bi.biSizeImage    = aH-&gt;XKCount * aH-&gt;YKCount;

  bi.biXPelsPerMeter = 0;
  bi.biYPelsPerMeter = 0;
  bi.biClrUsed       = 0;
  bi.biClrImportant  = 0;

  hDIB = GlobalAlloc (GHND, sizeof (BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD));
  lpbi = (BITMAPINFOHEADER*) GlobalLock ( hDIB );

  *lpbi = bi;

  lpQuad = &amp;((LPBITMAPINFO)lpbi)-&gt;bmiColors[0]; 

  for (i = 0; i &lt;= aH-&gt;WaterMark; i++)  // Blau bis zur Wassermarke
  {
    lpQuad-&gt;rgbRed   = 0 + 5 * i;
    lpQuad-&gt;rgbGreen = 0 + 5 * i;
    lpQuad-&gt;rgbBlue  = 0x80;
    lpQuad++;
  }

  for (i = aH-&gt;WaterMark + 1; i &lt;= 255; i++)  // Braun bis zur Wassermarke
  {
    lpQuad-&gt;rgbRed   = 0 + i;
    lpQuad-&gt;rgbGreen = 0 + i;
    lpQuad-&gt;rgbBlue  = aH-&gt;WaterMark;
    lpQuad++;
  }

   hDC = GetDC(hwnd);

      hBitmap = CreateDIBSection(hDC, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS, 
                                 (VOID **) &amp;K, NULL, 0);

   ReleaseDC(hwnd, hDC);
   GlobalUnlock( hDIB );                               
   GlobalFree  ( hDIB );

}
</code></pre>
<p>Soviel zum CreateDIBSection()..</p>
<p>hier die (gekürzte Fensterfunktion:</p>
<pre><code class="language-cpp">LRESULT CALLBACK C_mygrid::ChildProc(HWND hWnd, UINT message, 
                                      WPARAM wParam, LPARAM lParam)
{
C_mygrid *Sc = (C_mygrid*) GetWindowLong(hWnd, GWL_USERDATA);
  int ScItemX, ScItemY, ScStep;
  T_KACHEL *K;

  PAINTSTRUCT ps;
  HDC hDC, hMemDC;
  BITMAP bm;  
  RECT rect;
  HBRUSH Brush;

  float MapCX, MapCY; 
  int CiRad; 

    switch (message)                  /* handle the messages */
    {
   ...
        case WM_PAINT:    
/* Todo: Mapdaten darstellen */
            ScStep =(int)(Sc-&gt;fZoom * (float)50);
            K = &amp;Sc-&gt;Felddaten[0];
            GetClientRect(hWnd, &amp;rect);
            for (ScItemX= 0; ScItemX &lt;= Sc-&gt;FileHeader.XKCount; ScItemX += 1)
             {
             for (ScItemY = 0; ScItemY &lt;= Sc-&gt;FileHeader.YKCount; ScItemY += 1)
                 {
                  K = &amp;Sc-&gt;Felddaten[ScItemY * Sc-&gt;FileHeader.XKCount + ScItemX];
                  hMemDC = CreateCompatibleDC( hDC );
                  Sc-&gt;BitMap = CreateBitMap(hWnd, K, &amp;Sc-&gt;FileHeader);

                  GetObject ( Sc-&gt;BitMap, sizeof(BITMAP), &amp;bm);
                  SelectObject (hMemDC, Sc-&gt;BitMap);

//                  rect.left = (int)  (Sc-&gt;fZoom * (50 * Sc-&gt;TickX + ScItemX));
//                  rect.top = (int)   (Sc-&gt;fZoom * (50 * Sc-&gt;TickY + ScItemY));
//                  rect.right = (int) (Sc-&gt;fZoom * (50 * Sc-&gt;TickX + ScItemX + 1.0));
//                  rect.bottom = (int)(Sc-&gt;fZoom * (50 * Sc-&gt;TickY + ScItemY + 1.0));

                  SetStretchBltMode (hDC, STRETCH_DELETESCANS);
                  StretchBlt(hDC, rect.left, rect.top, rect.right, rect.bottom,
                              hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
                  DeleteDC( hMemDC );
                  ReleaseDC ( hWnd, hDC );
                  DeleteObject ( Sc-&gt;BitMap );                       
                 }
             }

/* Raster Darstellen */
             /* funktioniert - deswegen kommt's hier raus. */
            break;
...
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hWnd, message, wParam, lParam);
    }

    return 0;

}
</code></pre>
<p>So, was ist nun nicht richtig?<br />
Ich gebe zu, dass ich sowas noch nie probiert habe und deswegen relativ wenig Ahnung von DIBSections..</p>
<p>plz hlp!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>cYa &amp;&amp; thx<br />
DjR</p>
<p>[ Dieser Beitrag wurde am 04.12.2002 um 21:30 Uhr von <strong>DocJunioR</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84424</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Wed, 04 Dec 2002 20:20:00 GMT</pubDate></item><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Fri, 21 Apr 2006 00:34:08 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041620</guid><dc:creator><![CDATA[DocJunioR|Off]]></dc:creator><pubDate>Fri, 21 Apr 2006 00:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Fri, 21 Apr 2006 11:06:16 GMT]]></title><description><![CDATA[<p>Ich sehe nirgends den Inhalt dieses Char-Arrays initialisiert.</p>
<p>Mfg Ominion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041848</guid><dc:creator><![CDATA[Ominion]]></dc:creator><pubDate>Fri, 21 Apr 2006 11:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Fri, 21 Apr 2006 12:05:47 GMT]]></title><description><![CDATA[<p>wer zum Geier durchsucht uralte posts um sie hoch zu pushen??<br />
Und warum benutzt der Honk auch noch meinen Nick für solch Schwachsinn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041904</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 21 Apr 2006 12:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Fri, 21 Apr 2006 12:18:46 GMT]]></title><description><![CDATA[<p>Naja das scheint jetzt jemand lustig zu finden. Das war mit der Schriftart auch so.<br />
Topic: Hast du die Lösung schon?</p>
<p>Mfg Ominion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041912</guid><dc:creator><![CDATA[Ominion]]></dc:creator><pubDate>Fri, 21 Apr 2006 12:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Fri, 21 Apr 2006 12:28:40 GMT]]></title><description><![CDATA[<p>Ich bin der Meinung, dass ja.. allerdings ist das schon 3.4 Jahre her.. Ich weiß gerade mal noch halbwegs, was für ein Programm ich da gebaut hatte.<br />
Kann also nicht genau sagen, wie ich's gelöst hab..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041923</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 21 Apr 2006 12:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to ein Array von char[2500] soll als Bitmap dargestellt werden.. on Fri, 21 Apr 2006 12:34:39 GMT]]></title><description><![CDATA[<p>Aso...kann ja sein das du das immer noch nicht gelöst hast, und dein Programm irgendwo auf der Festplatte vergamelt, deshalb meine Frage.</p>
<p>Mfg Ominion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041938</guid><dc:creator><![CDATA[Ominion]]></dc:creator><pubDate>Fri, 21 Apr 2006 12:34:39 GMT</pubDate></item></channel></rss>