RubyCocoa: immagini di anteprima in NSTableView
-
19-09-2019 - |
Domanda
Sto cercando di visualizzare un NSTableView di:
| Foto | filename |
Ho creato il NSTableView in IB e delegata a una classe. Nella classe, ho aggirato un modello solo per ottenere un'implementazione POC e ha creato i metodi delegato di origine dei dati. Essi popolano le celle di testo più che bene. Tuttavia, ora sono nella fase in cui la prima cella deve contenere una piccola miniatura dell'immagine.
Quello che voglio fare (e sono sicuro che è stupido-semplice) è afferrare l'icona dell'immagine - ed è giusto presumere che tutti i file sono file JPEG e hanno le miniature incorporati - e mettere l'icona, scalata a 64x64 nella cella di tabella. C'è un sacco di codice su come generare le miniature, ma non vedo tanto che mi viene a codice funzionante. Ecco quello che ho:
# 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
Quello che sto alle prese con è ciò che i passaggi mancanti sono per ottenere il metodo thumbnailImage di fornire me con qualcosa che può essere un oggetto dati appropriati per tornare dalla sorgente dati.
Ogni aiuto è incredibilmente apprezzato.
A proposito: IknowIknowIknow, dovrei usare MacRuby ma non funziona sul mio 32 bit Core Duo. Purtroppo.
Soluzione
Ho aggirato un modello ...
Non farlo. In Cocoa, è più facile fare le cose con un modello che senza.
Quello che sto alle prese con è ciò che i passaggi mancanti sono per ottenere il metodo thumbnailImage di fornire me con qualcosa che può essere un oggetto dati appropriati per tornare dalla sorgente dati.
CGImageSourceCreateThumbnailAtIndex
restituisce un CGImage. È necessario tableView_objectValueForTableColumn_row_
per restituire un NSImage. Pertanto, utilizzare il metodo di initWithCGImage_size_
NSImage.
Se si sta eseguendo Leopard, che il metodo non è disponibile, quindi è necessario creare un NSBitmapImageRep con il CGImage invece, e quindi creare un NSImage del formato corretto e aggiungere che la rappresentazione ad esso.