images für small images schneller erzeugen
-
DeinBitmap::Canvas::Brush::Color auf den gewünschten Farbwert setzen und den Canvas mit FillRect ausmalen?
-
Alexander Sulfrian schrieb:
wenn man die Bilder einmal in der ImageList hat, kann man die ursprünglichen Dateien löschen....
Die Bilder werden al Recource im Programm gespeichert...wie soll das genau funktionieren, dass die Imagelist als ressource im programm gespeichert wird?
mfg mattias
-
Die Bilder werden al Recource im Programm gespeichert
Das funktioniert nur wenn man die Bilder zur Entwurfszeit der ImageList zuweist.
-
Wie weise ich nun einer ImageList zur Compilezeit Bilder zu?

-
mattias schrieb:
zur Compilezeit
Hi,
was meinst du? Ich kann nur zur Entwurfs- oder Laufzeit der ImageList Bilder zuweisen! (zur Entwurfszeit einfach mit Doppelklick auf die ImageList im Formular)MfG
Alexander Sulfrian
-
Mit Add bzw. Insert!? Aber das müsstest du doch eigentlich schon wissen, sonst hätte dein Code oben doch gar nicht funktioniert (bzw. wäere sinnlos)?
Graphics::TBitmap *bmp = new Graphics::TBitmap(); bmp->PixelFormat = pf24bit; bmp->Width = ImageList1->Width; bmp->Height = ImageList1->Height; for (int i = 255; i >= 0; i--) { bmp->Canvas->Brush->Color = (i << 16)|(i << 8)| i; // Graustufe bmp->Canvas->FillRect(bmp->Canvas->ClipRect); ImageList1->Add(bmp, 0); } delete bmp;
-
alles klar, ich glaubte ihr meint die images in einer ressourcen-datei, so wie bei audiofiles, in einer rc-datei abspeichern. mit dem kenn ich mich leider nicht so aus.
-
Dann mach es doch so, wie Jansen vorschlägt....
Seine Fassung benötigt ca. 20 ms die 256 Bitmaps zu erzeugen. Deine Fassung benötigt ca. 1300 ms...
Ich würde nur diese Zeile ändern (um die Warnung 'TColor wird mit int...' zu beseitigen)
[cpp]bmp->Canvas->Brush->Color = (TColor) (i << 16)|(i << 8)| i; // Graustufe[/cpp]
-
Hier hab ich noch ein Problem, wo ich nicht den Fehler finde. Ich erzeuge eben ein 8 bit Bitmap und will nun die Bilder auf der Festplatte speichern vom Dunklen bis zum Hellen.
for(short i = 0 ; i < 256 ; i++) { Graphics::TBitmap *smallImg = new Graphics::TBitmap(); smallImg->Width = 10; smallImg->Height = 14; smallImg->PixelFormat = pf8bit; unsigned char *ptr; int x=0, y=0; ptr = static_cast<BYTE*>(smallImg->ScanLine[y]); for(int j=0; j < (smallImg->Height * smallImg->Width); j++) { if(x == smallImg->Width) { y++; x = 0; ptr = static_cast<BYTE*>(smallImg->ScanLine[y]); } ptr[x]= (BYTE) i; x++; } smallImg->Palette = grayPal; smallImg->SaveToFile("clusterColor_" + IntToStr(i) + ".bmp"); }Die Palette hab ich mit folgendem Code erzeugt:
LOGPALETTE* pal = NULL; try { pal = (LOGPALETTE*) malloc( sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * 256); pal->palVersion = 0x300; pal->palNumEntries = 256; for(short i = 0 ; i < 256 ; i++) { pal->palPalEntry[i].peRed = (Byte)i; pal->palPalEntry[i].peGreen = pal->palPalEntry[i].peRed; pal->palPalEntry[i].peBlue = pal->palPalEntry[i].peRed; } grayPal = CreatePalette(pal); } __finally { delete pal; }
-
Noch einmal der Hinweis: Einfacher und schneller als mit Jansens Beispiel kannst Du es nicht haben...
Probleme mit LOGPALETTE gehören m.E. in das WinAPI-Forum. Ich vermute das Problem aber darin, dass Du peFLAGS nicht verwendest.