Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249269 (10705)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Bitmap Palette
Marc-Gordon Kröhn
| Datum:01.01.02 10:03 (Marc-Gordon@Web.de) |
Hallo Profaner, und ? Schön in das neue Jahr hinein gerutscht ??? Wie dem auch sei… Gibt es eine Möglichkeit unter Profan die Palette, damit meine ich alle Farbwert eines Bitmaps herauszufinden und z.B. als Farbwert oder RGB Wert in eine Listbox etc…, oder muss ich Mühselig jeden einzelnen Bildpunkt mit @GetPixel(BmpX%,BmpY%) herauspicken ??? Ich dachte da an etwas wie die Größe eines Bitmaps herauszufinden: Dim size#,8 FileMode 0 Assign #1,bmpfile$ OpenRW #1 Seek #1,18 BlockRead(#1,size#,0,8) Close #1 Let BitmapX%=Long(size#,0) Let BitmapY%=Long(size#,4) Dispose size#
Jörg Sellmeyer
| Datum:01.01.02 12:21 (joerse@gmx.de) |
Hallo, Bei den einzelnen Farbwerten kann ich Dir nicht helfen, aber für die Größe und die Farbanzahl bietet Profan schon etwas: %BmpX - %BmpY - &BmpCol Schönes Neues Jahr Jörg
Uwe ''Pascal'' Niemeier
| Datum:01.01.02 23:17 (Pascalxd@owl-online.de) |
Hallo Marc-Gordon! Das klappt natürlich nur da, wo auch eine Palette vorhanden ist, also bis max. 256 Farben! Der Aufbau einer BMP-Datei sieht in dem Fall so aus: ************************************************************ BITMAPFILEHEADER (14 Bytes) BITMAPINFOHEADER (Länge abhängig von Version) RGBQUAD-Array (4 Bytes pro Farbe, letztes Byte unbenutzt) Bilddaten (Pixel) Byte 28 : Anzahl der verwendeten Bits pro Farbe Anzahl der Farben: Zwei potenziert mit Farbtiefe in Bits Byte 14 : Länge von BITMAPINFOHEADER Beginn des RGBQUAD-Arrays: Länge von BITMAPFILEHEADER + Länge von BITMAPINFOHEADER Aufbau RGBQUAD-Member: Blue,Green,Red,Reserved ************************************************************ Hier noch ein praktisches Beispiel (aber ohne Sicherheitskontrolle, ob die Farbtiefe passt!!):
    window 50,50-600,300
    declare Size&,Offset&,bmp#,Colors&,RGB&

    assign #1,"X:\Experimente 7.0\Pic Extra 2\Test1.bmp"'--Pfad anpassen!
    openrw #1
    Size&=getfilesize(#1)
    dim bmp#,Size&
    blockread(#1,bmp#,0,Size&)
    closerw #1

    Colors&=2^long(bmp#,28)'---Anzahl Farben=2^Farbtiefe in Bits
    Offset&=long(bmp#,14)+14'--Beginn des ColorTables (RGBQUAD-Array)

    whileloop 0,(Colors&-1)'------------Startwert bei LOOP klappt schon ab Profan 7.0!
      RGB&=long(bmp#,Offset&+&loop*4)'-RGBQUAD auslesen
      RGB&=RGB& & $00FFFF00'-----------nur Rot und Grün übernehmen (Reihenfolge QRGB)
      long bmp#,Offset&+&loop*4=RGB&'--zurückschreiben
    endwhile

    assign #1,"X:\Experimente 7.0\Pic Extra 2\Test2.bmp"'--Pfad anpassen!
    openrw #1
    blockwrite #1,bmp#,0,Size&
    closerw #1

    dispose bmp#
HTH Pascal
Marc-Gordon Kröhn
| Datum:02.01.02 02:57 (Marc-Gordon@Web.de) |
OK, soweit verstanden. Und jetzt für GANZ Dumme wie mich: RGB&=RGB& & $00FFFF00'-----------nur Rot und Grün übernehmen Dann wäre nur Rot RGB& & $00FF0000 Blau RGB& & $000000FF u.s.w... Aber wie bekomme ich diese Werte in "normale" RGB-Werte ala Profan - @RGB() ??? 4Byte-Werte -> Integer ??? Gruss Marc-Gordon
Marc-Gordon Kröhn
| Datum: 02.01.02 13:37 (Marc-Gordon@Web.de) |
OK, diese "Dumme" Frage hätte ich mir sparen können. Habe nur ein kleinen Fehler gemacht. Habe die Werte jetzt. Trotzdem ersteinmal - Danke

| Zurück zur Übersicht