RubyCocoa:NSTableView中的缩略图图像

时间:2009-10-05 16:59:58

标签: cocoa image nstableview thumbnails

我正在尝试显示NSTableView:

|缩略图| filename |

我在IB中创建了NSTableView并将其委托给了一个类。在课堂上,我绕过了一个模型,只是为了获得POC实现并创建了数据源委托方法。他们填充文本单元格就好了。但是,现在我正处于第一个单元格需要包含图像的小缩略图的步骤。

我想要做的事情(而且我确定它很简单)就是抓住图像图标 - 假设所有文件都是jpeg并嵌入缩略图是公平的,并将该图标缩放到64x64进入表格单元格。有很多关于如何生成缩略图的代码,但是我没有看到太多让我使用代码的代码。这就是我所拥有的:

  # This works if I am only populating text values in the when 'Image'
  def tableView_objectValueForTableColumn_row_(image_table, column, row)
    thumbnailImage(75)
    case column.headerCell.stringValue
      when 'File Name'
        (0..99).to_a[row].to_s
      when 'Image'
        # here's where I want to return a square 64x64 image or ImageCell
        thumbnailImage(64)
      else
        '???'
    end
  end

  # Creates square thumbnail
  def thumbnailImage(size)
    file = "file://localhost/Users/sxross/Downloads/iStock_000004561564XSmall.jpg"
    image = CGImageSourceCreateWithURL(CFURLCreateWithString(nil, file, nil), nil)
    thumb = CGImageSourceCreateThumbnailAtIndex(image, 0, nil)
    thumb
  end

  def numberOfRowsInTableView(view)
    100
  end

我正在努力解决的问题是让thumbnailImage方法为我提供一些可以从数据源返回的适当数据对象的缺失步骤。

非常感谢任何帮助。

BTW:我知道我知道,我应该使用MacRuby,但它不能在我的32位Core Duo上运行。不幸的是

1 个答案:

答案 0 :(得分:0)

  

我绕过了一个模特......

不要那样做。在Cocoa中,使用模型比使用模型更容易。

  

我正在努力解决的问题是让thumbnailImage方法为我提供一些可以从数据源返回的适当数据对象的缺失步骤。

CGImageSourceCreateThumbnailAtIndex返回CGImage。您需要tableView_objectValueForTableColumn_row_才能返回NSImage。因此,请使用NSImage的initWithCGImage_size_方法。

如果您正在运行Leopard,则该方法不可用,因此您需要使用CGImage创建NSBitmapImageRep,然后创建正确大小的NSImage并将该表示添加到其中。