Pregunta

Estoy tratando de mostrar una NSTableView de:

| miniatura | nombre de archivo |

He creado el NSTableView en IB y la delegó a una clase. En la clase, bypassed un modelo sólo para obtener una aplicación POC y creé los métodos de delegado del origen de datos. Pueblan las celdas de texto muy bien. Sin embargo, ahora estoy en la etapa en la que la primera célula tiene que contener una pequeña miniatura de la imagen.

Lo que quiero hacer (y estoy seguro de que es estúpido simple) es agarrar el icono de la imagen - y es razonable suponer que todos los archivos son archivos JPEG y tienen miniaturas incrustadas - y poner ese icono, reducido a 64x64 en la celda de tabla. Hay un montón de código en la forma de generar imágenes en miniatura, pero no veo mucho que me pone al código de trabajo. Aquí es lo que tengo:

  # 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

Lo que estoy sopesando es lo que las etapas que faltan son para obtener el método thumbnailImage de proporcionarme algo que puede ser un objeto de datos adecuado para volver a la fuente de datos.

Cualquier ayuda es increíblemente apreciado.

Por cierto: IknowIknowIknow, que debería usar MacRuby pero no se ejecuta en mi 32 bits Core Duo. Lamentablemente.

¿Fue útil?

Solución

  

Me bypassed un modelo ...

No hacer eso. En cacao, es más fácil hacer las cosas con un modelo que sin él.

  

Lo que estoy sopesando es lo que las etapas que faltan son para obtener el método thumbnailImage de proporcionarme algo que puede ser un objeto de datos adecuado para volver a la fuente de datos.

CGImageSourceCreateThumbnailAtIndex devuelve un CGImage. Es necesario devolver un tableView_objectValueForTableColumn_row_ NSImage. Por lo tanto, utilizar el método de initWithCGImage_size_ NSImage.

Si está ejecutando Leopard, ese método no está disponible, por lo que necesita para crear un NSBitmapImageRep con el CGImage lugar, y luego crear una NSImage del tamaño correcto y añadir que la representación a la misma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top