Открытые автономные изображения jpg в приложении командной строки в Objective-C под Mac OS X 10.6.8 и Xcode 3.2.6

Что я делаю: я довольно новичок в Objective-C и пишу приложение командной строки на моем старом Macbook 2,1, которое работает с изображениями.

Моя проблема: я просто хочу получить ширину и высоту в виде числа (int, NSInteger, NSNumber,...) изображения, сохраненного на моем локальном жестком диске "Macintosh HD".

Актуальность для других: должен быть программный способ работы с картинками. Это довольно просто.

Моя рабочая платформа: я разрабатываю для Mac OS X 10.6.8 с Xcode 3.2.6.

Моя история исследований: я уже искал кулинарные книги и фоновые знания в stackru и на нескольких других сайтах, чтобы сделать мои следующие испытания, но я пока не добился успеха. Я представляю все, что я попробовал в следующем. Заранее ничего не получалось.

//BildOeffner.h:

#import <Cocoa/Cocoa.h>
@interface BildOeffner : NSView 
    -(BildOeffner*) init;
    - (NSNumber*) extrahiereBildBreite:(NSString*) bildPfad;
@end

//BildOeffner.m:

#import "BildOeffner.h"
@implementation BildOeffner
    // extracts the image width
    - (NSNumber*) extrahiereBildBreite:(NSString*) bildPfad{
    NSBitmapImageRep* nsImageRep = [NSBitmapImageRep imageRepWithContentsOfFile:bildPfad];
    NSInteger extrahierteBildBreite =[nsImageRep pixelsWide];
    NSNumber* bildBreite = [NSNumber numberWithInt:extrahierteBildBreite];
    return bildBreite;
    }
@end

Код не показывает ошибок компиляции в редакторе, но в результатах сборки есть ошибки: Сообщение об ошибке:

Ld build/Debug/FotobuchErsteller_0 normal x86_64
cd /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/gcc-4.2 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk     -L/Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug     -F/Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug -filelist /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/Objects-normal/x86_64/FotobuchErsteller_0.LinkFileList -mmacosx-version-min=10.6 -framework Foundation -o /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug/FotobuchErsteller_0

Undefined symbols:
  "_OBJC_CLASS_$_NSImage", referenced from:
  objc-class-ref-to-NSImage in BildOeffner.o
  "_OBJC_METACLASS_$_NSView", referenced from:
  _OBJC_METACLASS_$_BildOeffner in BildOeffner.o
  "_OBJC_CLASS_$_NSView", referenced from:
  _OBJC_CLASS_$_BildOeffner in BildOeffner.o
  "_OBJC_CLASS_$_NSBitmapImageRep", referenced from:
  objc-class-ref-to-NSBitmapImageRep in BildOeffner.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

тогда я попробовал следующее:

//BildAnalyst.h:

#import <Cocoa/Cocoa.h>
#import <Foundation/Foundation.h>
@interface BildAnalyst : NSObject
@property (assign) NSArray* bilderListe;
@property (assign) NSArray* bildObjektListe;
@property (assign) NSNumber* erwarteteBildHoehe;
@property (assign) NSNumber* erwarteteBildBreite;

-(BildAnalyst*) init;
-(BildAnalyst*) initWith:(NSArray*) neueBilderListe;

- (NSArray *)bilderListe;
- (void)setBilderListe:(NSArray *) neueBilderListe;
- (NSArray *)bildObjektListe;
- (void)setBildObjektListe:(NSArray *) neueBildObjektListe;
- (NSNumber*)erwarteteBildHoehe;
- (void)setErwarteteBildHoehe:(NSNumber*) neueErwarteteBildHoehe;
- (NSNumber*)erwarteteBildBreite;
- (void)setErwarteteBildBreite:(NSNumber*) neueErwarteteBildBreite;

- (void) erstelleListeAllerBilderImOrdner:(NSString*) absoluterPfadZumOrdner;
- (void) analysiereBilderListe;
@end

//BildAnalyst.m:

#import <Cocoa/Cocoa.h>
#import <Foundation/Foundation.h>
#import "BildAnalyst.h"
#import "Bild.h"
@implementation BildAnalyst

- (id)init {
self = [super init];
    if (self){
    self.bilderListe = nil;
    self.erwarteteBildHoehe = [NSNumber numberWithInt:3024];
    self.erwarteteBildBreite = [NSNumber numberWithInt:4032];
    }
return self;
}

/*Der explizite Konstruktor dieser Klasse.
 Parameter: NSMutableArray neueBilderListe
 Rueckgabe: BildAnalyst bildAnalyst*/
-(BildAnalyst*) initWith:(NSMutableArray*) neueBilderListe{
self = [super init];
    if (self){
        self.bilderListe = neueBilderListe;
    }
return self;
}

- (void) setBilderListe:(NSArray *) neueBilderListe{
    self.bilderListe = neueBilderListe;
}

- (NSArray *) bilderListe{
    return self.bilderListe;
}

- (void)setBildObjektListe:(NSArray *) neueBildObjektListe{
    self.bildObjektListe = neueBildObjektListe;
}

- (NSArray *)bildObjektListe{
    return self.bildObjektListe;
}

- (NSNumber*)erwarteteBildHoehe{
    return self.erwarteteBildHoehe;
}

- (void)setErwarteteBildHoehe:(NSNumber*) neueErwarteteBildHoehe{
    self.erwarteteBildHoehe = neueErwarteteBildHoehe;
}

- (NSNumber*)erwarteteBildBreite{
    return self.erwarteteBildBreite;
}

- (void)setErwarteteBildBreite:(NSNumber*) neueErwarteteBildBreite{
    self.erwarteteBildBreite = neueErwarteteBildBreite;
}


/* Die folgende Methode dient dem Auslesen eines Ordners und dem Speichern von darin enthaltenen Objekten in erster Hierarchieebene in ein Array, welches die Instanzvariable "bilderListe" befuellt.
 Parameter NSString* absoluterPfadZumOrdner*/
- (void) erstelleListeAllerBilderImOrdner:(NSString*) absoluterPfadZumOrdner{
    NSError* fehlerBeimLesenDesBilderordners;
    NSFileManager* nsFileManager = [NSFileManager defaultManager];
    [nsFileManager changeCurrentDirectoryPath:absoluterPfadZumOrdner];
    NSArray* dateiListe = [nsFileManager contentsOfDirectoryAtPath:absoluterPfadZumOrdner error:&fehlerBeimLesenDesBilderordners];
    [self setBilderListe:dateiListe];
}

/*Die folgende Methode dient der Analyse der Bilder, welche in einem Ordner gefunden wurden. Sie bestimmt das Bildformat und speichert die Bilder als Objekte in die Instanzvariable "bildObjektListe".
Parameter NSArray bilderListe*/
- (void) analysiereBilderListe {
    NSUInteger i, count = [[self bilderListe] count];
    NSMutableArray* neueBildObjektListe = [[NSMutableArray alloc] init];
    for (i = 0; i < count; i++) {
        NSString* bildPfad = [[self bilderListe] objectAtIndex:i];
        NSBitmapImageRep* nsImageRep = [NSBitmapImageRep imageRepWithContentsOfFile:bildPfad];
        NSInteger extrahierteBildHoehe = [nsImageRep pixelsHigh];
        NSNumber* bildHoehe = [NSNumber numberWithInt:extrahierteBildHoehe];
        NSInteger extrahierteBildBreite =[nsImageRep pixelsWide];
        NSNumber* bildBreite = [NSNumber numberWithInt:extrahierteBildBreite];
        Bild* bild = [[Bild alloc] init];
        [bild setVollstaendigerBildName:bildPfad];
        if ((bildHoehe == self.erwarteteBildHoehe) && (bildBreite == self.erwarteteBildBreite)) {
            [bild setBildformat:hochformat];
        } else if ((bildHoehe == self.erwarteteBildBreite) && (bildBreite == self.erwarteteBildHoehe)) {
            [bild setBildformat:querformat];
        } else if (bildHoehe ==bildBreite){
            [bild setBildformat:quadratisch];
        } else {
            continue;
        }
    [neueBildObjektListe insertObject:bild atIndex:i];
    }
    self.bildObjektListe = neueBildObjektListe;
}
@end

с классом „Bild“:

//Bild.h:

#import <Cocoa/Cocoa.h>
#import <Foundation/Foundation.h>

typedef enum {hochformat, quadratisch, querformat} Bildformat;

@interface Bild : NSObject 
@property (assign) NSString *vollstaendigerBildName;
@property (assign) Bildformat bildformat;

- (Bild*)init;
- (Bild*)init:(NSString *) bildName nunDasBildformat:(Bildformat)dasBildFormat;
- (void)setVollstaendigerBildName:(NSString *) neuerVollstaendigerBildName;
- (NSString *)vollstaendigerBildName;
- (void)setBildformat:(Bildformat) neuesBildformat;
- (Bildformat)bildformat;
@end

//Bild.m:

#import "Bild.h"

@implementation Bild

- (Bild*)init {
    self = [super init];
    if (self){
        self.vollstaendigerBildName = @"";
        self.bildformat = hochformat;
    }
    return self;
}

/*Der explizite Konstruktor dieser Klasse.
 Parameter NSString bildName
 Parameter Bildformat dasBildFormat
 Rueckgabe Bild bild*/
- (Bild*)init:(NSString *)bildName nunDasBildformat:(Bildformat)dasBildFormat {
    self = [super init];
    if (self){
        self.vollstaendigerBildName = bildName;
        self.bildformat = dasBildFormat;
    }
    return self;
}

- (void) setVollstaendigerBildName:(NSString *) neuerVollstaendigerBildName{
    self.vollstaendigerBildName = neuerVollstaendigerBildName;
}

- (NSString *) vollstaendigerBildName{
    return self.vollstaendigerBildName;
}

- (void)setBildformat:(Bildformat) neuesBildformat{
    self.bildformat = neuesBildformat;
}

- (Bildformat)bildformat{
    return self.bildformat;
}
@end

Код не показывает ошибок компиляции в редакторе, но в результатах сборки есть ошибки: Сообщение об ошибке:

Ld build/Debug/FotobuchErsteller_0 normal x86_64
cd /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/gcc-4.2 -arch x86_64 
-isysroot /Developer/SDKs/MacOSX10.6.sdk         -L/Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug     
-F/Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug 
-filelist /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/Objects-normal/x86_64/FotobuchErsteller_0.LinkFileList -mmacosx-version-min=10.6 
-framework Foundation -o /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug/FotobuchErsteller_0

Undefined symbols:
  "_OBJC_CLASS_$_NSBitmapImageRep", referenced from:
      objc-class-ref-to-NSBitmapImageRep in BildAnalyst.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

затем я попробовал следующее с тем же классом "BildAnalyst":

я использовал

NSURL* nsUrl = [NSURL fileURLWithPath:bildPfad];
CIImage* nsImageRep = [CIImage imageWithContentsOfURL:nsUrl];

вместо

NSBitmapImageRep* nsImageRep = [NSBitmapImageRep imageRepWithContentsOfFile:bildPfad];

Код не показывает ошибок компиляции в редакторе, но есть ошибки в результатах сборки: сообщение об ошибке:

Ld build/Debug/FotobuchErsteller_0 normal x86_64
cd /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/gcc-4.2 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk     -L/Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug     -F/Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug -filelist /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/Objects-normal/x86_64/FotobuchErsteller_0.LinkFileList -mmacosx-version-min=10.6 -framework Foundation -o /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/Debug/FotobuchErsteller_0

Undefined symbols:

"_OBJC_CLASS_$_CIImage", referenced from:
  objc-class-ref-to-CIImage in BildAnalyst.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

затем я попробовал следующее с тем же классом "BildAnalyst":

я использовал

NSURL* nsUrl = [NSURL fileURLWithPath:bildPfad];
NSData* nsData = [NSData dataWithContentsOfURL:nsUrl];
UIImage* nsImageRep = [UIImage imageWithData:nsData];

вместо

NSBitmapImageRep* nsImageRep = [NSBitmapImageRep imageRepWithContentsOfFile:bildPfad];

Код показывает ошибки компиляции в строке с UIImage. Сообщения об ошибках:

CompileC build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/Objects-normal/x86_64/BildAnalyst.o BildAnalyst.m normal x86_64 objective-c com.apple.compilers.gcc.4_2
cd /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0
setenv LANG en_US.US-ASCII

/Developer/usr/bin/gcc-4.2 -x target-c -arch x86_64 -fmessage-length=0 -pipe -std=gnu99 -Wno-триграфы -fpascal-strings -fasm-blocks -O0 -Wreturn-type -Wunused-variable -isysroot /Developer/SDKs/MacOSX10.6.sdk -mfix-and-continue -mmacosx-version-min=10,6 -gdwarf-2
-iquote /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/FotobuchErstelled-0g
-I/Users/Edo/ Документы / FotobuchSkriptErsteller / FotobuchSkriptErsteller / FotobuchErsteller_0 / сборки /FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/FotobuchErsteller_0-собственная целевая headers.hmap
-I / Пользователи / Edo / Документы /FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/FotobuchErsteller_0.buildErsteller_0-all-target-target-headers.hmaprsh_ru_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_setup_ru /build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/FotobuchErsteller_0-project-headers.hmap
-F / Users / Edo / Документы / FotobuchSkriptErsteller / FotobuchSkriptErsteller / FotobuchErsteller_0 / сборки / отладки
-I / Пользователи / Edo / Документы / FotobuchSkriptErsteller / FotobuchSkriptErsteller / FotobuchErsteller_0 / сборки / Debug / включить
-I/Users/Edo/ Документы / FotobuchSkriptErsteller / FotobuchSkriptErsteller / FotobuchErsteller_0 / сборки / FotobuchErsteller_0.build / Debug / FotobuchErsteller_0.build / DerivedSources / x86_64
-I / Пользователи / Edo / Документы /FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/DerivedSources -include /var/folder /1J/1J8zkShBHUHUFHU com.apple.Xcode.501/SharedPrecompiledHeaders/FotobuchErsteller_0_Prefix-gqjmlqmlzpuhpyfvtxjjyzqdlikg/FotobuchErsteller_0_Prefix.pch -c /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/BildAnalyst.m -о / Пользователи / Edo / Документы /FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/build/FotobuchErsteller_0.build/Debug/FotobuchErsteller_0.build/Objects-normal/x86_64/BildAnalyst.o /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErstellernis_reader.Intel.Reader.Ru:BB_DF_DB_D_L_L_L_S_S_S_S_S_F_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_P_M /Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/BildAnalyst.m:112: ошибка: "UIImage" необъявлено (первое использование в этой функции) /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/BildAnalyst.m:112: ошибка: (Каждый необъявленный идентификатор сообщается только один раз /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErstel.m1 в) м:113: предупреждение: не используется переменная /Users/Edo/Documents/FotobuchSkriptErsteller/FotobuchSkriptErsteller/FotobuchErsteller_0/BildAnalyst.m:104 'bildHoehe' предупреждение: не используется переменная 'neueBildObjektListe' {стандартный ввод}: неизвестно:Undefined локальный символ L_OBJC_CLASSLIST_SUP_REFS_$_0 {стандартный ввод}: неизвестно: неопределенный локальный символ L_OBJC_SELECTOR_REFERENCES_0 {стандартный ввод}: неизвестен: неопределенный локальный символ L_OBJC_SELECTOR_REFERENCES_1 {standard вход}: неизвестно: Не определен локальный символ L_OBJC_CLASSLIST_REFERENCES_$_1 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_2 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_3 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_4 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_5 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_6 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_7 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_8 {стандартный ввод}: неизвестно: Не определен локальный символ L_OBJC_SELECTOR_REFERENCES_9 {стандартный ввод}: неизвестно: неопределенный локальный символ L_OBJC_CLASSLIST_REFERENCES_$_2 {стандартный ввод}: неизвестен: неопределенный локальный символ L_OBJC_SELECTOR_REFERENCES_10 {стандартный ввод}: неизвестен: неопределенный локальный символ L_OBJC_SELECTOR_REFERENCES_F_REF_LF_LF_LEF_RED_FR_LF_LOR_N_F_L_F_L_F_L_F_LF_LF_LF_LF_LF_LF_LF CES_12

Есть ли у кого-нибудь предложение, что я могу улучшить или, возможно, по-другому? Я просто хочу получить ширину и высоту изображения, сохраненного на моем локальном жестком диске "Macintosh HD" в виде числа (int, NSInteger, NSNumber, ...).

1 ответ

Решение

Инструменты командной строки по умолчанию ссылаются только на Foundation. Вы должны убедиться, что ваш проект связан с платформой AppKit (или Cocoa, которая автоматически связывается как с Foundation, так и с AppKit). Выберите ваш проект в XCode, выберите вашу цель и нажмите на вкладку "Фазы сборки". В "Связать двоичные файлы с библиотеками" добавьте AppKit. Вы должны иметь доступ к классам AppKit, таким как NSImage,

Другие вопросы по тегам