![]() |
Re: 18bit Bilder erstellen??
Im Prizip ist dein '18-Bit'-Bild ein '24-Bit'-Bild bei dem nur 18-Bit für die Farbwerte benutzt werden (und in ungewöhnlicher Anordnung gespeichert werden). Es geht eigentlich nur darum die Pixel zwischen den beiden Formaten zu konvertieren:
Samsung '18-Bit' (frech von neolithos kopiert ;)):
Code:
Bitmap 24-Bit:
P-Bit: [color=grey]2222 1111 1111 1100 0000 0000[/color]
P-Bit: [color=grey]3210 9876 5432 1098 7654 3210[/color] Color: [color=blue]bb[/color]aa aaaa [color=green]gggg[/color] [color=blue]bbbb[/color] [color=red]rrrr rr[/color][color=green]gg[/color] C-Bit: [color=grey]32?? ???? 5432 7654 7654 3276[/color]
Code:
P-Bit: [color=grey]2222 1111 1111 1100 0000 0000[/color]
P-Bit: [color=grey]3210 9876 5432 1098 7654 3210[/color] Color: [color=red]rrrr rrrr[/color] [color=green]gggg gggg[/color] [color=blue]bbbb bbbb[/color] C-Bit: [color=grey]7654 3210 7654 3210 7654 3210[/color] |
Re: 18bit Bilder erstellen??
ja, das bringt mich im verständniss schon weiter...
ja, samsung macht das extra um es moddern zu schwer wie möglich zu machen. deshalb machen die solche Formate |
Re: 18bit Bilder erstellen??
Zitat:
Zitat:
|
Re: 18bit Bilder erstellen??
Zitat:
|
Re: 18bit Bilder erstellen??
ich krichts nicht hin :cry:
tut mir ja echt leid, aber ich schaffs nicht. also, du rufst so die function auf
Delphi-Quellcode:
jetzt hab ich aber das 18bit bild nicht in nem filestream sondern in nem bytearray! Was kann ich ja vlt noch in integer kriegen mit ner schleife, aber wie gehts dann weiter??
stmData := TMemoryStream.Create;
stmData.LoadFromFile('pwroff04.ani'); bmp := Bmp18ToBmp24(stmData.Memory^, 176, 220); du arbeitest da doch irgendwie mit zeigern oder so, n var davor, die werte gehen nach funktionsaufruf wieder in den zeiger zurück etc, ich bin da gerad etwas überfordert. ich möchte der function einfach n integer geben mit den ganzen bytes und er gibt mir n bitmap zurück, oder tut er das schon?!?! ich komme überhaupt nicht klar mit den ganzen zeigern etc gerade. bei der 24in18 procedure ist der rückgabewert doch cardinal. cardinal kann aber doch niemals das ganze 18bit bild enthalten, dafür ist er doch viel zu klein?!!? Was an dem ganzern kapier ich gerad nicht? |
Re: 18bit Bilder erstellen??
Also ich habe mir diese Function gebaut um ein BIld aus der Firmware zu holen:
Delphi-Quellcode:
und hier meine Bildtauschen function... Nur leider auch hier kein ergebniss... ICh komme einfach mit deinen functions nicht klar
function TForm1.bmpausfirmware(offset,groesse:integer):TBitmap;
VAR i:integer; buf: array of byte; ergebniss:string; begin cla := TFileStream.Create(pfad, fmOpenread); cla.Position:=offset; SetLength(buf, groesse); cla.Read(buf[0], groesse); ergebniss:=''; for i:=0 to groesse do ergebniss:=ergebniss + inttostr(buf[0]); i:=strtoint(ergebniss); result:=Bmp18ToBmp24(i,176,220); end;
Delphi-Quellcode:
nur leider geht da garnichts!
procedure TForm1.bildtauschen(offset:integer;groese:integer);
VAR bild:integer; p : Pointer; begin bild:=Bmp24ToBmp18(image2.picture.bitmap,p); cla := TFileStream.Create(pfad, fmOpenread); cla.Position:=offset; cla.write(bild,groese); FreeAndNil(cla); FreeMem(p); end; |
Re: 18bit Bilder erstellen??
Hi,
ich glaub du hast die Bmp24ToBmp18-Funktion noch nicht richtig verstanden. Du übergibst der Methode eine 24-Bit Bitmap und einen Pointer (der dann auf dein erzeugtes ByteArray zeigt) und da es nur ein Pointer ist, weißt du nicht wie groß die zurückgegebene Struktur ist. (Ok, liegt er daran dass sie mit GetMem oder so angelegt wird). Jedenfalls ist dein Rückgabewert die Größe dessen, was du bekommst. Zitat:
Delphi-Quellcode:
Gruß Der Unwissende
procedure TForm1.bildtauschen(offset : Integer);
VAR length : integer; p : Pointer; begin length := Bmp24ToBmp18(image2.picture.bitmap,p); cla := TFileStream.Create(pfad, fmOpenWrite or fmShareExclusive); cla.Position := offset; cla.write(p, length); // hier bin ich mir nicht ganz sicher ob das so funktioniert // Alternativ // cla.write(TByteArray(p)[0], length); // mit TByteArray = Array of Byte FreeAndNil(cla); FreeMem(p); end; |
Re: 18bit Bilder erstellen??
Bitte ergänzen bzw. änderen.
Delphi-Quellcode:
var -> const getauscht, schreib ja eh nicht in die daten
//
// Wandelt das 18 Bit Bild in ein 24 Bit Bild um. // // data - Daten des 18 bit Bildes // iWidth - Breite des Bildes // iHeight - Höhe des Bildes // Result - Ein neu erzeugtes TBitmap-Object mit den 24 Bit Bild // function Bmp18ToBmp24(const data; iWidth, iHeight: Integer): TBitmap;
Delphi-Quellcode:
var -> out, da ich nur etwas zurückgebe
//
// Wandelt ein 24 Bit Bild in ein 18 Bit Bild um. // // bmp - Bitmap, welches umgewandelt wird. Diese Bild wird nicht geändert // sondern intern in ein neues Bitmap kopiert. // pDest - Rückgabe des via GetMem erzeugten Speicherbereiches der die Daten // des 18 Bit Bitmaps enthält. // Result - Größe des zurückgegebenen Speicherbereiches // function Bmp24ToBmp18(bmp : TBitmap; out pDest : Pointer) : Cardinal; Fix:
Delphi-Quellcode:
Füge mal bitte diese Zeile ein nach dem Begin von Bmp24ToBmp18. Das sollte lästige Warnungen vermeiden.
Result := 0;
|
Re: 18bit Bilder erstellen??
ahja, es wird mir immer klarer!!
Ich hab mich schon die ganze zeit gefragt wofür der Zeiger ist und wie so ein ganzes Bild in eine Cardinal variable passen soll :wink: Ja, das sollte Funktionieren!! Und was ist mit der Bildausfirmware? Eigentlich doch völlig korrekt, oder sehe ich das falsch? Funzt aber nicht Ach, noch eins, du schreibst const data; von welchem datentyp ist denn data? Integer? |
Re: 18bit Bilder erstellen??
Fast richtig:
Delphi-Quellcode:
procedure TForm1.bildtauschen(offset : Integer);
VAR length : integer; p : Pointer; begin length := Bmp24ToBmp18(image2.picture.bitmap, p); cla := TFileStream.Create(pfad, fmOpenWrite or fmShareExclusive); cla.Position := offset; cla.write(p^, length); FreeAndNil(cla); FreeMem(p); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz