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