Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MacFaceLibrary/FaceDef.cs

    r30 r19  
    1818        public class FaceDef
    1919        {
    20                 // ƒpƒ^[ƒ“ƒXƒC[ƒgID
    2120                public enum PatternSuite
    2221                {
     
    2625                }
    2726
    28                 public const int PatternCount = 11;
    29                 public const int ImageWidth   = 128;
    30                 public const int ImageHeight  = 128;
    31 
    32                 // ƒ}[ƒJ[
    3327                public const int MarkerNone    = 0x00;
    3428                public const int MarkerPageIn  = 0x01;
    3529                public const int MarkerPageOut = 0x02;
    3630
    37                 // Šçƒpƒ^[ƒ“’è‹`ƒvƒƒpƒeƒBƒŠƒXƒgƒtƒ@ƒCƒ‹–¼
    3831                private const string FaceDefName = "faceDef.plist";
    39 
    40                 // Šçƒpƒ^[ƒ“’è‹`‚̃L[–¼Ì
    41                 private const string KeyInfoTitle       = "title";
    42                 private const string KeyInfoAuthor      = "author";
    43                 private const string KeyInfoVersion     = "version";
    44                 private const string KeyInfoSiteURL     = "web site";
    45                
    46                 private const string KeyDefParts        = "parts";
    47                 private const string KeyDefPatterns     = "pattern";
    48                 private const string KeyDefMarkers      = "markers";
    49                 private const string KeyDefTitlePattern = "title pattern";
    50 
    51                 private const string KeyPartImage       = "filename";
    52                 private const string KeyPartPosX        = "pos x";
    53                 private const string KeyPartPosY        = "pos y";
    54 
    55                 //
     32                private const int PatternCols = 11;
     33                private const int PatternRows = 3;
     34                private const int ImageWidth = 128;
     35                private const int ImageHeight = 128;
     36
    5637                private string _path;
    5738                private string _title;
     
    7758                        // î•ñ
    7859                        _path = path;
    79                         _title = ReadInfoString(def, KeyInfoTitle);
    80                         _author = ReadInfoString(def, KeyInfoAuthor);
    81                         _version = ReadInfoString(def, KeyInfoVersion);
    82 
    83                         if (def.ContainsKey(KeyInfoSiteURL))
     60                        _title = (def.ContainsKey("title") ? def["title"] as string : String.Empty);
     61                        _author = (def.ContainsKey("author") ? def["author"] as string : String.Empty);
     62                        _version = (def.ContainsKey("version") ? def["version"] as string : String.Empty);
     63
     64                        if (def.ContainsKey("web site"))
    8465                        {
    8566                                try
    8667                                {
    87                                         _webSite = new Uri(def[KeyInfoSiteURL] as string);
     68                                        _webSite = new Uri(def["web site"] as string);
    8869                                }
    8970                                catch (UriFormatException) {}
     
    9273
    9374                        // ƒp[ƒc‚̓ǂݍž‚Ý
    94                         ArrayList partDefList = (ArrayList)def[KeyDefParts];
     75                        ArrayList partDefList = (ArrayList)def["parts"];
    9576                        if (partDefList == null)
    9677                        {
     
    10182                        for (int i = 0; i < partDefList.Count; i++)
    10283                        {
    103                                 _parts[i] = ReadPart(path, (Hashtable)partDefList[i]);
    104             }
     84                                Hashtable partDef = (Hashtable)partDefList[i];
     85                                string filename = (String)partDef["filename"];
     86                                int x = (int)partDef["pos x"];
     87                                int y = (int)partDef["pos y"];
     88                                _parts[i] = new Part(System.IO.Path.Combine(path, filename), x, y);
     89                        }
    10590
    10691                        // ƒpƒ^[ƒ“‚̓ǂݍž‚Ý
    107             int suiteCount = PatternSuite.GetNames(typeof(PatternSuite)).Length;
    108             ;
    109             ArrayList suiteDefList = (ArrayList)def[KeyDefPatterns];
    110             _patternSuites = new Part[suiteCount][][];
    111             for (int i = 0; i < suiteCount; i++)
    112             {
    113                                 _patternSuites[i] = ReadPatternSuite(_parts, (ArrayList)suiteDefList[i]);
     92                        ArrayList suiteDefList = (ArrayList)def["pattern"];
     93                        _patternSuites = new Part[PatternRows][][];
     94                        for (int i = 0; i < PatternRows; i++)
     95                        {
     96                                ArrayList suiteDef = (ArrayList)suiteDefList[i];
     97                                Part[][] suite = new Part[PatternCols][];
     98                                for (int j = 0; j < PatternCols; j++)
     99                                {
     100                                        ArrayList patternDef = (ArrayList)suiteDef[j];
     101                                        Part[] pattern = new Part[patternDef.Count];
     102                                        for (int k = 0; k < patternDef.Count; k++)
     103                                        {
     104                                                pattern[k] = _parts[(int)patternDef[k]];
     105                                        }
     106                                        suite[j] = pattern;
     107                                }
     108                                _patternSuites[i] = suite;
    114109                        }
    115110
    116111                        // ƒ}[ƒJ[‚̓ǂݍž‚Ý
    117                         ArrayList markerDefList = (ArrayList)def[KeyDefMarkers];
     112                        ArrayList markerDefList = (ArrayList)def["markers"];
    118113                        _markers = new Part[markerDefList.Count];
    119114                        for (int i = 0; i < markerDefList.Count; i++)
     
    123118
    124119                        // ƒ^ƒCƒgƒ‹ƒpƒ^[ƒ“‚̓ǂݍž‚Ý
    125                         _titlePattern = ReadPattern(_parts, (ArrayList)def[KeyDefTitlePattern]);
    126                 }
    127 
    128                 private string ReadInfoString(Hashtable def, string key)
    129                 {
    130                         string str = def[key] as string;
    131                         return str != null ? str : "";
    132                 }
    133 
    134                 private Part ReadPart(string path, Hashtable partDef)
    135                 {
    136                         string filename = (String)partDef[KeyPartImage];
    137                         string imgPath = System.IO.Path.Combine(path, filename);
    138                         Image img = Image.FromFile(imgPath);
    139 
    140                         int x = (int)partDef[KeyPartPosX];
    141                         int y = ImageHeight - (int)partDef[KeyPartPosY] - img.Height;
    142 
    143                         return new Part(imgPath, img, x, y);
    144                 }
    145 
    146                 private Part[] ReadPattern(Part[] parts, ArrayList patternDef)
    147                 {
    148                         Part[] pattern = new Part[patternDef.Count];
    149                         for (int i = 0; i < patternDef.Count; i++)
    150                         {
    151                                 pattern[i] = _parts[(int)patternDef[i]];
    152                         }
    153                         return pattern;
    154                 }
    155 
    156                 private Part[][] ReadPatternSuite(Part[] parts, ArrayList suiteDef)
    157                 {
    158                         Part[][] suite = new Part[PatternCount][];
    159                         for (int i = 0; i < PatternCount; i++)
    160                         {
    161                                 suite[i] = ReadPattern(_parts, (ArrayList)suiteDef[i]);
    162                         }
    163                         return suite;
    164                 }
    165 
    166 
    167         public string Path
    168         {
    169             get { return _path; }
    170         }
    171 
    172         public string Title
    173         {
    174             get { return _title; }
    175         }
    176 
    177         public string Author
    178         {
    179             get { return _author; }
    180         }
    181 
    182         public string Version
    183         {
    184             get { return _version; }
    185         }
    186 
    187         public Uri WebSite
    188         {
     120                        ArrayList titlePatternDef = (ArrayList)def["title pattern"];
     121                        _titlePattern = new Part[titlePatternDef.Count];
     122                        for (int i = 0; i < titlePatternDef.Count; i++)
     123                        {
     124                                _titlePattern[i] = _parts[(int)titlePatternDef[i]];
     125                        }
     126                }
     127
     128                public Uri WebSite
     129                {
    189130                        get { return _webSite; }
    190131                }
    191132
    192                 public Image TitleImage
    193                 {
    194                         get
    195                         {
    196                                 Bitmap image = new Bitmap(ImageWidth, ImageHeight);
    197                                 Graphics g = Graphics.FromImage(image);
    198 
    199                                 foreach (Part part in _titlePattern)
    200                                 {
    201                                         g.DrawImage(part.Image,
    202                                                 part.Point.X, part.Point.Y,
    203                                                 part.Image.Size.Width, part.Image.Size.Height);
    204                                 }
    205 
    206                                 g.Dispose();
    207                                 return image;
    208                         }
    209                 }
    210 
    211                 public void DrawPatternImage(Graphics g, PatternSuite suite, int no, int markers, float rate)
    212                 {
    213                         Part[] pattern = _patternSuites[(int)suite][no];
    214                         foreach (Part part in pattern)
     133                public string /*Version*/ Version
     134                {
     135                        get { return _version; }
     136                }
     137
     138                public string Author
     139                {
     140                        get { return _author; }
     141                }
     142
     143                public string Title
     144                {
     145                        get { return _title; }
     146                }
     147
     148                public string Path
     149                {
     150                        get { return _path; }
     151                }
     152
     153                public Image TitleImage()
     154                {
     155                        Bitmap image = new Bitmap(ImageWidth, ImageHeight);
     156                        Graphics g = Graphics.FromImage(image);
     157
     158                        foreach (Part part in _titlePattern)
    215159                        {
    216160                                g.DrawImage(part.Image,
    217                                         part.Point.X * rate, part.Point.Y * rate,
    218                                         part.Image.Size.Width * rate, part.Image.Size.Height * rate);
    219                         }
    220 
    221                         if (markers != 0)
    222                         {
    223                                 for (int i = 0; i < 8; i++)
    224                                 {
    225                                         if ((markers & (1 << i)) != 0)
    226                                         {
    227                                                 Part part = _markers[i];
    228                                                 g.DrawImage(part.Image,
    229                                                         part.Point.X * rate, part.Point.Y * rate,
    230                                                         part.Image.Size.Width * rate, part.Image.Size.Height * rate);
    231                                         }
    232                                 }
    233                         }
     161                                        part.Point.X, part.Point.Y,
     162                                        part.Image.Size.Width, part.Image.Size.Height);
     163                        }
     164
     165                        g.Dispose();
     166                        return image;
    234167                }
    235168
     
    273206        }
    274207}
     208
     209
     210/*
     211#import <Cocoa/Cocoa.h>
     212
     213//
     214#define FACE_ROWMAX     3
     215#define FACE_COLMAX     11
     216#define FACE_PATMAX     8
     217#define FACE_IMGW       128
     218#define FACE_IMGH       128
     219#define FACE_IMGSIZE    (NSMakeSize(128,128))
     220
     221// ƒ}[ƒJ[ƒrƒbƒgƒ}ƒXƒN
     222#define FDMARKER_PAGEIN         0x0001
     223#define FDMARKER_PAGEOUT        0x0002
     224
     225//
     226#define FACE_INFO_TITLE         @"title"
     227#define FACE_INFO_AUTHOR        @"author"
     228#define FACE_INFO_VERSION       @"version"
     229#define FACE_INFO_SITE_URL      @"web site"
     230
     231#define FACE_INFO_PARTS         @"parts"
     232#define FACE_INFO_PATTERN       @"pattern"
     233#define FACE_INFO_MARKER        @"markers"
     234#define FACE_INFO_TITLE_PATTERN @"title pattern"
     235#define FACE_INFO_MARK_PGOUT    @"pagein pattern"
     236#define FACE_INFO_MARK_PGIN     @"pageout pattern"
     237
     238#define FACE_PART_IMAGE         @"filename"
     239#define FACE_PART_POSX          @"pos x"
     240#define FACE_PART_POSY          @"pos y"
     241
     242typedef struct {
     243    NSString *filename;
     244    NSImage *image;
     245    NSPoint pos;
     246} PartDef;
     247
     248typedef struct {
     249    unsigned count;
     250    int parts[FACE_PATMAX];
     251} PatternDef;
     252
     253
     254@interface FaceDef : NSObject
     255{
     256    NSString *packagePath;
     257    NSDictionary *definition;
     258    int partCount;
     259    PartDef *parts;
     260    PatternDef patterns[FACE_ROWMAX][FACE_COLMAX];
     261    int markers[8];
     262    PatternDef titlePattern;
     263}
     264
     265+ (NSDictionary*)infoAtPath:(NSString*)path;
     266
     267+ (id)faceDefWithContentOfFile:(NSString*)path;
     268
     269- (id)initWithContentOfFile:(NSString*)path;
     270
     271- (NSString*)path;
     272
     273- (NSString*)title;
     274- (NSString*)author;
     275- (NSString*)version;
     276- (NSString*)siteURL;
     277
     278- (NSImage*)titleImage;
     279
     280- (int)partCount;
     281- (const PartDef*)partOfIndex:(int)index;
     282- (const PatternDef*)patternOfRow:(int)row col:(int)col;
     283- (int)patternCountOfRow:(int)row col:(int)col;
     284- (int)patternNoOfRow:(int)row col:(int)col index:(int)index;
     285
     286- (NSImage*)imageOfRow:(int)row col:(int)col marker:(int)marker;
     287
     288- (void)drawImageOfRow:(int)row col:(int)col marker:(int)marker atPoint:(NSPoint)pt;
     289- (void)drawPart:(PartDef*)part atPoint:(NSPoint)point;
     290
     291- (void)dumpPattern:(NSString*)path;
     292
     293@end
     294
     295@implementation FaceDef
     296
     297+ (NSDictionary*)infoAtPath:(NSString*)path
     298{
     299    NSDictionary *info;
     300
     301    info = [NSDictionary dictionaryWithContentsOfFile:
     302        [path stringByAppendingPathComponent:@"faceDef.plist"]];
     303
     304    return info;
     305}
     306
     307+ (id)faceDefWithContentOfFile:(NSString*)path
     308{
     309    return [[[self alloc] initWithContentOfFile:path] autorelease];
     310}
     311
     312- (id)initWithContentOfFile:(NSString*)path
     313{
     314    NSDictionary *partDefDict;
     315    NSArray *partArray,*patternArray,*colArray,*elemArray;
     316    NSEnumerator *enumerator;
     317    NSString *imagePath;
     318    NSNumber *value;
     319    int i,count;
     320    int row,col,no;
     321    int maxPartNo;
     322
     323    [super init];
     324
     325    NS_DURING
     326        definition = [FaceDef infoAtPath:path];
     327
     328        if (definition == nil) {
     329            [NSException raise:@"FaceDefInfoLoadException" format:@"failuer loading faceDef.plist"];
     330        }
     331
     332        [definition retain];
     333
     334        packagePath = [path retain];
     335
     336        // ƒp[ƒc’è‹`‚̓ǂݍž‚Ý
     337        partArray = [definition objectForKey:FACE_INFO_PARTS];
     338
     339        if ([partArray isMemberOfClass:[NSArray class]]) {
     340            [NSException raise:@"FaceDefPartListLoadException" format:@"failed in reading part list."];
     341        }
     342
     343        parts = calloc([partArray count],sizeof(PartDef));
     344        count = [partArray count];
     345
     346        for (partCount = 0; partCount < count; partCount++){
     347            partDefDict = [partArray objectAtIndex:partCount];
     348            parts[partCount].filename = [[partDefDict objectForKey:FACE_PART_IMAGE] retain];
     349            parts[partCount].pos.x = [(NSNumber*)[partDefDict objectForKey:FACE_PART_POSX] floatValue];
     350            parts[partCount].pos.y = [(NSNumber*)[partDefDict objectForKey:FACE_PART_POSY] floatValue];
     351            imagePath = [path stringByAppendingPathComponent:parts[partCount].filename];
     352            parts[partCount].image = [[NSImage alloc]initWithContentsOfFile:imagePath];
     353
     354            if (parts[partCount].image == nil){ // ‰æ‘œ‚ª“ǂݍž‚ß‚È‚©‚Á‚½
     355                [NSException raise:@"FaceDefPartLoadException"
     356                    format:@"failed in loading of image '%@'",parts[partCount].filename];
     357            }
     358        }
     359
     360        maxPartNo = count - 1;
     361
     362        // ƒpƒ^[ƒ“’è‹`‚̓ǂݍž‚Ý
     363        patternArray = [definition objectForKey:FACE_INFO_PATTERN];
     364
     365        for (row = 0; row < FACE_ROWMAX; row++){
     366            colArray = [patternArray objectAtIndex:row];
     367
     368            if ([colArray count] != FACE_COLMAX) {
     369                [NSException raise:@"FaceDefPatternLoadException"
     370                    format:@"number of pattern columns is not 10 at row %d",row];
     371            }
     372
     373            for (col = 0; col < FACE_COLMAX; col++){
     374                elemArray = [colArray objectAtIndex:col];
     375                enumerator = [[colArray objectAtIndex:col] objectEnumerator];
     376                for (i = 0; i <= FACE_PATMAX && (value = [enumerator nextObject]) != nil; i++){
     377                    no = [value intValue];
     378                    patterns[row][col].parts[i] = no;
     379                    if (0 > no || no > maxPartNo) { // ƒp[ƒc”ԍ†ƒ`ƒFƒbƒN
     380                        [NSException raise:@"FaceDefPatternLoadException"
     381                            format:@"illigal part no %d in patterns[%d,%d,%d]",no,row,col,i];
     382                    }
     383                }
     384                patterns[row][col].count = i;
     385            }
     386        }
     387
     388        // ƒ}[ƒJ[ƒŠƒXƒg‚̓ǂݍž‚Ý
     389        enumerator = [[definition objectForKey:FACE_INFO_MARKER] objectEnumerator];
     390        for (i = 0; i < 8 && (value = [enumerator nextObject]) != nil; i++){
     391            markers[i] = [value intValue];
     392        }
     393
     394        // ‘ã•\‰æ‘œƒpƒ^[ƒ“‚̓ǂݍž‚Ý
     395        enumerator = [[definition objectForKey:FACE_INFO_TITLE_PATTERN] objectEnumerator];
     396        for (i = 0; i <= FACE_PATMAX && (value = [enumerator nextObject]) != nil; i++){
     397            no = [value intValue];
     398            titlePattern.parts[i] = no;
     399            if (0 > no || no > maxPartNo) { // ƒp[ƒc”ԍ†ƒ`ƒFƒbƒN
     400                [NSException raise:@"FaceDefPatternLoadException"
     401                    format:@"illigal part no %d in title pattern",no];
     402            }
     403        }
     404        titlePattern.count = i;
     405    NS_HANDLER
     406        NSLog(@"FaceDef load error: %@",localException);
     407        [self dealloc];
     408        self = nil;
     409    NS_ENDHANDLER
     410
     411    return self;
     412}
     413
     414- (void)dealloc
     415{
     416    int i;
     417
     418    [packagePath release];
     419    [definition release];
     420
     421    if (parts != nil) {
     422        for (i = 0; i < partCount; i++){
     423            [parts[i].filename release];
     424            [parts[i].image release];
     425        }
     426        free(parts);
     427    }
     428}
     429
     430-(NSString*)path
     431{
     432    return packagePath;
     433}
     434
     435-(NSString*)title
     436{
     437    NSString *str;
     438    str = [definition objectForKey:@"title"];
     439    return  (str != nil) ? str : @"";
     440}
     441
     442-(NSString*)author
     443{
     444    NSString *str;
     445    str = [definition objectForKey:@"author"];
     446    return  (str != nil) ? str : @"";
     447}
     448
     449-(NSString*)version
     450{
     451    NSString *str;
     452    str = [definition objectForKey:@"version"];
     453    return  (str != nil) ? str : @"";
     454}
     455
     456- (NSString*)siteURL
     457{
     458    NSString *str;
     459    str = [definition objectForKey:@"web site"];
     460    return  (str != nil) ? str : @"";
     461}
     462
     463- (NSImage*)titleImage
     464{
     465    NSImage *image;
     466    int i;
     467
     468    image = [[NSImage alloc] initWithSize:FACE_IMGSIZE];
     469    [image lockFocus];
     470
     471    if (titlePattern.count > 0) {
     472        for (i=0; i<titlePattern.count; i++) {
     473            [self drawPart:&parts[titlePattern.parts[i]] atPoint:NSMakePoint(0,0)];
     474        }
     475    } else {
     476        [self drawImageOfRow:0 col:FACE_COLMAX marker:0 atPoint:NSMakePoint(0,0)];
     477    }
     478
     479    [image unlockFocus];
     480    return [image autorelease];
     481}
     482
     483- (int)partCount
     484{
     485    return partCount;
     486}
     487
     488- (const PartDef*)partOfIndex:(int)index
     489{
     490    if (0 <= index && index < partCount) return &parts[index];
     491    else return nil;
     492}
     493
     494- (const PatternDef*)patternOfRow:(int)row col:(int)col
     495{
     496    if (0 <= row && row < FACE_ROWMAX
     497     && 0 <= col && col < FACE_COLMAX) return &patterns[row][col];
     498    else return nil;
     499}
     500
     501- (int)patternCountOfRow:(int)row col:(int)col
     502{
     503    if (0 <= row && row < FACE_ROWMAX
     504     && 0 <= col && col < FACE_COLMAX) return patterns[row][col].count;
     505    else return -1;
     506}
     507
     508- (int)patternNoOfRow:(int)row col:(int)col index:(int)index
     509{
     510    if (0 <= row && row < FACE_ROWMAX
     511     && 0 <= col && col < FACE_COLMAX
     512     && 0 <= index && index < patterns[row][col].count) return patterns[row][col].parts[index];
     513    else return -1;
     514}
     515
     516- (NSImage*)imageOfRow:(int)row col:(int)col marker:(int)marker
     517{
     518    NSImage *image;
     519    image = [[NSImage alloc] initWithSize:FACE_IMGSIZE];
     520    [image lockFocus];
     521    [self drawImageOfRow:row col:col marker:marker atPoint:NSMakePoint(0,0)];
     522    [image unlockFocus];
     523    return [image autorelease];
     524}
     525
     526- (void)drawImageOfRow:(int)row col:(int)col marker:(int)marker atPoint:(NSPoint)point
     527{
     528    int count;
     529    int i;
     530
     531    count = patterns[row][col].count;
     532    for (i=0; i<count; i++){
     533        [self drawPart:&parts[patterns[row][col].parts[i]] atPoint:point];
     534    };
     535
     536    if (marker != 0) {
     537        for (i=0; i<8; i++) {
     538            if (marker & (1<<i)) {
     539                [self drawPart:&parts[markers[i]] atPoint:point];
     540            }
     541        }
     542    }
     543}
     544
     545- (void)drawPart:(PartDef*)part atPoint:(NSPoint)point
     546{
     547    point.x += part->pos.x;
     548    point.y += part->pos.y;
     549    [part->image compositeToPoint:point operation:NSCompositeSourceOver];
     550}
     551
     552-(void)dumpPattern:(NSString*)path;
     553{
     554    NSImage *img;
     555    NSSize imgSize;
     556    NSPoint pos;
     557    float offset;
     558    int i,j,rows;
     559    NSMutableDictionary *attr;
     560    NSString *str;
     561
     562    rows = partCount / FACE_COLMAX + 1;
     563    offset = rows * FACE_IMGW + 10;
     564    imgSize.width = FACE_IMGW * FACE_COLMAX;
     565    imgSize.height = FACE_IMGH * FACE_ROWMAX + offset + 14;
     566
     567    img = [[NSImage alloc] initWithSize:imgSize];
     568    if (img == nil) {
     569        NSLog(@"failure dump pattern!");
     570        return;
     571    }
     572
     573    [img lockFocus];
     574    [[NSColor whiteColor] set];
     575    NSRectFill(NSMakeRect(0,0,imgSize.width,imgSize.height));
     576
     577    [[NSColor blackColor] set];
     578    NSRectFill(NSMakeRect(0,offset-6,imgSize.width,2));
     579
     580    attr = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
     581                [NSFont systemFontOfSize:14.0], NSFontAttributeName,
     582                [NSColor blackColor], NSForegroundColorAttributeName,
     583                nil];
     584
     585    for (i = 0; i <= partCount; i++) {
     586        pos.x = (i % FACE_COLMAX) * FACE_IMGW;
     587        pos.y = (rows-1 - i / FACE_COLMAX) * FACE_IMGH;
     588        [self drawPart:&parts[i] atPoint:pos];
     589
     590        str = [NSString stringWithFormat:@"%d",i];
     591        pos.x = (i % FACE_COLMAX) * FACE_IMGW;
     592        pos.y = (rows-1 - i / FACE_COLMAX) * FACE_IMGH + FACE_IMGH - 12;
     593        [str drawAtPoint:pos withAttributes:attr];
     594    }
     595
     596    for (i = 0; i < FACE_ROWMAX; i++) {
     597        pos.y = (FACE_ROWMAX-1 - i) * FACE_IMGH + offset;
     598        for (j=0; j<FACE_COLMAX; j++) {
     599            pos.x = j * FACE_IMGW;
     600            [self drawImageOfRow:i col:j marker:0 atPoint:pos];
     601        }
     602    }
     603
     604    pos.y = imgSize.height - 14;
     605    for (i = 0; i < FACE_COLMAX-1; i++) {
     606        str = [NSString stringWithFormat:@"%d-%d%%",i*10,(i+1)*10-1];
     607        pos.x = i * FACE_IMGW;
     608        [str drawAtPoint:pos withAttributes:attr];
     609    }
     610    str = [NSString stringWithFormat:@"%d%%",100];
     611    pos.x = (FACE_COLMAX-1) * FACE_IMGW;
     612    [str drawAtPoint:pos withAttributes:attr];
     613
     614    [img unlockFocus];
     615
     616    [[img TIFFRepresentation] writeToFile:path atomically:NO];
     617    [img release];
     618}
     619
     620@end
     621
     622*/
Note: See TracChangeset for help on using the changeset viewer.