Benjamin Jackson
bhjac****@gmail*****
Tue Feb 27 23:42:14 JST 2007
Just to clarify and bump this email thread, here's the error I'm getting in XCode: "unlockFocus called too many time." On 1/27/07, Benjamin Jackson <bhjac****@gmail*****> wrote: > This code snippet runs fine in the main thread, but my app crashes > when I put it in a thread as below. Any idea what I'm doing wrong? > Thanks, > > Ben > > Thread.start do > rows.times do |row| > puts "\nRow #{row}" > columns.times do |column| > write_column image, row, column > end > end > end > > def write_column image, row, column > puts "Column #{column}" > dest = "#{@dirname}/TileGroup0/#{@numtiers}-#{row}-#{column}.jpg" > image_width, image_height = image.extent.size.width, image.extent.size.height > tile_width, tile_height = TILESIZE, TILESIZE > tile_width = image_width - row*TILESIZE if row*TILESIZE + TILESIZE > > image_width > tile_height = image_height - column*TILESIZE if column*TILESIZE + > TILESIZE > image_height > write_image image, dest, { > :w => row*TILESIZE, :y => column*TILESIZE, :width => tile_width, > :height => tile_height > } > @numtiles = @numtiles + 1 > end > > def write_image image, path, options={} > x, y = 0, image.extent.size.height > width = options[:width] || image.extent.size.width > height = options[:height] || image.extent.size.height > x = options[:x] unless options[:x].nil? > # we have to calculate the y from the top to conform to Flash's > coordinate system > y = image.extent.size.height - options[:y] - height unless options[:y].nil? > > @mutex.synchronize do > bitmap = OSX::NSBitmapImageRep.alloc.initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel( > nil, width, height, 8, 4, true, false, OSX::NSDeviceRGBColorSpace, 0, 0) > > context = OSX::NSGraphicsContext.graphicsContextWithBitmapImageRep bitmap > OSX::NSGraphicsContext.saveGraphicsState > OSX::NSGraphicsContext.setCurrentContext context > context.CIContext.drawImage_atPoint_fromRect image, > OSX::CGPoint.new(0, 0), OSX::CGRect.new(OSX::CGPoint.new(x,y), > OSX::CGSize.new(width, height)) > OSX::NSGraphicsContext.restoreGraphicsState > representation = > bitmap.representationUsingType_properties(OSX::NSJPEGFileType, nil) > representation.writeToFile_atomically(path, true) > end > end >