Bild neu schreiben?
Übersicht

maxinetBetreff: Bild neu schreiben? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Liebe Forengemeinde!
Habe ein problem: Code: [AUSKLAPPEN] file=OpenFile("img.bmp") f2=WriteFile("img2.bmp") Repeat sav$=ReadLine$(file) WriteLine f2, sav$ Until Eof(file) sav$=ReadLine$(file) WriteLine f2, sav$ CloseFile file CloseFile f2 Das Bild wird nur mit streifen dargestellt. Woran liegt das, was mache ich falsch? Gruß, maxinet |
||
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nimm ReadByte/WriteByte, und warum schreibst du nach der Loop nochmal ne Zeile, die es eignetlich gar nicht gibt? | ||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
..oder benutze einfach CopyFile() ^^ | ||
aktuelles Projekt: The last day of human being |
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, soll dann aber übers netzwerk gesendet werden.
Gruß maxinet |
||
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, jetzt soll das Bild über das Netzwerk übermittelt werden.
Ich habe das folgendermaßen probiert: Server: Code: [AUSKLAPPEN] tcp=CreateTCPServer(2302)
if tcp=0 then notify "fehler" : end datei=WriteFile("C:\temp\bild.bmp") Repeat con=AcceptTCPStream(tcp) If con Then wdat$=ReadLine$(con) If wdat$="end" Then End WriteLine datei, wdat$ EndIf Forever Client: Code: [AUSKLAPPEN] datei=OpenFile("C:\temp\img.bmp")
tcp=OpenTCPStream("localhost",2302) if tcp=0 then notify "fehler" : end Repeat WriteLine tcp,ReadLine(datei) Until Eof(datei) WriteLine tcp,"end" Das Bild wird aber nicht übertragen. Er legt zwar eine Datei an, die aber immer 0Byte groß ist. Das ursprungsbild beträgt 900KB. Gruß maxinet |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest wie gesagt besser WriteByte und ReadByte benutzen. Readline wartet so lange bis ein Zeilenumbruch empfangen wurde und gibt dann den Text zurück. Ein Bild hat aber keine Zeilenumbrüche (naja wenn man so will schon, falls das ASCII-Zeichen 10 oder 13 vorkommt, aber man kann sich nicht darauf verlassen).
Da mit Writebyte aber jedes Byte einzeln als Paket gesendet wird, wäre es noch besser WriteBytes im Zusammenhang mit einer Bank zu benutzen. |
||
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt schreibt der solange, bis ich den debugger beende. Das Bild ist dann ca. 360MB groß. Das original aber nur 900KB??
Gruß Maxinet |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe dir mal die Lösung mit dem Versenden von größeren Datenpaketen mit Hilfe von Banken gecodet: (musst natürlich noch umschreiben, um es im Netzwerk anzuwenden)
Code: [AUSKLAPPEN] Function CopyFileBytes(file_in$,file_out$,length%=100) bank = CreateBank(length%) fileIn = ReadFile(file_in$) fileOut = WriteFile(file_out$) If fileIn And fileOut Then Repeat l=length-1 For I = 0 To length-1 PokeByte(bank,I,ReadByte(fileIn)) If Eof(fileIn) Then l=I : Exit Next For I = 0 To l WriteByte(fileOut,PeekByte(bank,I)) Next FreeBank bank bank = CreateBank(length%) Until Eof(fileIn) CloseFile fileIn CloseFile fileOut FreeBank bank EndIf End Function Mit dem dritten Parameter gibst du an, wie viele Bytes mit einem Paket versendet werden sollen. Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
lol
irgendwie bin ich zu doof dafüt. Funktioniert nich... Gruß maxinet |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bist du sicher, dass die Dateien existieren, die du angibst? Lass mal
Code: [AUSKLAPPEN] If fileIn And fileOut Then ... EndIf weg und schau mal, ob du einen Fehler erhälst. Bei mir funktioniert die Funktion perfekt. Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie groß darf length% maximal sein?
Maxinet |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist eigentlich egal. Wenn length% größer ist, als das Bild selbst groß ist, wird das ganze Bild in einem Datenpaket versendet. | ||
aktuelles Projekt: The last day of human being |
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Funktionieren tut es ja, aber es ist ein sehr langsames verfahren. Das Screenshot ist ca. 2 einhalb MB groß, was über das netzwerk übertragen wird. Hierfür werden ca. 6-7 minuten benötigt.
Meiner meinung nach viel zu viel, da das netzwerk eine last von 50MB/s übertragen kann. Gruß maxinet |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
verschicke erst die größe und breite....und dann mach readpixelfast...sende den rückgabewert und schreib das ganze dann auf der anderen seite mit writepixelfast.. | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wo genau muss ich das ändern?
maxinet |
||
maxinet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Server:
Code: [AUSKLAPPEN] Global length%=100
Global file_out$="C:\temp\img.bmp" tcp=CreateTCPServer(8002) Repeat fileIn=AcceptTCPStream(tcp) If fileIn Then bank = CreateBank(length%) fileOut = WriteFile(file_out$) If fileIn And fileOut Then Repeat l=length-1 WaitEvent(1) For I = 0 To length-1 out$=ReadByte(fileIn) If out$="end" Then Exit PokeByte(bank,I,out$) Next For I = 0 To l WriteByte(fileOut,PeekByte(bank,I)) Next FreeBank bank bank = CreateBank(length%) Until Eof(fileIn) CloseFile fileOut FreeBank bank Exit EndIf EndIf Forever CloseTCPServer tcp Client: Code: [AUSKLAPPEN] datei_screen=OpenFile("C:\temp\screen.bmp")
tcp_screen=OpenTCPStream("192.168.178.22",8002);ReadString$(daten),8002) If tcp_screen=0 Then MessageBox("","Der Server antwortet nicht!","Error",$40010) : End Repeat inhalt_screen$=ReadByte(datei_screen) WriteByte tcp_screen,inhalt_screen$ Until Eof(datei_screen) WriteLine tcp_screen,"end" CloseTCPStream tcp_screen CloseFile datei_screen Ist viel zu langsam. Die funktion, die oben gepostet wurde ist total schnell. Aber bei mir wird dann übers netzwerk nur 20kb/s. übertragen -> zu langsam. Was mache ich falsch? Maxi |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group