Graphics
От: vitz  
Дата: 17.12.03 18:41
Оценка:
Граждане поможите!!!

В WinGDI имеется такая функция int SetROP2(HDC hdc,int mode), которая устанавливает режим смешивания ForeColor и BackColor при рисовани.

Конечно можно импортировать эту функцию, но тогда прийдется все, что нужно смешивать, рисовать через GDI.

Как устновить режим смешивания в Graphic ???

22.12.03 15:08: Перенесено модератором из '.NET' — AVK
Re: Graphics
От: Kh_Oleg  
Дата: 18.12.03 09:39
Оценка:
Здравствуйте, vitz, Вы писали:

V>Граждане поможите!!!


V>В WinGDI имеется такая функция int SetROP2(HDC hdc,int mode), которая устанавливает режим смешивания ForeColor и BackColor при рисовани.


V>Конечно можно импортировать эту функцию, но тогда прийдется все, что нужно смешивать, рисовать через GDI.


V>Как устновить режим смешивания в Graphic ???

Graphics.SetCompositingMode(mode);
Graphics.SetCompositingQuality(quality);
Re[2]: Graphics
От: mihailik Украина  
Дата: 18.12.03 16:18
Оценка:
V>>Как устновить режим смешивания в Graphic ???

K_O>Graphics.SetCompositingMode(mode);

K_O>Graphics.SetCompositingQuality(quality);

Но! Режим XOR не поддерживается. Для него нужно всё-таки использовать старый GDI. По-любому
... << RSDN@Home 1.1.0 stable >>
Re[3]: Graphics
От: Kh_Oleg  
Дата: 18.12.03 16:58
Оценка: +1
Здравствуйте, mihailik, Вы писали:

V>>>Как устновить режим смешивания в Graphic ???


K_O>>Graphics.SetCompositingMode(mode);

K_O>>Graphics.SetCompositingQuality(quality);

M>Но! Режим XOR не поддерживается. Для него нужно всё-таки использовать старый GDI. По-любому

Microsoft сознательно убрала растровые операции из GDI+, потому что эти операции зависят от формата представления данных (в данном случае — цвета пикселей), да и применяются к пикселям. А на платформе .NET от этих понятий решили отойти.
Re[4]: Graphics
От: Andir Россия
Дата: 20.12.03 01:21
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>А на платформе .NET от этих понятий решили отойти.


GDI+ разрабатывался по-моему раньшее чем .Net ...

C Уважением, Andir!
<-- using(RSDN@Home 1.1.2 beta 2) {/* Работаем */} -->
Re[5]: Graphics
От: Kh_Oleg  
Дата: 22.12.03 10:13
Оценка:
Здравствуйте, Andir, Вы писали:

K_O>>А на платформе .NET от этих понятий решили отойти.

A>GDI+ разрабатывался по-моему раньшее чем .Net ...

GDI+ создавался для .NET. А поэтому там присутствуют те особенности, о которых сказано выше.
Re[6]: Graphics
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 22.12.03 11:28
Оценка: 13 (1) +1
Здравствуйте, Kh_Oleg, Вы писали:

K_O>GDI+ создавался для .NET. А поэтому там присутствуют те особенности, о которых сказано выше.


ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/gdicpp/gdi+/gdi+.htm

Purpose

Microsoft® Windows® GDI+ is a class-based application programming interface (API) for C/C++ programmers. It enables applications to use graphics and formatted text on both the video display and the printer. Applications based on the Microsoft Win32® API do not access graphics hardware directly. Instead, GDI+ interacts with device drivers on behalf of applications. GDI+ is also supported by Microsoft Win64™.

Where Applicable

GDI+ can be used in all Windows-based applications. GDI+ is new technology that is included in Windows XP and the Windows Server 2003. It is required as a redistributable for applications that run on the Microsoft Windows NT® 4.0 SP6, Windows 2000, Windows 98, and Windows Millennium Edition (Windows Me) operating systems.

Developer Audience

The GDI+ C++ class-based interface is designed for use by C/C++ programmers. Familiarity with the Windows graphical user interface and message-driven architecture is required.

Re[4]: Graphics
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 22.12.03 11:39
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Microsoft сознательно убрала растровые операции из GDI+, потому что эти операции зависят от формата представления данных (в данном случае — цвета пикселей), да и применяются к пикселям.


Кстати, они, кажется, уже раскаиваются в этом. Вон что добавили в System.Drawing.Graphics в 1.2:

public void CopyPixels(Graphics source, int xSource, int ySource, int xDest, int yDest,
    Size blockRegionSize, CopyPixelOperation rasterOp) {
...
    int res = SafeNativeMethods.BitBlt(hhdc, xDest, yDest, w, h,
        srcHdc != IntPtr.Zero ? new HandleRef(source, srcHdc) : hhdc, xSource, ySource, (int)rasterOp);
Re[7]: Graphics
От: Kh_Oleg  
Дата: 22.12.03 11:52
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Здравствуйте, Kh_Oleg, Вы писали:


K_O>>GDI+ создавался для .NET. А поэтому там присутствуют те особенности, о которых сказано выше.


_>ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/gdicpp/gdi+/gdi+.htm

_>

Purpose
Microsoft® Windows® GDI+ is a class-based application programming interface (API) for C/C++ programmers. It enables applications to use graphics and formatted text on both the video display and the printer. Applications based on the Microsoft Win32® API do not access graphics hardware directly. Instead, GDI+ interacts with device drivers on behalf of applications. GDI+ is also supported by Microsoft Win64™.
Where Applicable
GDI+ can be used in all Windows-based applications. GDI+ is new technology that is included in Windows XP and the Windows Server 2003. It is required as a redistributable for applications that run on the Microsoft Windows NT® 4.0 SP6, Windows 2000, Windows 98, and Windows Millennium Edition (Windows Me) operating systems.
Developer Audience
The GDI+ C++ class-based interface is designed for use by C/C++ programmers. Familiarity with the Windows graphical user interface and message-driven architecture is required.


Ага, "для С/С++ программистов"... и ни слова о .NET, к тому же.
Из этого, похоже, следовало было заключить, что .NET здесь ни при чем?

Тогда такой вопрос: почему столько лет все прекрасно обходились процедурным GDI, а вот с сейчас почему-то понадобилось создавать объектно-ориентированный интерфейс? И по времени это как-то совпало с выходом .NET

А дело в том, что при разработке .NET понадобилась графическая библиотека, аналог GDI для Win32. И вот, вместо того, чтобы запихивать процедурные вызовы GDI в классы-врапперы, в MS решили произвести рефакторинг сущесвующей графической подсистемы, убрать платформно-зависимые понятия и добавить новые возможности, для того, чтобы эту подсистему можно было использовать при программировании для .NET.
Re[8]: Graphics
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.12.03 12:06
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Тогда такой вопрос: почему столько лет все прекрасно обходились процедурным GDI, а вот с сейчас почему-то понадобилось создавать объектно-ориентированный интерфейс? И по времени это как-то совпало с выходом .NET


Не совпало, GDI+ вышел раньше.
... << RSDN@Home 1.1.2 beta 2 >>
AVK Blog
Re[8]: Graphics
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 22.12.03 12:10
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>А дело в том, что при разработке .NET понадобилась графическая библиотека, аналог GDI для Win32. И вот, вместо того, чтобы запихивать процедурные вызовы GDI в классы-врапперы, в MS решили произвести рефакторинг сущесвующей графической подсистемы, убрать платформно-зависимые понятия и добавить новые возможности, для того, чтобы эту подсистему можно было использовать при программировании для .NET.


System.Drawing.Graphics — классы-врапперы над процедурными вызовами GDI+:

public void DrawLine(Pen pen, int x1, int y1, int x2, int y2) {
    if(pen == null)
        throw new ArgumentNullException("pen");
    int status = SafeNativeMethods.GdipDrawLineI(new HandleRef(this, nativeGraphics),
        new HandleRef(pen, pen.nativePen), x1, y1, x2, y2);
    CheckErrorStatus(status);
}


Плюсовая обертка над GDI+ — такие же врапперы:

    Status DrawLine(IN const Pen* pen,
                    IN INT x1,
                    IN INT y1,
                    IN INT x2,
                    IN INT y2)
    {
        return SetStatus(DllExports::GdipDrawLineI(nativeGraphics,
                                                   pen->nativePen,
                                                   x1,
                                                   y1,
                                                   x2,
                                                   y2));
    }
Re[6]: Graphics
От: Andir Россия
Дата: 23.12.03 01:28
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>GDI+ создавался для .NET. А поэтому там присутствуют те особенности, о которых сказано выше.


Откуда дровишки то хоть расскажи ... а то я почему-то программил под GDI+, когда о .Net только слухи ходили.

С Уважением, Andir!
Re[7]: Graphics
От: Kh_Oleg  
Дата: 23.12.03 09:38
Оценка:
Здравствуйте, Andir, Вы писали:

K_O>>GDI+ создавался для .NET. А поэтому там присутствуют те особенности, о которых сказано выше.

A>Откуда дровишки то хоть расскажи ... а то я почему-то программил под GDI+, когда о .Net только слухи ходили.

Ниоткуда. Только собственные размышления, возможно неточные.

Я начал использовать GDI+ в 2002 году, поэтому за событиями, происходившими ранее следил не особо внимательно.
Судя по первым сообщениям на news.microsoft.com, GDI+ появился где-то году в 99 или 2000. А .NET разрабатывался с 1997 года.

Судя по всему, разработка .NET и GDI+ была начата примерно в одно время, а поскольку по своим масштабам эта библиотека значительно уступает .NET, потому и разработка была закончена раньше.

Насколько я понимаю, необходимость рефакторинга графической подсистемы Windows зрела очень давно. И GDI+ не был разработан исключительно для .NET, но с учетом .NET, с тем чтобы его можно было использовать в качестве графической библиотеки на новой платформе.
Re[5]: Graphics
От: Kh_Oleg  
Дата: 23.12.03 09:41
Оценка: +1
Здравствуйте, desperado_gmbh, Вы писали:

_>Здравствуйте, Kh_Oleg, Вы писали:


K_O>>Microsoft сознательно убрала растровые операции из GDI+, потому что эти операции зависят от формата представления данных (в данном случае — цвета пикселей), да и применяются к пикселям.


_>Кстати, они, кажется, уже раскаиваются в этом. Вон что добавили в System.Drawing.Graphics в 1.2:


public void CopyPixels(Graphics source, int xSource, int ySource, int xDest, int yDest,
    Size blockRegionSize, CopyPixelOperation rasterOp) {
...
    int res = SafeNativeMethods.BitBlt(hhdc, xDest, yDest, w, h,
        srcHdc != IntPtr.Zero ? new HandleRef(source, srcHdc) : hhdc, xSource, ySource, (int)rasterOp);


Да, весьма любопытно. На longhorn.msdn.microsoft.com эти методы уже присутствуют, однако они там пока никак не описаны. Интересно будет узнать, почему MS решила вернуть понятие пикселей на уровень класса Graphics. И как это будет работать для устройств, которые не оперируют пикселями.
Re[5]: Graphics
От: mihailik Украина  
Дата: 23.12.03 16:32
Оценка:
_>Кстати, они, кажется, уже раскаиваются в этом. Вон что добавили в System.Drawing.Graphics в 1.2:

_>
_>public void CopyPixels(Graphics source
_>


А ты не знаешь, оно у них где-нибудь используется, или это для каких-нибудь грязных хаков оставили?
... << RSDN@Home 1.1.0 stable >>
Re[6]: Graphics
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 24.12.03 08:41
Оценка:
Здравствуйте, mihailik, Вы писали:

_>>public void CopyPixels(Graphics source

M>А ты не знаешь, оно у них где-нибудь используется, или это для каких-нибудь грязных хаков оставили?

Еще нет. Но в winforms и так хватает BitBlt, PatBlt и прочих грязных хаков, заимпорченных напрямую. Вон тот же ControlPaint.CreateHBitmapColorMask.
Re[7]: Graphics
От: mihailik Украина  
Дата: 24.12.03 15:50
Оценка:
_>Еще нет.

Наверное, в каком-нибудь следующем MS Office и т.п. будут втихую использовать.

_>Но в winforms и так хватает BitBlt, PatBlt и прочих грязных хаков, заимпорченных напрямую. Вон тот же ControlPaint.CreateHBitmapColorMask.


ControlPaint это не грязный хак. Это вполне чистый и официальный хак.
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.