1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

NSStream Bild senden

Dieses Thema im Forum "OS X-Developer" wurde erstellt von nambrot, 05.11.08.

  1. nambrot

    nambrot Gala

    Dabei seit:
    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?
     
  2. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Die Daten sammeln

    Alex
     
  3. nambrot

    nambrot Gala

    Dabei seit:
    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?
     
  4. below

    below Kalterer Böhmer

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

    Alex
     
  5. gert

    gert Macoun

    Dabei seit:
    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
     
  6. nambrot

    nambrot Gala

    Dabei seit:
    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?
     
  7. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    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
     
  8. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    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
     
  9. nambrot

    nambrot Gala

    Dabei seit:
    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?
     

Diese Seite empfehlen