Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stream schnell durchsuchen (https://www.delphipraxis.net/81413-stream-schnell-durchsuchen.html)

Hador 27. Nov 2006 08:14

Re: Stream schnell durchsuchen
 
Zitat:

Zitat von flossinger
ich bin mir da nicht sicher, aber vielleicht würd es auch etwas bringen, die Daten gleich in einen stringstream zu lesen und den string zu untersuchen, anschliessend sind die Daten schon im Speicher.

Da es sich aber um Binärdaten handelt (Siehe 1. Post) ist ein StringStream keine gute Idee.

@Mavarik:
Ganz einfach:
Die Streams machen afaik intern nichts anderes, aber man hat im OOP-Sinne eine schöne Klasse, mit der man alles machen kann.
Ferner kann man den Stream dann auch ganz einfach in ein TJPEGImage laden (LoadFromStream)

SirThornberry 27. Nov 2006 08:24

Re: Stream schnell durchsuchen
 
Zitat:

Zitat von Mavarik
Hallo!

Warum versucht hier eigentlich jeder das mit Streams zu lösen?

Ich löse sowas mit Streams weil Delphi für Object-Pascal steht und ich bei Objectorientierter Programmierung eher den Durchblick behalte. Nächster Vorteil: Wenn die Streamklasse geändert wird (für große Dateien etc.) so brauch ich nicht all meine Programme ändern da sie alle die gleiche Klasse verwenden. Bei der Hand zu Fuß-Variante muss ich in all meinen Programmen die neuen Funktionen manuell nachrüsten.

marabu 27. Nov 2006 08:35

Re: Stream schnell durchsuchen
 
Moin,

aus der Sicht eines alten Vogels existieren die I/O-Routinen aus der TP-Zeit schon lange nur noch aus Gründen der Abwärtskompatibilität. Dass sich die modernen Stream-I/O Komponenten endgültig durchsetzen werden ist nur noch eine Frage der Zeit. Der kurze Kampf zwischen dem CP/M orientierten FCB (file control block) und dem UNIX file handle wurde von Microsoft mit Einführung von MS DOS 2.10 bereits für entschieden erklärt. Damals hat man sich entschieden das XENIX I/O-Konzept für MS-DOS zu adaptieren. Heute setzen Streams direkt auf den vereinheitlichten I/O-Routinen des Betriebssystems auf, wärend ein FCB (Assign, Reset, Rewrite, Close) eine unnötige gepufferte Zwischenschicht darstellt, die TP aus seiner CP/M-Zeit mitbrachte. Den OO-Charakter würde ich nicht so strapazieren, da es kein Problem darstellt auch für einen FCB eine OO-Kapsel zu stricken.

Freundliche Grüße vom marabu

negaH 27. Nov 2006 09:16

Re: Stream schnell durchsuchen
 
Du suchst nach $FF $D9 als Marker

1.) bedenkst du auch das JPEGs in Litte Endian wie auch Motorola Big Endian Format gespeichert sein können ? Also $D9 $FF wäre ebenfalls eine gültige Signatur je nachdem welches Format das JPEG benutzt

2.) warum Suchen wenn man aus dem JPEG Format direkt die Position und Typ des Thumbsviews ermitteln kann ? Was du da codest ist eine Brute Force Methode, sehr ineffiziente Vorgehensweise ;)

3.) das nächste mal bitte Suche nutzen -> http://www.delphipraxis.net/internal...+exif&start=20

Gruß Hagen

Hador 27. Nov 2006 09:21

Re: Stream schnell durchsuchen
 
:shock:
Also so langsam habe ich echt das Gefühl, dass keiner meinen Anfangsbeitrag gelesen hat.
Ich suche weder nach einem String (@flossinger) noch möchte ich das Thumb aus einer JPEG-Datei extrahieren (@Hagen).
Ich möchte das Thumbnail aus einem Bild, welches im Canon Rohdatenformat (*.CR2) vorliegt extrahieren.
Dieses - das Thumb - liegt im JPEG-Format vor.
Es beginnt immer beim Offset $2600 und ich muss lediglich das Ende herausfinden.
Dabei ist nicht davon auszugehen, dass das Format der JPEGs unterschiedlich ist.

EDIT:
Ich habe übrigends die Suche genutzt.
Doch leider gibt es zu dem Thema fast nichts in der DP.
Eigentlich wäre es mir bspw. auch lieber das Format direkt zu interpretieren und nicht auf die Thumbs zurückzugreifen, aber das habe ich mittlerweise schon (fast) verworfen.

marabu 27. Nov 2006 11:09

Re: Stream schnell durchsuchen
 
Hallo Lars,

ich kann nicht glauben, dass du nach einem Ende suchen musst. Da es sich bei CR2 um ein TIF-Format handelt, sollte sich doch irgendwo eine Längen-Information finden lassen. Die Start-Info ist ja auch verzeigert. Hast du dich denn schon als Entwickler bei Canon registrieren lassen? Dann hast du Zugriff auf den SDK und ich erwarte da auch ein paar Informationen. Vielleicht nicht zu der proprietären Verschlüsselung, von der ich gelegentlich lese, aber auf alle Fälle zu den Tags.

Grüße vom marabu

negaH 27. Nov 2006 13:38

Re: Stream schnell durchsuchen
 
Zitat:

Also so langsam habe ich echt das Gefühl, dass keiner meinen Anfangsbeitrag gelesen hat.
Tja, dann soltest du auch mal die Antworten richtig lesen ;)

Zitat:

Dieses - das Thumb - liegt im JPEG-Format vor.
Es beginnt immer beim Offset $2600 und ich muss lediglich das Ende herausfinden.
Dabei ist nicht davon auszugehen, dass das Format der JPEGs unterschiedlich ist.
Und das erklärt doch alles:

1.) Erzeuge eine Stream auf deine Datei
2.) Setzte STream.Position := $2600
3.) rufe LoadJüegThumb(Steam) aus meinem Attachment auf

fertig. Nichts mit Suche im Stream oder sowas Brute Force mäßiges. Die Unit in meinem Attachment liest dabei gezielt das JPEG (eg. TIFF -> JIF) Format aus und ermittelt wo und in welcher Größe das Jpeg-Thumb gespeichert wurde.

Am bestens einfach mal ausprobieren und wenn es funktioniert dann wird es weitaus schneller funktionieren als deine Brute Force Methode. Und wenn es funktioniert dann heist dies auch das Du die Antworten nicht richtig liest und Andere sehr wohl deine Frage gelesen haben und auch verstanden haben dir eine Lösung anzubieten. Immerhin willst du etwas und die Anderen schenken dir eine Antwort, kostenlos wohlgemerkt (mann könnte dir ja auch den Stundenlohn in Rehcnung stellen in der dir die Anderen ihre Zeit opfern).

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Seite 2 von 2     12   

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