<?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[laden von Bitmap optimieren]]></title><description><![CDATA[<p>Hallo,<br />
habe eine Routiene geschrieben, um maximal bei 1024x768 Bildschirmauflösung 784 Bitmap/Image (größe der Bitmap 31x31) auf einem P4 / 2,4Ghz / 512Mb zu laden. Koordinaten und Name der Imagefile liegt in einer Datenbank. Sage vorab, das ich nichts unmögliche möchte. Ladezeit etwa 2 bis 3 sek.<br />
Frage: Besteht die Möglichkeit, dies zu beschleunigen ? Bin immer offen.</p>
<pre><code class="language-cpp">//  ***************************************************************  //
  //    ***************************************************************    //
//      ***************************************************************      //
//---&gt;&gt;&gt;          Gleisbild zum Bearbeiten anzeigen                    &lt;&lt;&lt;---//
//      ***************************************************************      //
  //    ***************************************************************    //
    //  ***************************************************************  //

bool TmyFormNewGleisbild::LoadEditGleisbild(AnsiString asFileName,
     bool &amp;boE,bool &amp;boW,bool &amp;boA)
//
//    erstellt am: 15. August 2006    geändert am: 29. September 2006
//
{
//
AnsiString asR = FNGB+&quot;LoadEditGleisbild&quot;;
boE=false;
boW=false;
boA=false;
//
AnsiString asPathSym;
AnsiString asBuffer;
int iRegCount;
int iPos;
int iSize;
int iSatz;
int XX;
//
//
    try
    {
    try
    {
    //
    ProzessRoutine = asR;
    //
    if (asAktivesGleisbild == asFileName)
      {
      return false;
      }
    //
    myFormHaupt-&gt;ProgressBar1-&gt;Visible = true;
    myFormHaupt-&gt;ProgressBar1-&gt;Position = 0;
    //
  //
//---&gt;          Gleisbild Datenbank öffnen
  //
    //
    if (MyQueryOpen(2,asR,
                    asFileName,asPwUserDb_2,
                    &quot;Str_1&quot;,asMyDatenbank,
                    &quot;Str_4&quot;,asModellbahnGleisbild,
                    &quot;&quot;,&quot;&quot;,
                    iRegCount))
      {
      return  true;    //  und zurück mit Fehler
      }
    //
    asAktivesGleisbild = asFileName;
    //
  //
//---&gt;          Name Gleisbild
  //
    //
    asBuffer = asFileName;
    iPos      = asBuffer.LastDelimiter(&quot;.&quot;);
    asBuffer  = LeftStr(asBuffer, iPos - 1);
    asMyCaptionTop = &quot;  [ MBCC ]  Gleisbild  - - &gt;  &quot; + asBuffer + &quot;  &lt; - -&quot;;
    FrameKopfLabel1-&gt;Label1-&gt;Caption = asMyCaptionTop;
    //
  //
//---&gt;          dynamisch erstelle Bitmap's löschen
  //
    //
    iSize = NewTImage.Length;
    for (int i=0; i&lt;iSize; i++) {delete NewTImage[i];} NewTImage.Length = 0;
    //
    iSize = vasNewTBitmap.size();
    for (int i=0; i&lt;iSize; i++) {vasNewTBitmap[i].clear();} vasNewTBitmap.clear();
    //
    iSize = viNewTBitmap.size();
    for (int i=0; i&lt;iSize; i++) {viNewTBitmap[i].clear();} viNewTBitmap.clear();
    //
  //
//---&gt;          leere Datenbank ?
  //
    //
    if (iRegCount &lt;= 1)
      {
      iSatzanzahl = 0;
      return  false;    //  und zurück
      }
    //
  //
//---&gt;          wieviele aktive Datensätze existieren ?
  //
    //
    DM-&gt;PQuery-&gt;FindFirst();
    iSatz = 0;
    //
    myFormHaupt-&gt;ProgressBar1-&gt;Max = iRegCount;
    //
    for (int i=0; i&lt;iRegCount; i++)
      {   //  i=0; i&lt;iRegCount; i++
        //
        if (asAktiv == DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString)
          {   //  asAktiv == DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString
          viNewTBitmap.resize(viNewTBitmap.size() + 1);
          viNewTBitmap[iSatz].resize(viNewTBitmap[iSatz].size() + iSizeIntBitmap);
          //
          vasNewTBitmap.resize(vasNewTBitmap.size() + 1);
          vasNewTBitmap[iSatz].resize(vasNewTBitmap[iSatz].size() + iSizeBitmap);
          //
          viNewTBitmap[iSatz][0] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;ID&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][1] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_2&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][2] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_3&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][3] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_4&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][4] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_5&quot;)-&gt;AsInteger;
          //
          vasNewTBitmap[iSatz][0] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_21&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][1] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][2] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_23&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][3] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_24&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][4] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_25&quot;)-&gt;AsString;
          //
          myFormHaupt-&gt;ProgressBar1-&gt;Position += 1;
          iSatz ++;
          }   //  asAktiv == DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString
        //
      DM-&gt;PQuery-&gt;FindNext();
      }   //  i=0; i&lt;iRegCount; i++
    //
  //
//---&gt;          n Bitmap's dynamisch erstellen
  //
    //
    iSize = vasNewTBitmap.size();
    //
    for (int iTBitmap=0; iTBitmap&lt;iSize; iTBitmap++)
      {   //  iTBitmap=0; iTBitmap&lt;iSize; iTBitmap++
      asPathSym = asGleisbildBmpPath + vasNewTBitmap[iTBitmap][0];
//
//---&gt;         existier Bmp-File ?
        //
        if (!FileExists(asPathSym))
          {   // !FileExists(asFile)
          ShowMessage(&quot;Bitmap-Datei existiert nicht.  &quot; + asPathSym);
          return true;
          }   // !FileExists(asFile)
        //
//
//---&gt;         jetzt Bitmap dynamisch erstellen
      XX = NewTImage.Length;
      NewTImage.Length++;
      NewTImage[XX] = new TImage(this);
      NewTImage[XX]-&gt;Left     = viNewTBitmap[iTBitmap][1];
      NewTImage[XX]-&gt;Top      = viNewTBitmap[iTBitmap][2];
      NewTImage[XX]-&gt;Width    = iconBitmapWidth;
      NewTImage[XX]-&gt;Height   = iconBitmapHeight;
      NewTImage[XX]-&gt;Tag      = XX;
      NewTImage[XX]-&gt;Picture-&gt;LoadFromFile(asPathSym);
      NewTImage[XX]-&gt;OnMouseDown  = NewTImageMouseDown;
      NewTImage[XX]-&gt;OnMouseMove  = NewTImageMouseMove;
      NewTImage[XX]-&gt;OnMouseUp    = NewTImageMouseUp;
      NewTImage[XX]-&gt;Parent       = this;
      NewTImage[XX]-&gt;Show();
      //
      }   //  iTBitmap=0; iTBitmap&lt;iSize; iTBitmap++
    //
  //
//
    }
    __finally
    {
    //....      Datenbank schliessen
    if (MyQueryClose()) { return  true; }  //  und zurück mit Fehler
    //
    myFormHaupt-&gt;ProgressBar1-&gt;Position = 0;
    myFormHaupt-&gt;ProgressBar1-&gt;Visible = false;
    //....
    }
    //
  //
//
return  false;    //  und zurück
//
//
    }
//
//---&gt;
  catch (Exception &amp;E)
    {iPE=9000;ZentralErrorList(asR,&quot;&quot;,iPE,101,boE=true,boW,boA);return true;}
//
//---&gt;
    catch (...)
    {iPE=9001;ZentralErrorList(asR,&quot;&quot;,iPE,102,boE=true,boW,boA);return true;}
    //
    //
  //
//
//
}
//---------------------------------------------------------------------------
</code></pre>
<p>gruß Siegfried</p>
<p>[Edit] habe vergessen, Bitmapfile Größe 2.070 k<br />
Gruß Siegfried <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/160824/laden-von-bitmap-optimieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 08:39:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160824.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Sep 2006 18:46:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to laden von Bitmap optimieren on Fri, 29 Sep 2006 18:55:47 GMT]]></title><description><![CDATA[<p>Hallo,<br />
habe eine Routiene geschrieben, um maximal bei 1024x768 Bildschirmauflösung 784 Bitmap/Image (größe der Bitmap 31x31) auf einem P4 / 2,4Ghz / 512Mb zu laden. Koordinaten und Name der Imagefile liegt in einer Datenbank. Sage vorab, das ich nichts unmögliche möchte. Ladezeit etwa 2 bis 3 sek.<br />
Frage: Besteht die Möglichkeit, dies zu beschleunigen ? Bin immer offen.</p>
<pre><code class="language-cpp">//  ***************************************************************  //
  //    ***************************************************************    //
//      ***************************************************************      //
//---&gt;&gt;&gt;          Gleisbild zum Bearbeiten anzeigen                    &lt;&lt;&lt;---//
//      ***************************************************************      //
  //    ***************************************************************    //
    //  ***************************************************************  //

bool TmyFormNewGleisbild::LoadEditGleisbild(AnsiString asFileName,
     bool &amp;boE,bool &amp;boW,bool &amp;boA)
//
//    erstellt am: 15. August 2006    geändert am: 29. September 2006
//
{
//
AnsiString asR = FNGB+&quot;LoadEditGleisbild&quot;;
boE=false;
boW=false;
boA=false;
//
AnsiString asPathSym;
AnsiString asBuffer;
int iRegCount;
int iPos;
int iSize;
int iSatz;
int XX;
//
//
    try
    {
    try
    {
    //
    ProzessRoutine = asR;
    //
    if (asAktivesGleisbild == asFileName)
      {
      return false;
      }
    //
    myFormHaupt-&gt;ProgressBar1-&gt;Visible = true;
    myFormHaupt-&gt;ProgressBar1-&gt;Position = 0;
    //
  //
//---&gt;          Gleisbild Datenbank öffnen
  //
    //
    if (MyQueryOpen(2,asR,
                    asFileName,asPwUserDb_2,
                    &quot;Str_1&quot;,asMyDatenbank,
                    &quot;Str_4&quot;,asModellbahnGleisbild,
                    &quot;&quot;,&quot;&quot;,
                    iRegCount))
      {
      return  true;    //  und zurück mit Fehler
      }
    //
    asAktivesGleisbild = asFileName;
    //
  //
//---&gt;          Name Gleisbild
  //
    //
    asBuffer = asFileName;
    iPos      = asBuffer.LastDelimiter(&quot;.&quot;);
    asBuffer  = LeftStr(asBuffer, iPos - 1);
    asMyCaptionTop = &quot;  [ MBCC ]  Gleisbild  - - &gt;  &quot; + asBuffer + &quot;  &lt; - -&quot;;
    FrameKopfLabel1-&gt;Label1-&gt;Caption = asMyCaptionTop;
    //
  //
//---&gt;          dynamisch erstelle Bitmap's löschen
  //
    //
    iSize = NewTImage.Length;
    for (int i=0; i&lt;iSize; i++) {delete NewTImage[i];} NewTImage.Length = 0;
    //
    iSize = vasNewTBitmap.size();
    for (int i=0; i&lt;iSize; i++) {vasNewTBitmap[i].clear();} vasNewTBitmap.clear();
    //
    iSize = viNewTBitmap.size();
    for (int i=0; i&lt;iSize; i++) {viNewTBitmap[i].clear();} viNewTBitmap.clear();
    //
  //
//---&gt;          leere Datenbank ?
  //
    //
    if (iRegCount &lt;= 1)
      {
      iSatzanzahl = 0;
      return  false;    //  und zurück
      }
    //
  //
//---&gt;          wieviele aktive Datensätze existieren ?
  //
    //
    DM-&gt;PQuery-&gt;FindFirst();
    iSatz = 0;
    //
    myFormHaupt-&gt;ProgressBar1-&gt;Max = iRegCount;
    //
    for (int i=0; i&lt;iRegCount; i++)
      {   //  i=0; i&lt;iRegCount; i++
        //
        if (asAktiv == DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString)
          {   //  asAktiv == DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString
          viNewTBitmap.resize(viNewTBitmap.size() + 1);
          viNewTBitmap[iSatz].resize(viNewTBitmap[iSatz].size() + iSizeIntBitmap);
          //
          vasNewTBitmap.resize(vasNewTBitmap.size() + 1);
          vasNewTBitmap[iSatz].resize(vasNewTBitmap[iSatz].size() + iSizeBitmap);
          //
          viNewTBitmap[iSatz][0] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;ID&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][1] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_2&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][2] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_3&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][3] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_4&quot;)-&gt;AsInteger;
          viNewTBitmap[iSatz][4] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Int_5&quot;)-&gt;AsInteger;
          //
          vasNewTBitmap[iSatz][0] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_21&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][1] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][2] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_23&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][3] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_24&quot;)-&gt;AsString;
          vasNewTBitmap[iSatz][4] = DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_25&quot;)-&gt;AsString;
          //
          myFormHaupt-&gt;ProgressBar1-&gt;Position += 1;
          iSatz ++;
          }   //  asAktiv == DM-&gt;PQuery-&gt;Fields-&gt;FieldByName(&quot;Str_22&quot;)-&gt;AsString
        //
      DM-&gt;PQuery-&gt;FindNext();
      }   //  i=0; i&lt;iRegCount; i++
    //
  //
//---&gt;          n Bitmap's dynamisch erstellen
  //
    //
    iSize = vasNewTBitmap.size();
    //
    for (int iTBitmap=0; iTBitmap&lt;iSize; iTBitmap++)
      {   //  iTBitmap=0; iTBitmap&lt;iSize; iTBitmap++
      asPathSym = asGleisbildBmpPath + vasNewTBitmap[iTBitmap][0];
//
//---&gt;         existier Bmp-File ?
        //
        if (!FileExists(asPathSym))
          {   // !FileExists(asFile)
          ShowMessage(&quot;Bitmap-Datei existiert nicht.  &quot; + asPathSym);
          return true;
          }   // !FileExists(asFile)
        //
//
//---&gt;         jetzt Bitmap dynamisch erstellen
      XX = NewTImage.Length;
      NewTImage.Length++;
      NewTImage[XX] = new TImage(this);
      NewTImage[XX]-&gt;Left     = viNewTBitmap[iTBitmap][1];
      NewTImage[XX]-&gt;Top      = viNewTBitmap[iTBitmap][2];
      NewTImage[XX]-&gt;Width    = iconBitmapWidth;
      NewTImage[XX]-&gt;Height   = iconBitmapHeight;
      NewTImage[XX]-&gt;Tag      = XX;
      NewTImage[XX]-&gt;Picture-&gt;LoadFromFile(asPathSym);
      NewTImage[XX]-&gt;OnMouseDown  = NewTImageMouseDown;
      NewTImage[XX]-&gt;OnMouseMove  = NewTImageMouseMove;
      NewTImage[XX]-&gt;OnMouseUp    = NewTImageMouseUp;
      NewTImage[XX]-&gt;Parent       = this;
      NewTImage[XX]-&gt;Show();
      //
      }   //  iTBitmap=0; iTBitmap&lt;iSize; iTBitmap++
    //
  //
//
    }
    __finally
    {
    //....      Datenbank schliessen
    if (MyQueryClose()) { return  true; }  //  und zurück mit Fehler
    //
    myFormHaupt-&gt;ProgressBar1-&gt;Position = 0;
    myFormHaupt-&gt;ProgressBar1-&gt;Visible = false;
    //....
    }
    //
  //
//
return  false;    //  und zurück
//
//
    }
//
//---&gt;
  catch (Exception &amp;E)
    {iPE=9000;ZentralErrorList(asR,&quot;&quot;,iPE,101,boE=true,boW,boA);return true;}
//
//---&gt;
    catch (...)
    {iPE=9001;ZentralErrorList(asR,&quot;&quot;,iPE,102,boE=true,boW,boA);return true;}
    //
    //
  //
//
//
}
//---------------------------------------------------------------------------
</code></pre>
<p>gruß Siegfried</p>
<p>[Edit] habe vergessen, Bitmapfile Größe 2.070 k<br />
Gruß Siegfried <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1146742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146742</guid><dc:creator><![CDATA[Beppo]]></dc:creator><pubDate>Fri, 29 Sep 2006 18:55:47 GMT</pubDate></item></channel></rss>