![]() |
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:
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.
// 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); Da ich etwas unter Zeitdruck stehe, kann ich nicht allzuviel Zeit investieren um herauszufinden wie man macht was ich will. Grüsse hirnstroem |
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:
Der Code ist von hier:
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; ![]() Hoffe liege nicht so ganz daneben. Grüße Klaus |
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. |
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 ![]() Grüße Klaus |
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 18:16 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