Pergunta

Eu estou tentando exibir um NSTableView de:

| em miniatura | filename |

Eu criei o NSTableView em IB e delegado-lo a uma classe. Na classe, eu ultrapassado um modelo apenas para obter uma implementação POC e criou os métodos de delegado de fonte de dados. Eles preencher as células de texto muito bem. No entanto, agora estou na etapa onde as primeiras necessidades celulares para conter uma pequena miniatura da imagem.

O que eu quero fazer (e eu tenho certeza que é estúpido-simples) é pegar o ícone de imagem - e é justo supor que todos os arquivos são jpegs e têm miniaturas incorporado - e colocar esse ícone, dimensionada para 64x64 na célula da tabela. Há um monte de código sobre como gerar miniaturas, mas eu não vejo muito que me chega ao código de trabalho. Aqui está o que eu tenho:

  # 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

O que eu estou lutando com é o que os passos que faltam são para obter o método thumbnailImage a fornecer-me com algo que pode ser um objeto de dados apropriado para retornar a partir da fonte de dados.

Qualquer ajuda é incrivelmente apreciado.

BTW: IknowIknowIknow, eu deveria estar usando MacRuby mas não é executado em minha 32-bit Core Duo. Infelizmente.

Foi útil?

Solução

I ultrapassado um modelo ...

Não faça isso. Em Cocoa, é mais fácil de fazer as coisas com um modelo do que sem.

O que eu estou lutando com é o que os passos que faltam são para obter o método thumbnailImage a fornecer-me com algo que pode ser um objeto de dados apropriado para retornar a partir da fonte de dados.

CGImageSourceCreateThumbnailAtIndex retorna um CGImage. Você precisa tableView_objectValueForTableColumn_row_ para retornar um NSImage. Portanto, use o método initWithCGImage_size_ de NSImage.

Se você estiver executando o Leopard, esse método não está disponível, então você precisa criar uma NSBitmapImageRep com o CGImage vez, e depois criar uma NSImage do tamanho correto e adicionar que a representação a ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top