2014-07-13 25 views
5

Görüntüleri işleyen bir Desktop Vista + uygulaması için ve aşağıdaki teknolojilerin (veya kombinasyonların) hangisi olacağını C# ile yazılır. System.Wrawing (GDI +) vs System.Windows.Media vs Direct2D + DirectWrite + WIC Görüntü İşleme her türlü ilkel çizim, doldurma, metin, rotasyon, çeviri, ölçekleme ile çalışma, doğrudan piksel verileri ile çalışan Genel olarak, yukarıdaki teknolojiler, bitmap'leri işlemek için ne kadar iyi çalışır?System.Drawing (GDI +) vs System.Windows.Media (WPF) vs Direct2D + DirectWrite + WIC

Ayrıca, herhangi biri, yan yana farklı özellikler ve eşdeğerleri listeleyen iyi ve ayrıntılı bir karşılaştırma tablosunun yanı sıra nelerin desteklenmediğini bilirse Bu harika olurdu, örneğin, WP'de ColorMatrix denkleri var mı F ve Direct2D? SharpDX'in Direct2D uygulamasını inceledikten sonra, Microsoft'un bunu GDI + 'ya karşı tam bir alternatif olarak konumlandırmasına rağmen, DirectDD'de tüm GDI +' nın işlevselliğini bulamadığım izlenimine kapılmıştım.

Ayrıca, 2014 yılı göz önünde bulundurulduğunda, en azından görüntü manipulasyonu için (WPF'nin çok daha iyi bir seçim olduğu şeylerin UI kısmı olmasa bile) GDI +'nın gelecek 5 için iyi olacağını söyleyebilir miydiniz? yıl? Ya da her birinin en iyi şekilde çalıştığı 3 teknolojiyi kullanmayı düşünmeli miyim?

Teşekkür ederiz.

+0

GDI + 'da hangi özellikler Direct2D'de eksik? –

+0

GDI + görüntü işleme değil, sadece UI (görüntüleri değil) oluşturmak için destekleyen Win32 GDI etrafında bir sarıcı var. Böylece özellikler oldukça sınırlıdır. Bence .NET için bazı imaj kütüphanelerini aramalısınız, bu tür kütüphanelerle, bazı karmaşık Dönüşümleri gerçekleştirme gibi istediğiniz işlemleri (görüntü üzerinde) yapabilirsiniz. WPF'deki grafikler, Winform'lardan çok daha iyidir. Resim üzerinde odaklanmaktan ziyade kullanıcı arayüzüdür. –

+0

@WaltRitscher Örneğin: HatchBrush, ColorMatrix, PathGradientBrush birkaç isim. –

cevap

1

Şu anda görsel yoğun C#/WPF projesinde çalışıyorum ve Python'da görüntü işleme ile bazı hobbistlerin çalışmasını yaptım. Yani System.Windows.Media

  • Kullanım WPF mümkün olduğunca ad alanlarını: amaçlanan kullanımı ile

    , ben şu yaklaşımı kullanmak. Bildiğim kadarıyla, System.Drawing ve GDI + genel olarak yönetilmeyen kaynakları kullanır ve bu istenmeyen, önlenebilir sorunlar yaratabilir;
  • MVVM mimarisini olabildiğince sıkı kullanın. Yani, yalnızca bilgileri görüntülemek için kullanılan bir Görünüm katmanına ve iş mantığı içeren Model ve ViewModel katmanlarına sahipsiniz. Bazı görsellerin ViewModel katmanına ait olmadığını söylese de, uygulamanız görüntülerin manipülasyonuyla uğraşırsa, o zaman İş Mantığınız Tanıma göre görünüm (bunun anlaşılması uzun zaman aldı).
  • Şüphe duyulduğunda, çok boyutlu diziler kullanarak Görüntü İşleme işlemini gerçekleştirin (Model/ViewModel'de) ve bu dizileri Görünüm'e (bir ValueConverter kullanarak DataBinding aracılığıyla) bağlayın.

Bu şekilde, örneğin, bir Data mülk (veya Value veya PixelArray veya Raster, her neyse) bir double[height,width,depth] olmak, bir katman temsil etmek bir ImageLayerViewModel sınıfı olabilir.

Biraz daha ayrıntılı çalışabilirim, ancak sorunuzu cevaplamak için doğru yolda olduğundan emin değilim, bu yüzden isterseniz yorum yazın.

+0

İlanı gönderdiğiniz için teşekkür ederiz! Ancak, UI'den ziyade görüntü işleme boyutuyla daha çok ilgileniyorum. UI için muhtemelen WinForms'dan WPF'ye geçeceğim. Ancak bu, görüntü işleme bölümünü gerçekten etkilemez, çünkü ideal olarak UI'den bağımsız olmalı ve muhtemelen bir Hizmet bağlamında (ne GDI + ne de WPF'nin yapamadığı) bile çalıştırılmalıdır. –

+0

Öyleyse öneri, 'System.Windows.Media [.Imaging] 'ad alanını TEMSİLCİ görüntü ve görüntü içeriğine kullanmama açısından daha da fazla. ViewModel özelliklerinin herhangi bir tipte olması sizin için daha uygun olabilirdi (numbercrunching için en iyi seçim olması için ikililerin dizilerini buluyorum) ve ad alanı sadece görsel olarak görsel olarak, veri bağlama ve değer dönüştürücüler aracılığıyla kullanın. Yeterli bilgiye sahipseniz, .Net görüntüleme ad alanlarının sağladığı sınırlı yöntemlere bağlı olmak yerine, görüntü işleme algoritmalarını kendiniz uygulayabilirsiniz. Bu yardımcı olur umarım! – heltonbiker