• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

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?
 

nambrot

Gala
Registriert
31.07.08
Beiträge
49
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?
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Wieder: Dann wirst Du den Stream wohl entsprechend überwachen müssen und kucken, ob das "message end" da drin ist ;)

Alex
 

gert

Macoun
Registriert
19.08.05
Beiträge
118
hallo,
das picturesharing und picturesharingbrowser example in $DEV_TOOLS/Examples/Foundation koennte dich da etwas weiter bringen.

beste gruesse,
.gert
 

nambrot

Gala
Registriert
31.07.08
Beiträge
49
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?
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
[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
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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
 

nambrot

Gala
Registriert
31.07.08
Beiträge
49
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?