laden von Bitmap optimieren



  • Hallo,
    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.
    Frage: Besteht die Möglichkeit, dies zu beschleunigen ? Bin immer offen.

    //  ***************************************************************  //
      //    ***************************************************************    //
    //      ***************************************************************      //
    //--->>>          Gleisbild zum Bearbeiten anzeigen                    <<<---//
    //      ***************************************************************      //
      //    ***************************************************************    //
        //  ***************************************************************  //
    
    bool TmyFormNewGleisbild::LoadEditGleisbild(AnsiString asFileName,
         bool &boE,bool &boW,bool &boA)
    //
    //    erstellt am: 15. August 2006    geändert am: 29. September 2006
    //
    {
    //
    AnsiString asR = FNGB+"LoadEditGleisbild";
    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->ProgressBar1->Visible = true;
        myFormHaupt->ProgressBar1->Position = 0;
        //
      //
    //--->          Gleisbild Datenbank öffnen
      //
        //
        if (MyQueryOpen(2,asR,
                        asFileName,asPwUserDb_2,
                        "Str_1",asMyDatenbank,
                        "Str_4",asModellbahnGleisbild,
                        "","",
                        iRegCount))
          {
          return  true;    //  und zurück mit Fehler
          }
        //
        asAktivesGleisbild = asFileName;
        //
      //
    //--->          Name Gleisbild
      //
        //
        asBuffer = asFileName;
        iPos      = asBuffer.LastDelimiter(".");
        asBuffer  = LeftStr(asBuffer, iPos - 1);
        asMyCaptionTop = "  [ MBCC ]  Gleisbild  - - >  " + asBuffer + "  < - -";
        FrameKopfLabel1->Label1->Caption = asMyCaptionTop;
        //
      //
    //--->          dynamisch erstelle Bitmap's löschen
      //
        //
        iSize = NewTImage.Length;
        for (int i=0; i<iSize; i++) {delete NewTImage[i];} NewTImage.Length = 0;
        //
        iSize = vasNewTBitmap.size();
        for (int i=0; i<iSize; i++) {vasNewTBitmap[i].clear();} vasNewTBitmap.clear();
        //
        iSize = viNewTBitmap.size();
        for (int i=0; i<iSize; i++) {viNewTBitmap[i].clear();} viNewTBitmap.clear();
        //
      //
    //--->          leere Datenbank ?
      //
        //
        if (iRegCount <= 1)
          {
          iSatzanzahl = 0;
          return  false;    //  und zurück
          }
        //
      //
    //--->          wieviele aktive Datensätze existieren ?
      //
        //
        DM->PQuery->FindFirst();
        iSatz = 0;
        //
        myFormHaupt->ProgressBar1->Max = iRegCount;
        //
        for (int i=0; i<iRegCount; i++)
          {   //  i=0; i<iRegCount; i++
            //
            if (asAktiv == DM->PQuery->Fields->FieldByName("Str_22")->AsString)
              {   //  asAktiv == DM->PQuery->Fields->FieldByName("Str_22")->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->PQuery->Fields->FieldByName("ID")->AsInteger;
              viNewTBitmap[iSatz][1] = DM->PQuery->Fields->FieldByName("Int_2")->AsInteger;
              viNewTBitmap[iSatz][2] = DM->PQuery->Fields->FieldByName("Int_3")->AsInteger;
              viNewTBitmap[iSatz][3] = DM->PQuery->Fields->FieldByName("Int_4")->AsInteger;
              viNewTBitmap[iSatz][4] = DM->PQuery->Fields->FieldByName("Int_5")->AsInteger;
              //
              vasNewTBitmap[iSatz][0] = DM->PQuery->Fields->FieldByName("Str_21")->AsString;
              vasNewTBitmap[iSatz][1] = DM->PQuery->Fields->FieldByName("Str_22")->AsString;
              vasNewTBitmap[iSatz][2] = DM->PQuery->Fields->FieldByName("Str_23")->AsString;
              vasNewTBitmap[iSatz][3] = DM->PQuery->Fields->FieldByName("Str_24")->AsString;
              vasNewTBitmap[iSatz][4] = DM->PQuery->Fields->FieldByName("Str_25")->AsString;
              //
              myFormHaupt->ProgressBar1->Position += 1;
              iSatz ++;
              }   //  asAktiv == DM->PQuery->Fields->FieldByName("Str_22")->AsString
            //
          DM->PQuery->FindNext();
          }   //  i=0; i<iRegCount; i++
        //
      //
    //--->          n Bitmap's dynamisch erstellen
      //
        //
        iSize = vasNewTBitmap.size();
        //
        for (int iTBitmap=0; iTBitmap<iSize; iTBitmap++)
          {   //  iTBitmap=0; iTBitmap<iSize; iTBitmap++
          asPathSym = asGleisbildBmpPath + vasNewTBitmap[iTBitmap][0];
    //
    //--->         existier Bmp-File ?
            //
            if (!FileExists(asPathSym))
              {   // !FileExists(asFile)
              ShowMessage("Bitmap-Datei existiert nicht.  " + asPathSym);
              return true;
              }   // !FileExists(asFile)
            //
    //
    //--->         jetzt Bitmap dynamisch erstellen
          XX = NewTImage.Length;
          NewTImage.Length++;
          NewTImage[XX] = new TImage(this);
          NewTImage[XX]->Left     = viNewTBitmap[iTBitmap][1];
          NewTImage[XX]->Top      = viNewTBitmap[iTBitmap][2];
          NewTImage[XX]->Width    = iconBitmapWidth;
          NewTImage[XX]->Height   = iconBitmapHeight;
          NewTImage[XX]->Tag      = XX;
          NewTImage[XX]->Picture->LoadFromFile(asPathSym);
          NewTImage[XX]->OnMouseDown  = NewTImageMouseDown;
          NewTImage[XX]->OnMouseMove  = NewTImageMouseMove;
          NewTImage[XX]->OnMouseUp    = NewTImageMouseUp;
          NewTImage[XX]->Parent       = this;
          NewTImage[XX]->Show();
          //
          }   //  iTBitmap=0; iTBitmap<iSize; iTBitmap++
        //
      //
    //
        }
        __finally
        {
        //....      Datenbank schliessen
        if (MyQueryClose()) { return  true; }  //  und zurück mit Fehler
        //
        myFormHaupt->ProgressBar1->Position = 0;
        myFormHaupt->ProgressBar1->Visible = false;
        //....
        }
        //
      //
    //
    return  false;    //  und zurück
    //
    //
        }
    //
    //--->
      catch (Exception &E)
        {iPE=9000;ZentralErrorList(asR,"",iPE,101,boE=true,boW,boA);return true;}
    //
    //--->
        catch (...)
        {iPE=9001;ZentralErrorList(asR,"",iPE,102,boE=true,boW,boA);return true;}
        //
        //
      //
    //
    //
    }
    //---------------------------------------------------------------------------
    

    gruß Siegfried

    [Edit] habe vergessen, Bitmapfile Größe 2.070 k
    Gruß Siegfried 🙂


Anmelden zum Antworten