Jpeg in Memo öffnen



  • ich will den Code eines Jpegbildes in einer TMemo öffnen, aber er zeigt mir nur die ersten 4 Zeichen an. Die anderen werden nicht angezeigt, woran liegt das?



  • Weil das 4.Zeichen in der Datei eine 0x00 ist. Das Einlesen einer Textdatei endet in der Regel immer beim Auftreten eines 0x00 Zeichens. Aber was willst Du mit einer JPEG Datei im Memo ? Es werden doch eh nur "wirre" Zeichen dargestellt.



  • ich habe im Forum gelesen, wie einer die Dateiinfomationen wie Autor und so auslesen will, dass hat mich auch irgendwie angeregt mal bischen zu experimentieren, aber ich kann die datein noch nicht einmal einlesen um sie dann zu bearbeiten. was muß ich machen damit ich alles einlesen kann. Im TRichEdit habe ich es auch schon versucht, aber der schreibt mehr zeichen aber diese Zeichen stimmen nicht mit denen aus dem Windows-Editor überein.
    Heljt mir Bitte



  • Öffne die Datei mit fopen() und "rt" im zweiten Parameter.



  • aber wenn ich sage: Memo1->Lines->text = in oder Memo1->Lines->LoadFromstream(in) sagt er *FILE kann nicht in *AnsiString umgewandelt werden
    was muß ich hier machen?



  • Versuchs mal mit nem TRichEdit. Allerdings wird da eine Null (0x00) nicht als Character angzeigt. Zum Anzeigen von binären Dateien würde ich mir lieber einen "Hexbrowser" proggen 😉





  • Hatte gerade ein wenig Muse und hab einfach mal so einem kleinen Hexbrowser gebastelt 🕶
    Für alle die es interessiert, hier der Code:

    #define BYTES_PER_LINE 16
    void TForm1::BrowseHex(TStrings *Strings, AnsiString FileName)
    {
    	int chrcnt, x;
    	unsigned char c;
    	char *inp, *hexp, *chrp;
    	char inbuf[BYTES_PER_LINE];
    	char hexbuf[(BYTES_PER_LINE * 3) + BYTES_PER_LINE + 1];
    	TFileStream *InpStream=new TFileStream(FileName, fmOpenRead);
    	TStringList *TempList=new TStringList;
    
    	*(hexbuf + (BYTES_PER_LINE * 3) + BYTES_PER_LINE)=0;
    
    	do
    	{	memset(hexbuf, ' ', (BYTES_PER_LINE * 3) + BYTES_PER_LINE);
    		chrcnt=InpStream->Read(inbuf, BYTES_PER_LINE);
    		inp=inbuf;
    		hexp=hexbuf;
    		chrp=hexbuf + (BYTES_PER_LINE * 3);
    		for(x=0; x<chrcnt; x++)
    		{	sprintf(hexp ,"%02X", (c=*inp));
    			*(hexp+2)=' ';
    			if(c<32)
    				*chrp='.';
    			else
    				*chrp=c;
    			inp++;
    			hexp+=3;
    			chrp++;
    		}
    		TempList->Add(hexbuf);
    	} while(chrcnt==BYTES_PER_LINE);
    
    	Strings->Assign(TempList);
    
    	delete TempList;
    	delete InpStream;
    }
    

    Aufgerufen wird die Routine z.B. so (die Intitialisierung des TMemo ist natürlich optional):

    Memo1->Font->Name="Courier New";
    Memo1->Font->Size=8;
    Memo1->Width=500;
    Memo1->ScrollBars=ssVertical;
    Memo1->WordWrap=false;
    Memo1->ReadOnly=true;
    
    BrowseHex(Memo1->Lines, "c:\\Bilder\\DAUM2.JPG");
    

    Diesmal kommen keine unliebsamen Pointerzugriffe in einen AnsiString vor :D:D
    Ach ja, keine Garantie auf Fehlerfreiheit 😉



  • He Danke
    feiner Zug von dir mir diesen Code zu posen.
    ich Danke dir, hast mir sehr geholfen.



  • Wobei ich Dir dringend empfehle den Code auch mal zu studieren um zu verstehen, wie er funktioniert. Nicht nur Copy/Paste 😉


Anmelden zum Antworten