Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Авторы пошли еще дальше и включили абстрактный интерфейс рисования, близкий по внешнему интерфейсу к Gdk. В рамках этого интерфейса присутствует, например, Xwt.Drawing.Color, отличный и от System.Drawing.Color, и от Gdk.Color.Вот чем им System.Drawing не угодил, работает же везде (Cairo в качестве бакэнда у libgdiplus). Так и приходится колдовать с созданием Bitmap-ов, указывающих на один физический участок памяти.
Цвета перепутаныЭто как?
аналога bitblt не было вообщеВам надо картинки рисовать или дёргать куски с одного Graphics на другой? Первое делается через graphics.DrawImage, второе в общем случае невозможно, потому что Graphics может быть не только поверх битмапа. Если хотите двойную буферизацию, создавайте Graphics поверх Bitmap и уже этот битмап рисуйте через DrawImage.
Таки надо было дёргать куски Graphics. Делал велоконтрол для отображения древовидной структуры. Нужно было при открытии/закрытии структуры сдвигать часть изображения. Пришлось дёргать bitblt (вот в эту трубу, похоже, вся переносимость на Mono и улетает)Вы его откуда брали, из текущего состояния экрана? Это не очень хорошая идея как бы. Если не брать с экрана, то никаких проблем с реализацией двойной буферизации со своим Graphics поверх битмапа я не вижу. В целом же решение типа «сдвигать часть изображения» выглядит как костыль.
высокоуровневая абстракцияПотому что это абстракция не над картинкой, это абстракция над «штукой, на которой можно рисовать», нигде не сказано, что её при этом можно использовать в качестве источника. Хотите нечто, на чём можно рисовать и использовать в качестве источника? Создайте источник и прикрепите к нему контекст рисования, это логично и правильно с архитектурной точки зрения.
А вдруг я захочу нарисовать тоже самое именно на контексте принтера?То же самое в контексте принтера вы не можете нарисовать без своей буферизации, потому что ваш код хочет читать данные с контекста рисования, а с принтера нельзя читать.
Если я верно помню, с контекста Graphics можно читать всегда.BitBlt обычно не в может прочитать с hDC принтера. Более того, она в ряде случаев туда и писать оказывается не в состоянии.
В GDIPlus нельзя элементарно нарисовать точкуСтрого говоря отсутствие PSet призвано сократить количество говнокода, таким образом работающего с битмапом попиксельно. Если очень хочется — сделайте себе extension-метод, который заполняет прямоугольник единичного размера.
нельзя стереть участок картинки, совсем
g.CompositingMode = CompositingMode.SourceCopy;
g.FillRectangle(Brushes.Transparent,x,y,width,height);
сигналы+слоты QtЗачем они вам в языке, поддерживающем события?
типа MVVM, MVCModel-View-Presenter и Model-View-Presenter-ViewModel вполне успешно применимы на тех же Windows Forms, DataBinginds у контролов вполне хватает для привязки к свойствам модельки, поддерживающей INotifyPropertyChanged. Зачем вам для этого дополнительная поддержка со стороны тулкита, мне не особо ясно.
Абстрактный UI. Новый фреймворк для C#, который назвали XWT