iPhone-utv: Hur jobba med UIImage och hantera kamera/bildbibliotek

Tråden skapades och har fått 21 svar. Det senaste inlägget skrevs .
1

Min min dumhet trodde jag att jobba med hårdvaran var enkelt.

Att öppna biblioteket och välja en bild = lätt.
Att forma om den != lätt.

Att vad jag ska göra med den sedan... huvva!

Så lite hjälp skulle inte vara fel.

Ylan? Arc?

  • Medlem
  • Sollentuna
  • 2010-08-17 15:57

Står det inte/finns det inga kodexempel på Apples web för iPhoneutvecklare? När jag har tittat runt så formligen dränks man ju av kodexempel för än det ena API:t eller andra ramverket.

Ursprungligen av frazze:

Står det inte/finns det inga kodexempel på Apples web för iPhoneutvecklare? När jag har tittat runt så formligen dränks man ju av kodexempel för än det ena API:t eller andra ramverket.

Var hittar du dessa exempel? URL tack.

  • Medlem
  • 2010-08-17 19:53
Ursprungligen av Mattias Hedman:

Var hittar du dessa exempel? URL tack.

Du är väl registrerad som "developer" hos Apple?

iPhone Dev Center - Apple Developer

Då hittar du exempelkod under "Sample code"

https://developer.apple.com/iphone/library/navigation/index.html?section=Resource+Types&topic=Sample+Code

  • Medlem
  • Sollentuna
  • 2010-08-19 14:38
Ursprungligen av arc:

Du är väl registrerad som "developer" hos Apple?

iPhone Dev Center - Apple Developer

Då hittar du exempelkod under "Sample code"

https://developer.apple.com/iphone/library/navigation/index.html?section=Resource+Types&topic=Sample+Code

Tack, arc! Barnen gjorde lite priority inversion...

  • Medlem
  • 2010-08-17 17:43
Ursprungligen av Mattias Hedman:

Min min dumhet trodde jag att jobba med hårdvaran var enkelt.

Att öppna biblioteket och välja en bild = lätt.
Att forma om den != lätt.

Att vad jag ska göra med den sedan... huvva!

Så lite hjälp skulle inte vara fel.

Ylan? Arc?

Vad är det exakt du vill göra med bilden som du valt ut från bildbiblioteket?
Du får väl en UIImage tillbaka från UIImagePickerController?

Ursprungligen av arc:

Vad är det exakt du vill göra med bilden som du valt ut från bildbiblioteket?
Du får väl en UIImage tillbaka från UIImagePickerController?

1) Jag vill fånga den och skala ner den så att den passar i min imageView.

2) Jag vill omforma den och spara den i dokumentmappen.

Tanken är att jag ska göra ett xml-dokument som jag kan skicka till en server. Så jag behöver XML-dokumentet samt bilden i lämplig storlek.

  • Medlem
  • 2010-08-17 19:58
Ursprungligen av Mattias Hedman:

1) Jag vill fånga den och skala ner den så att den passar i min imageView.

2) Jag vill omforma den och spara den i dokumentmappen.

Tanken är att jag ska göra ett xml-dokument som jag kan skicka till en server. Så jag behöver XML-dokumentet samt bilden i lämplig storlek.

Du kan hämta ut en CGImageRef från UIImage

UIImage *img ...

CGImageRef imgRef = img.CGImage;

och så kan du skapa en ny UIImage med

+ (UIImage *)imageWithCGImage: (CGImageRef)imageRef scale: (CGFloat)scale orientation: (UIImageOrientation)orientation

som är en klassmetod i UIImage klassen.

Ska du skicka den i ett XML-dokument till en server plockar du ut datat från UIImage-objektet med

NSData *imgData = UIImagePNGRepresentation(img);

Då blir det data i pngformat. Finns även JPEG format tror jag.

NSData får du sedan omforma till något skrivbart (dvs vanliga synliga tecken) med t.ex. Base64 kodning:

How to base64 encode on the iPhone - Stack Overflow

Ursprungligen av arc:

Ska du skicka den i ett XML-dokument till en server plockar du ut datat från UIImage-objektet med

NSData *imgData = UIImagePNGRepresentation(img);

Då blir det data i pngformat. Finns även JPEG format tror jag.

NSData får du sedan omforma till något skrivbart (dvs vanliga synliga tecken) med t.ex. Base64 kodning:

How to base64 encode on the iPhone - Stack Overflow

Att omforma texten/bilderna är ett måste antar jag?
Tänkte om det fanns något enklare, visserligen verkar inte detta vara så himla svårt. Men ändå.

Funderar på att använda detta:
ASIHTTPRequest Documentation - All-Seeing Interactive
och
kissxml - Project Hosting on Google Code

  • Medlem
  • Mölndal
  • 2010-08-17 17:56

Det ser hejdlöst roligt ut med det här typsnittet tycker jag. "Ullmage", är det nån maträtt? Eller kanske en sjukdom hos får?

Gårdagen gick bra så nu formar jag om bilden så den får plats i min imageview, från kameran eller från biblioteket. Nästa steg är hur jag ska spara den, det tror jag att jag har koll på.
Men att spara bilden från telefonen i bildbiblioteket. Nåja till Google-sökningar ska nog lösa det.

Men så nästa fråga då...
När jag har sparat undan text och bild till dokumentmappen så vill jag även skapa en vy som läser in dessa, vad är då det lämpligaste formatet att spara i?
Är det samma format som jag ska använda för att skicka det till en server?

  • Medlem
  • 2010-08-19 13:09
Ursprungligen av Mattias Hedman:

Gårdagen gick bra så nu formar jag om bilden så den får plats i min imageview, från kameran eller från biblioteket. Nästa steg är hur jag ska spara den, det tror jag att jag har koll på.
Men att spara bilden från telefonen i bildbiblioteket. Nåja till Google-sökningar ska nog lösa det.

Men så nästa fråga då...
När jag har sparat undan text och bild till dokumentmappen så vill jag även skapa en vy som läser in dessa, vad är då det lämpligaste formatet att spara i?
Är det samma format som jag ska använda för att skicka det till en server?

Bilden är väl lättast att spara m.h.a.

NSData *UIImagePNGRepresentation(img)

NSData har ju metoder som:

- (BOOL)writeToFile: (NSString *)path atomically: (BOOL)flag

för att skriva datat till fil och för att skapa NSData från fil:

- (id)initWithContentsOfFile: (NSString *)path

Hur texten ska sparas beror väl lite på vad det är för text, innehåll, formatering mm.
Det finns ju metoder i NSString-klassen för att skriva ner innehållet i en NSString till en fil:

+ (id)stringWithContentsOfFile: (NSString *)path encoding: (NSStringEncoding)enc error: (NSError **)error

Och liknande för att läsa upp strängen från fil.

Ursprungligen av arc:

Bilden är väl lättast att spara m.h.a.

NSData *UIImagePNGRepresentation(img)

NSData har ju metoder som:

- (BOOL)writeToFile: (NSString *)path atomically: (BOOL)flag

för att skriva datat till fil och för att skapa NSData från fil:

- (id)initWithContentsOfFile: (NSString *)path

Hur texten ska sparas beror väl lite på vad det är för text, innehåll, formatering mm.
Det finns ju metoder i NSString-klassen för att skriva ner innehållet i en NSString till en fil:

+ (id)stringWithContentsOfFile: (NSString *)path encoding: (NSStringEncoding)enc error: (NSError **)error

Och liknande för att läsa upp strängen från fil.

Det är så jag kan spara en bild.
Om jag har text till bilden också hur gör jag då?

Och rena textvyer sparar jag bäst hur?
Ska jag köra propertylist eller Arkivering?

Ju mer jag tänker på vad slut resultatet ska vara så kanske jag borde välja en SQLLite eller CoreData. För att göra det enklare att både lagra och läsa i den vy där det ska ske.

Vad säger ni?

  • Medlem
  • 2010-08-20 15:03
Ursprungligen av Mattias Hedman:

Det är så jag kan spara en bild.
Om jag har text till bilden också hur gör jag då?

Och rena textvyer sparar jag bäst hur?
Ska jag köra propertylist eller Arkivering?

Ju mer jag tänker på vad slut resultatet ska vara så kanske jag borde välja en SQLLite eller CoreData. För att göra det enklare att både lagra och läsa i den vy där det ska ske.

Vad säger ni?

När det gäller att spara data lokalt i iPhonen så har inte jag någon direkt erfarenhet. Jag lagrar bara temporära filer, resten läggs upp på en central server.

Så här får någon annan komma med ett svar.

Ursprungligen av arc:

När det gäller att spara data lokalt i iPhonen så har inte jag någon direkt erfarenhet. Jag lagrar bara temporära filer, resten läggs upp på en central server.

Så här får någon annan komma med ett svar.

Det är egentligen mot en central server jag ska spara...

  • Medlem
  • 2010-08-23 16:26
Ursprungligen av Mattias Hedman:

Det är egentligen mot en central server jag ska spara...

Ok, om det sparas på en central server så föredrar jag personligen att spara allt i en databas, t.ex. MySQL.

iPhone-appen kontaktar då servern via ett vanligt HTTP POST-anrop som går mot ett php-script som populerar databasen.

Tack arc tack arc tack arc oj förlåt att jag upprepar mig så mycket men jag är väldigt tacksam för vad arc skriver.

Mao så sparar jag filen i det format jag sedan ska använda för att skicka den. Det låter bra.

Hur läser jag dessa sparningar sedan?

Medan jag ändå skriver så kan jag kasta ut en helt annan fråga.
Hur ritar jag med Cocoa 2D på en View?
Jag vill bara rita ett streck inget avancerat.

  • Medlem
  • 2010-08-19 13:55
Ursprungligen av Mattias Hedman:

Tack arc tack arc tack arc oj förlåt att jag upprepar mig så mycket men jag är väldigt tacksam för vad arc skriver.

Mao så sparar jag filen i det format jag sedan ska använda för att skicka den. Det låter bra.

Hur läser jag dessa sparningar sedan?

Medan jag ändå skriver så kan jag kasta ut en helt annan fråga.
Hur ritar jag med Cocoa 2D på en View?
Jag vill bara rita ett streck inget avancerat.

Läsa upp sparade filer gör du med t.ex.
NSData-fil
NSData *data = [[NSData alloc]initWithContentsOfFile: path];

NSString-fil
NSError *error;
NSString *str = [NSString stringWithContentsOfFile: path encoding: NSUTF8StringEncoding error: &error];

(Fungerar om det är en fil sparad som UTF-8)

För att rita med Cocoa 2D (jag tror det här Cocoa 2D ) kan du skapa en klass, t.ex. GraphView som ärver UIView. I GraphView-klassen kan du implementera en drawRect-metod:

-(void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();

// Fill in the background
CGContextSetFillColorWithColor(context, CreateDeviceGrayColor(0.6, 1.0));
CGContextFillRect(context, self.bounds);

// Draw a blue line
CGContextMoveToPoint(context, 5, 5);
CGContextAddLineToPoint(context, 10, 10);
CGContextSetStrokeColorWithColor(context, CreateDeviceRGBColor(1.0, 0.0, 0.0, 1.0));
CGContextStrokePath(context);
}

Två hjälpfunktioner:

CGColorRef CreateDeviceGrayColor(CGFloat w, CGFloat a)
{
CGColorSpaceRef gray = CGColorSpaceCreateDeviceGray();
CGFloat comps[] = {w, a};
CGColorRef color = CGColorCreate(gray, comps);
CGColorSpaceRelease(gray);
return color;
}

CGColorRef CreateDeviceRGBColor(CGFloat r, CGFloat g, CGFloat b, CGFloat a)
{
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGFloat comps[] = {r, g, b, a};
CGColorRef color = CGColorCreate(rgb, comps);
CGColorSpaceRelease(rgb);
return color;
}

O_O TACK! Ska testa detta om en stund... måste först lura ut varför kamera bilderna inte visas i min imageView. De som plockas från biblioteket gör det men inte kamera bilderna och de passerar genom samma metod.

LOL frazze!

  • Medlem
  • Sollentuna
  • 2010-08-19 16:53
Ursprungligen av Mattias Hedman:

LOL frazze!

Det är sånt här som vi utvecklare är bra på...

Ok tack!

1
Bevaka tråden