Rubycocoa: الصور المصغرة في NSTableView
-
19-09-2019 - |
سؤال
أحاول عرض NSTableView من:
| thumbnail |. اسم الملف |
لقد أنشأت NSTableView في IB وفدها إلى فئة. في الفصل، تجاوزت نموذجا فقط للحصول على تطبيق POC وإنشاء أساليب مفوض مصدر البيانات. إنهم يملكون الخلايا النصية على ما يرام. ومع ذلك، الآن أنا في الخطوة حيث تحتاج الخلية الأولى إلى احتواء صورة مصغرة صغيرة للصورة.
ما أريد أن أفعله (وأنا متأكد من أنه بسيطة غبية) هو الاستيلاء على أيقونة الصورة - ومن العدل أن نفترض أن جميع الملفات هي JPEGS ولها مصغرة مضمنة - ووضع أيقونة، تم تحجيمها إلى 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، يجب أن أستخدم macrouby ولكنه لا يعمل على ثنائي النواة 32 بت. للأسف.
المحلول
تجاوزت نموذج ...
لا تفعل ذلك. في الكاكاو، من الأسهل القيام بالأشياء بنموذج من دون.
ما أقوم به هو ما هي الخطوات المفقودة للحصول على طريقة Thumbnailimage لتزويدني بشيء يمكن أن يكون كائن بيانات مناسب للعودة من مصدر البيانات.
CGImageSourceCreateThumbnailAtIndex
إرجاع cgimage. انت تحتاج tableView_objectValueForTableColumn_row_
لإرجاع nsimage. لذلك، استخدم NSIMAGE initWithCGImage_size_
طريقة.
إذا كنت تقوم بتشغيل الفهد، فلا تتوفر هذه الطريقة، لذلك ستحتاج إلى إنشاء NSBITMAPIMAGEREP مع CGIMAGE بدلا من ذلك، ثم قم بإنشاء NSIMAGE من الحجم الصحيح وإضافة هذا التمثيل إليه.