0

我正在尝试显示一个 NSTableView:

| 缩略图 | 文件名 |

我在 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 方法为我提供一些可以作为从数据源返回的适当数据对象的东西。

非常感谢任何帮助。

顺便说一句:IknowIknowIknow,我应该使用 MacRuby,但它不能在我的 32 位 Core Duo 上运行。可悲的是。

4

1 回答 1

0

我绕过了一个模型……</p>

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

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

CGImageSourceCreateThumbnailAtIndex返回一个 CGImage。您需要tableView_objectValueForTableColumn_row_返回一个 NSImage。因此,使用 NSImage 的initWithCGImage_size_方法。

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

于 2009-10-05T22:11:36.057 回答