Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPEG mit Kompression "auf die harte Tour" (https://www.delphipraxis.net/86103-jpeg-mit-kompression-auf-die-harte-tour.html)

hirnstroem 9. Feb 2007 06:49


JPEG mit Kompression "auf die harte Tour"
 
'loha Folks,

ich wollte mich erkundigen, wie man irgendwelche Daten zu einem JPEG Bild zusammenfügen kann. Ich bekomme bisher von einem Gerät Bitmaps, welche Pixel für Pixel dargestellt werden, das Ziel ist aber, auf dem Gerät welches das Bild aufnimmt, die Daten bereits in ein komprimiertes JPEG zu wandeln um weniger Daten übertragen zu müssen.

Die folgenden Informationen (Header) bekomme ich vom Gerät:

Code:
  // return header
AnswerData[0]=TRANSFER_DATA+1; // 1: Running number for order of packages
AnswerData[1]=0x03;            // 2: image is sent over CAN
AnswerData[2]=0b00000001;      // 3: Image is not compressed and has 50% x 50% resolution
AnswerData[3]=0x00;            // 4: compression parameters
AnswerData[4]=0x00;            // 5: Image width: 176 = 0xB0
AnswerData[5]=4;               // 6: Image width: 176 = 0xB0
AnswerData[6]=0x00;            // 7: Image height: 144 = 0x90
AddCheckSumToAnswerData(AnswerData);
ECANSendMessage(Identifier,AnswerData,8,ECAN_TX_XTD_FRAME);

AnswerData[0]=TRANSFER_DATA+2; // 7: Running number for order of packages
AnswerData[1]=8;                 // 8: Image height: 144 = 0x90
AnswerData[2]=0x00;            // 9: number of pixels
AnswerData[3]=0x00;            // 10:number of pixels
AnswerData[4]=0x00;            // 11:number of pixels
AnswerData[5]=32;              // 12:number of pixels: totaL 0x6300 = 25344    (35=0x23)
AnswerData[6]=ErrorCode;       // 14: error code
ECANSendMessage(Identifier,AnswerData,8,ECAN_TX_XTD_FRAME);
AddCheckSumToAnswerData(AnswerData);
Beim Bitmap sieht die Sache genau gleich aus, nur dass dort klar ist, dass jedes ankommende Byte ein Pixel dargestellt hat. Wie ich nun ein bereits komprimiertes JPEG Bild darstelle ist mir unklar. Klar ist, dass ich pro ankommendem Paket jeweils 8 Byte an daten erhalte.

Da ich etwas unter Zeitdruck stehe, kann ich nicht allzuviel Zeit investieren um herauszufinden wie man macht was ich will.

Grüsse
hirnstroem

Klaus01 9. Feb 2007 07:38

Re: JPEG mit Kompression "auf die harte Tour"
 
Guten Morgen,

wenn ich das richtig verstanden habe, brauchst Du doch nur ein BMP Format in ein jpg Format wandeln.
Das würde in etwas so gehen.

{
Usage:
Delphi-Quellcode:
BMPtoJPG('mybitmap.bmp','myjpeg.jpg')
}

function BMPtoJPG(var BMPpic, JPGpic: string):boolean;
var Bitmap: TBitmap;
    JpegImg: TJpegImage;
begin
  Result:=False;
  Bitmap := TBitmap.Create;
  try
   Bitmap.LoadFromFile(BMPpic) ;
   JpegImg := TJpegImage.Create;
   try
    JpegImg.Assign(Bitmap) ;
    JpegImg.SaveToFile(JPGpic) ;
    Result:=True;
   finally
    JpegImg.Free
   end;
  finally
   Bitmap.Free
  end;
end;
Der Code ist von hier: http://delphi.about.com/cs/adptips20...ltip0301_3.htm

Hoffe liege nicht so ganz daneben.

Grüße
Klaus

hirnstroem 9. Feb 2007 07:53

Re: JPEG mit Kompression "auf die harte Tour"
 
Hallo Klaus,

nein leider nicht. Die Daten, welche Empfangen werden, stellen Bruchstücke eines JPEG Bildes dar. Das Gerät kann also Bitmaps versenden und auch komprimierte JPEGs. Die Bitmapgeschichte habe ich im Griff, aber wie ich Bilddaten, welche zu einem JPEG gehören zu einem JPEG Bild zusammenfüge ist mir ein Rätsel.

Ich habe also bereits alle Daten empfangen, das ist noch unproblematisch. Nun sind diese Daten (jeweils 8 Byte grosse Pakete) in einem Buffer verfügbar. Die Pakete werden dann noch "sortiert", sprich die Bilddaten aus den einzelnen Paketen werden der Reihe nach zusammengefügt.

Ich habe nun also Bilddaten eines komprimierten JPEGs vor mir sowie den Header bereits ausgewertet. Nun möchte ich das JPEG zusammensetzen und davon habe ich keine Ahnung.

Klaus01 9. Feb 2007 08:16

Re: JPEG mit Kompression "auf die harte Tour"
 
Da habe ich dann noch eine Verständnisfrage:

Auf dem Gerät welches die Bilddaten überträgt liegt das Bild als jpg vor.
Es wird nun Stückchen für Stückchen (jeweils 8 Byte) übertragen.

Warum ist es dann nicht möglich diese Stückchen wieder zusammenzusetzten?
Das ist doch nicht mehr als eine binäre Übertragung, also würde
ich annehmen ,daß in diesen Daten auch der jpg header (also das gesamte jpg Image)
übertragen wird.

Infos zum jpg Format findest Du hier.

Grüße
Klaus

hirnstroem 9. Feb 2007 13:18

Re: JPEG mit Kompression "auf die harte Tour"
 
Ich verstehe auch noch nicht ganz. Werde jetzt zuerst schauen, dass das Gerät mir das Bild als JPEG liefert (funktioniert noch nicht wirklich) und mich danach wieder zu Worte melden (aber nicht mehr heute -.-). Wahrscheinlich werde ich die Daten wirklich einfach aneinanderreihen müssen und als JPEG abspeichern und das Bild wird dargestellt.

Grüsse
hirnstroem


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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