• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

NSStream Bild senden

nambrot

Gala
Registriert
31.07.08
Beiträge
49
Hi
ich habe einen NSTReam mit zugehörigen Inpustream.
Aus diesem Inputstream möchte ich nun ein Bild lesen:
Code:
	uint8_t buffer[1024];
	len = [self.mySocket.iStream read:buffer maxLength:sizeof(buffer)];
						if (len > 0)
						{
	[testimage setImage:[UIImage imageWithData:[NSData dataWithBytes:buffer length:len]]];	
						}

Mein Problem ist dass aufgrund des Buffers das Bild in 1024er Häppchen kommt.
Wie kann ich das Bild vollständig erfassen?
 
jo die idee is gut.
Letzendlich habe ich es mit NSMutableData geschafft.
Ich habe aber imme rnoch ein Problem.
Ich muss hinterher ne "message end" nachricht schicken.
Dann soll das Bild zusammengesett werden.
so hier:
Code:
output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
							theData = [[NSData alloc] initWithBytes:buffer length:len];
 
							if([output isEqualToString:@"end\n"]){
					[testimage setImage:[UIImage imageWithData:imageData]];
else{
								[imageData appendData:theData];
}
leider wird dieses "end" warscheinlich mit im stream vom Bild landen, und kann deshalb nicht erkannt werden.
Weiß jemand wie ich das überwinden kann?
 
Wieder: Dann wirst Du den Stream wohl entsprechend überwachen müssen und kucken, ob das "message end" da drin ist ;)

Alex
 
hallo,
das picturesharing und picturesharingbrowser example in $DEV_TOOLS/Examples/Foundation koennte dich da etwas weiter bringen.

beste gruesse,
.gert
 
hi
ich hab es jetzt endlich geschafft.
Ich hab den stream einfach durchlaufen lassen, ne entsprechende message gesendet und dafür die endmessage bekommen.
Ein klitzekleines Problem bleibt aber noch:
mein imageData NSMutableData object wird ja immer neugeschrieben, aber immer Object Allocator sehe ich, dass er immer wieder neu Speicher bsetzt.
ach 10 images, wird der speicher dann voll und meine App schmiert ab.
Wie kann ich das Object wiederverweden, damit kein Speicher verschwendet wird.
[image setImage:imageData];
[imageData release];
[imageData = [nSmutableData alloc];

Ist diese Methode falsch?
 
[image setImage:imageData];
[imageData release];
[imageData = [nSmutableData alloc];

Ist diese Methode falsch?
Du musst imageData auch initialisieren:
Code:
imageData = [[NSMutableData alloc] init];
Alternativ könntest Du auch, statt das alte Objekt zu releasen und ein neues zu erzeugen, das bestehende Objekt wieder verwenden:
Code:
[imageData setLength:0];
MacApple
 
Die Frage ist: Passiert das in einem "tight Loop", also wird zwischendurch nicht wieder an den Main Run Loop abgegeben?

Dann solltest Du einen lokalen AutoreleasePool anlegen.

Alex
 
Also das passiert am ende eines Streamevents.
Also nach dem Streamevent, wird das Bild gesetzt und soll halt das Data object gelöscht werden, damit es halt für das nächste Streamevent wieder genutzt werden kann.
Soll ich dann einen autorelease pool anlegen und jedesmal das imageData object autoreleaseN?