Autor | Thema: Bitmap Palette | | 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#
|
| | 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
|
| | 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
|
| | 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
|
| | 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
|
|
|