AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 18bit Bilder erstellen??
Thema durchsuchen
Ansicht
Themen-Optionen

18bit Bilder erstellen??

Offene Frage von "Simon6785"
Ein Thema von Simon6785 · begonnen am 15. Nov 2005 · letzter Beitrag vom 7. Dez 2005
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
NicoDE
(Gast)

n/a Beiträge
 
#31

Re: 18bit Bilder erstellen??

  Alt 17. Nov 2005, 11:40
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:
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]
Bitmap 24-Bit:
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]
  Mit Zitat antworten Zitat
Simon6785

Registriert seit: 14. Nov 2005
Ort: Lippetal
37 Beiträge
 
Delphi 2005 Architect
 
#32

Re: 18bit Bilder erstellen??

  Alt 17. Nov 2005, 12:06
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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#33

Re: 18bit Bilder erstellen??

  Alt 17. Nov 2005, 21:45
Zitat von Simon6785:
der pointer bei der Bmp24ToBmp18 function, wir der nur zum freemem gebraucht?
Ja, sicherlich da ich in der Funktion mittels GetMem den speicher reserviere.

Zitat von Simon6785:
Und: In wieweit wird denn da zeigerverkettet gearbeitet, dieses ^ ist doch das zeichen für ein zeiger, oder?
Du meinst sicherlich das Inc(PByte(pCur), 3). Was bedeutet das ich den Zeiger von pCur auf das nächste Pixelchen setze.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#34

Re: 18bit Bilder erstellen??

  Alt 17. Nov 2005, 21:50
Zitat von NicoDE:
Samsung '18-Bit' (frech von neolithos kopiert ):
Gut das da der Smilie ist! Aber hätte man das auch irgentwo auch finden können, hab bald ne 3/4h mit suchen verbracht.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Simon6785

Registriert seit: 14. Nov 2005
Ort: Lippetal
37 Beiträge
 
Delphi 2005 Architect
 
#35

Re: 18bit Bilder erstellen??

  Alt 17. Nov 2005, 21:56
ich krichts nicht hin

tut mir ja echt leid, aber ich schaffs nicht. also, du rufst so die function auf

Delphi-Quellcode:
stmData := TMemoryStream.Create;
  stmData.LoadFromFile('pwroff04.ani');

  bmp := Bmp18ToBmp24(stmData.Memory^, 176, 220);
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??

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?
  Mit Zitat antworten Zitat
Simon6785

Registriert seit: 14. Nov 2005
Ort: Lippetal
37 Beiträge
 
Delphi 2005 Architect
 
#36

Re: 18bit Bilder erstellen??

  Alt 18. Nov 2005, 08:52
Also ich habe mir diese Function gebaut um ein BIld aus der Firmware zu holen:

Delphi-Quellcode:
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;
und hier meine Bildtauschen function... Nur leider auch hier kein ergebniss... ICh komme einfach mit deinen functions nicht klar

Delphi-Quellcode:
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;
nur leider geht da garnichts!
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#37

Re: 18bit Bilder erstellen??

  Alt 18. Nov 2005, 09:20
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 von Simon6785:
Also ich habe mir diese Function gebaut um ein BIld aus der Firmware zu holen:
Delphi-Quellcode:
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;
muss zu (oh, du solltest die Datei zum Schreiben öffnen, nicht zum lesen)

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); // 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;
Gruß Der Unwissende
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#38

Re: 18bit Bilder erstellen??

  Alt 18. Nov 2005, 09:32
Bitte ergänzen bzw. änderen.
Delphi-Quellcode:
//
// 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;
var -> const getauscht, schreib ja eh nicht in die daten

Delphi-Quellcode:
//
// 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;
var -> out, da ich nur etwas zurückgebe

Fix:

  Result := 0; Füge mal bitte diese Zeile ein nach dem Begin von Bmp24ToBmp18. Das sollte lästige Warnungen vermeiden.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Simon6785

Registriert seit: 14. Nov 2005
Ort: Lippetal
37 Beiträge
 
Delphi 2005 Architect
 
#39

Re: 18bit Bilder erstellen??

  Alt 18. Nov 2005, 09:35
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

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?
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#40

Re: 18bit Bilder erstellen??

  Alt 18. Nov 2005, 09:37
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;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz