PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → WX - Classe GDI+ (Graphics Device Interface / Interface gráfica de dispositivo)
WX - Classe GDI+ (Graphics Device Interface / Interface gráfica de dispositivo)
Débuté par adrianoboller, 17 mar. 2016 18:14 - 37 réponses
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 18:14
Interface gráfica de dispositivo

O Graphics Device Interface (GDI) é um Microsoft Windows interface de programação de aplicação de componentes e sistema operacional principal responsável por representar objetos gráficos e transmiti-las para dispositivos de saída , tais como monitores e impressoras .

GDI é responsável por tarefas como desenhar linhas e curvas, tornando fontes e manipulação paletas . Não é diretamente responsável por janelas, menus, etc desenho .; essa tarefa é reservada para o usuário do subsistema, que reside no user32.dll e é construído em cima de GDI. Outros sistemas têm componentes que são semelhantes aos GDI, por exemplo, do Mac OS X Quartz e X Window System 's Xlib / XCB.

Vantagens mais significativas do GDI sobre métodos mais diretos de acesso ao hardware são, talvez, as suas capacidades de escala e sua representação abstrata de dispositivos de destino. Usando GDI, é muito fácil de extrair em vários dispositivos, tais como uma tela e uma impressora, e esperar a reprodução adequada em cada caso. Esta capacidade está no centro da maioria que você vê é o que você começa aplicações para Microsoft Windows.

Os jogos simples que não exigem rápida renderização de gráficos pode usar GDI. No entanto, GDI é relativamente difícil de usar para a animação avançado, e não tem uma noção para sincronizar com individuais quadros de vídeo na placa de vídeo , carece de hardware para 3D, etc. Os jogos modernos costumam usar DirectX ou OpenGL em vez disso, que permitem que programadores explorar os recursos de hardware moderno.

Segue abaixo a Classe GDI Wx:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 18:32
Adjustable Arrow Cap

Inicializa uma nova instância do AdjustableArrowCap classe com largura especificada, altura e propriedade de preenchimento. Se uma tampa de extremidade da seta é preenchida depende do argumento passado para o isFilled parâmetro.

https://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.adjustablearrowcap%28v=vs.110%29.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms533967%28v=vs.85%29.aspx

AdjustableArrowCap Construtor (Single, Single, Boolean)





SEGUE CÓDIGO:

AdjustableArrowCap est une Classe
hérite de CustomLineCap
FIN



Procedure Constructeur(height est un réel sur 4 = 0, width est un réel sur 4 = 0, isFilled est un booléen = Vrai)

nPtr est un entier système

// Crée l'objet
GdipCreateAdjustableArrowCap(height, width, isFilled, &nPtr)

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure Height()

rHeight est un réel sur 4

// Lecture de la propriété
GdipGetAdjustableArrowCapHeight(Pointer, rHeight)

RENVOYER rHeight



Procedure Height(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetAdjustableArrowCapHeight(Pointer, rValeur)



Procedure Width()

rWidth est un réel sur 4

// Lecture de la propriété
GdipGetAdjustableArrowCapWidth(Pointer, rWidth)

RENVOYER rWidth



Procedure Width(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetAdjustableArrowCapWidth(Pointer, rValeur)



Procedure Filled()

bFilled est un booléen

// Lecture de la propriété
GdipGetAdjustableArrowCapFillState(Pointer, &bFilled)

RENVOYER bFilled



Procedure Filled(bValeur est un booléen)

// Ecriture de la propriété
GdipSetAdjustableArrowCapFillState(Pointer, bValeur)



Procedure MiddleInset()

rMiddleInset est un réel sur 4

// Lecture de la propriété
GdipGetAdjustableArrowCapMiddleInset(Pointer, &rMiddleInset)

RENVOYER rMiddleInset



Procedure MiddleInset(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetAdjustableArrowCapMiddleInset(Pointer, rValeur)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un AdjustableArrowCap dynamique = allouer un AdjustableArrowCap

// Clone l'objet
GdipCloneCustomLineCap(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 19:30
Bitmap

Um bitmap é uma série de pontos (bits) dispostos como um mapa para que, quando colocados juntos, eles produzem uma imagem que pode ser escrito, copiado de, re-arranjadas, mudou, manipuladas ou armazenadas como aa arquivo de computador. Os mapas de bits são usados ​​para exibir imagens em aplicações gráficas, processadores de texto, arquivos de banco de dados, ou apresentações de audiência. Para exibir seu produto em um dispositivo, como um monitor ou uma impressora, um bitmap mantém algumas propriedades e segue um conjunto de regras.

Existem vários tipos de mapas de bits, com base no número de cores que o mapa de bits pode mostrar. Primeiro de tudo, um mapa de bits pode ser monocromática, caso em que cada pixel corresponde a um bit. Um mapa de bits, também pode ser colorido. O número de cores que podem exibir um mapa de bits é igual a dois elevado à série de poços / pixel. Por exemplo, um bitmap simples usa apenas 4 pontos / pixel ou 4 bpp pode lidar com apenas 2 4 = 16 cores. Um bitmap mais avançada que requer 8 bpp pode lidar com 2 8 = 256 cores. Os mapas de bits são divididos em duas categorias que controlam a sua disponibilidade para exibir em um dispositivo.

Um bitmap independente de dispositivo (DIB) é um bitmap que é projetado para ser carregado em qualquer aplicativo ou exibição em qualquer dispositivo e produzir o mesmo efeito visual. Para tornar isso possível, tal bitmap contém uma tabela de cores que descreve como as cores do bitmap deve ser usado em pixels quando exibi-lo. As características de um DIB são definidos pela estrutura BITMAPINFO.

Um mapa de bits dependentes do dispositivo (DDB) é criado um mapa de bits da estrutura de bitmap usando as dimensões do mapa de bits.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534420%28v=vs.85%29.aspx

http://www.codeproject.com/Articles/356/Bitmap-Basics-A-GDI-tutorial

https://www-user.tu-chemnitz.de/~heha/petzold/ch14e.htm

https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/Graphics-Win32-GDI-Bitmap.html

http://www.winprog.org/tutorial/bitmaps.html

http://www.functionx.com/win32/Lesson14.htm

Imagem para você se motivar e treinar:





Classe Bitmap

Bitmap est une Classe
hérite de Image
FIN



Procedure Constructeur(nWidth est un entier = 0, nHeight est un entier = 0, format est un entier = PixelFormat32bppARGB)

nPtr est un entier système

SI MesParamètres..NbReçus > 0 ALORS

// Crée l'objet
GdipCreateBitmapFromScan0(nWidth, nHeight, 0, format, Null, &nPtr)
FIN

// Appel du constructeur ancêtre
Image.Constructeur(nPtr)



Procedure Destructeur()



Procedure Histogram()

stHistogram est un HistogramData
nCount est un entier

// Lecture de la propriété (1)
GdipBitmapGetHistogramSize(Pointer, &nCount)

Dimension(stHistogram.channel0, nCount)
Dimension(stHistogram.channel1, nCount)
Dimension(stHistogram.channel2, nCount)
Dimension(stHistogram.channel0, nCount)

// Lecture de la propriété (2)
GdipBitmapGetHistogram(Pointer, HistogramFormatARGB, nCount, &stHistogram.channel0, &stHistogram.channel1, &stHistogram.channel2, &stHistogram.channel3)

RENVOYER stHistogram



Procedure PRIVÉE Histogram(v <utile>)



// Résumé : Clone l'objet
//PROCEDURE virtuelle Clone(rect = null, format est un entier = PixelFormatDontCare)
//
// nPtr est un entier systeme
// pclObjet est un bitmap dynamique = allouer un Bitmap
//
// si MesParamètres..NbReçus = 0 alors
//
// // Clone l'objet
// GdipCloneImage(Pointer, &nPtr)
// sinon
//
// // Si on utilise RECTF à la place de RECT
// si typevar(rect.X) = wlRéel_4 ALORS
// GdipCloneBitmapArea(rect.x, rect.y, rect.Width, rect.Height, format, Pointer, &nPtr)
// sinon
// GdipCloneBitmapAreaI(rect.x, rect.y, rect.Width, rect.Height, format, pointer, &nptr)
// FIN
// fin
//
// // Allocation
// pclObjet.Pointer = nPtr
//
//RENVOYER pclObjet



// Résumé : FromImage
Procedure GLOBALE FromImage(pclimage est un Image dynamique)

pclObjet est un Bitmap dynamique = allouer un Bitmap(pclimage.Width, pclimage.Height, pclimage.PixelFormat)
// g est un graphics = graphics.FromImage(pclObjet)

// Crée l'objet
// g.DrawImage(pclimage, 0, 0, pclimage.width, pclimage.height)
// g.Dispose()

RENVOYER pclObjet



// Résumé : FromFile
Procedure GLOBALE fromFile(filename est une chaîne, bICM est un booléen = Faux)

nPtr est un entier système
pclObjet est un Bitmap dynamique = allouer un Bitmap
u est une chaîne UNICODE = filename


SI bICM ALORS

// Crée l'objet
GdipCreateBitmapFromFileICM(&u, &nPtr)
SINON

// Crée l'objet
GdipCreateBitmapFromFile(&u, &nPtr)
FIN

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromFile
Procedure GLOBALE FromMemory(buffer est un Buffer, bICM est un booléen = Faux)

nPtr est un entier système
pclObjet est un Bitmap dynamique = allouer un Bitmap
nPtrStream est un entier système
nPtrGlobal est un entier système

// Crée un pointeur mémoire
nPtrGlobal = API("kernel32", "GlobalAlloc", 0x0040, Taille(buffer))
Transfert(nPtrGlobal, &buffer, Taille(buffer))

// Crée un IStream sur le pointeur mémoire
API("ole32", "CreateStreamOnHGlobal", nPtrGlobal, Vrai, &nPtrStream)

// Crée l'objet
SI bICM ALORS
GdipCreateBitmapFromStreamICM(nPtrStream, &nPtr)
SINON
GdipCreateBitmapFromStream(nPtrStream, &nPtr)
FIN

// Libère le IStream
AppelInterface(nPtrStream, 2)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromScan0
Procedure GLOBALE FromScan0(nWidth est un entier, nHeight est un entier, stride est un entier, format est un entier, buffer est un entier système)

nPtr est un entier système
pclObjet est un Bitmap dynamique = allouer un Bitmap

// Crée l'objet
GdipCreateBitmapFromScan0(nWidth, nHeight, stride, format, buffer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GetPixel
Procedure GetPixel(x est un entier, y est un entier)

argb est un entier
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipBitmapGetPixel(Pointer, x, y, &argb)

// Allocation
pclColor.Value = argb

RENVOYER pclColor



// Résumé : SetPixel
Procedure SetPixel(x est un entier, y est un entier, Color est un Color)

// Ecriture de la propriété
GdipBitmapSetPixel(Pointer, x, y, Color.Value)



// Résumé : FromHicon
Procedure GLOBALE FromHicon(hicon est un entier système)

nPtr est un entier système
pclObjet est un Bitmap dynamique = allouer un Bitmap

// Crée l'objet
GdipCreateBitmapFromHICON(hicon, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromResource
Procedure GLOBALE FromResource(hinstance est un entier système, bitmapName est une chaîne)

nPtr est un entier système
u est une chaîne UNICODE = bitmapName
pclObjet est un Bitmap dynamique = allouer un Bitmap

// Crée l'objet
GdipCreateBitmapFromResource(hinstance, &bitmapName, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GetHicon
Procedure GetHicon()

nHIco est un entier système

// Lecture de la propriété
GdipCreateHICONFromBitmap(Pointer, &nHIco)

RENVOYER nHIco



// Résumé : LockBits
Procedure LockBits(rect est un RECT, flags est un entier, format est un entier)

st est un BitmapData
GdipBitmapLockBits(Pointer, &rect, flags, format, &st)

RENVOYER st



// Résumé : MakeTransparent
Procedure MakeTransparent(transpColor est un Color dynamique = GetPixel(0, 0))

pclBmp est un Bitmap dynamique = allouer un Bitmap(Width, Height, PixelFormat32bppARGB)
g est un Graphics dynamique = Graphics.FromImage(pclBmp)
dstRect est un RECT = [0, 0, Width, Height]
imgAtt est un ImageAttributes dynamique = allouer un ImageAttributes

// Couleur
imgAtt.SetColorKey(transpColor, transpColor)
g.DrawImage(objet, 0, 0, Width, Height, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, UnitPixel, imgAtt)

// Echange les pointeurs
Pointer <=> pclBmp.Pointer

g.Dispose()
pclBmp.Dispose()
imgAtt.Dispose()



// Résumé : SetResolution
Procedure SetResolution(x est un réel sur 4, y est un réel sur 4)

// Ecriture de la propriété
GdipBitmapSetResolution(Pointer, x, y)



// Résumé : UnlockBits
Procedure UnlockBits(bdata est un BitmapData)

GdipBitmapUnlockBits(Pointer, &bdata)



// Résumé : ApplyEffect
Procedure ApplyEffect(Effect est un Effect dynamique, RECT est un RECT dynamique = Null)

GdipBitmapApplyEffect(Pointer, Effect.Pointer, (RECT = Null ? Null SINON RECT), Faux, Null, Null)



// Résumé : FromFile
Procedure GLOBALE fromURL(sURL est une chaîne, bICM est un booléen = Faux)

nPtr est un entier système
pclObjet est un Bitmap dynamique = allouer un Bitmap
nPtrStream est un entier système
nPtrGlobal est un entier système
buffer est un Buffer

// Exécution de la requête
HTTPRequête(sURL)
buffer = HTTPDonneRésultat(httpRésultat)

// Crée un pointeur mémoire
nPtrGlobal = API("kernel32", "GlobalAlloc", 0x0040, Taille(buffer))
Transfert(nPtrGlobal, &buffer, Taille(buffer))

// Crée un IStream sur le pointeur mémoire
API("ole32", "CreateStreamOnHGlobal", nPtrGlobal, Vrai, &nPtrStream)

// Crée l'objet
SI bICM ALORS
GdipCreateBitmapFromStreamICM(nPtrStream, &nPtr)
SINON
GdipCreateBitmapFromStream(nPtrStream, &nPtr)
FIN

// Libère le IStream
AppelInterface(nPtrStream, 2)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 20:22
Prezados,

Outros recursos do BITMAP a serem feitos para Wx:

Graphics.Win32.GDI.Bitmap
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/Graphics-Win32-GDI-Bitmap.html

type RasterOp3 = Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Types.html…

type RasterOp4 = Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Types.html…

sRCCOPY :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sRCPAINT :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sRCAND :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sRCINVERT :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sRCERASE :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

nOTSRCCOPY :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

nOTSRCERASE :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

mERGECOPY :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

mERGEPAINT :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

pATCOPY :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

pATPAINT :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

pATINVERT :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

dSTINVERT :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

bLACKNESS :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

wHITENESS :: RasterOp3
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

mAKEROP4 :: RasterOp3 -> RasterOp3 -> RasterOp4
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Types.html…

type BITMAP = (INT, INT, INT, INT, WORD, WORD, LPVOID)
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type LPBITMAP = Ptr BITMAP
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

setBITMAP :: LPBITMAP -> BITMAP -> IO ()
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

deleteBitmap :: HBITMAP -> IO ()
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

createCompatibleBitmap :: HDC -> Int32 -> Int32 -> IO HBITMAP
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

createBitmap :: INT -> INT -> UINT -> UINT -> Maybe LPVOID -> IO HBITMAP
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

createBitmapIndirect :: LPBITMAP -> IO HBITMAP
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

createDIBPatternBrushPt :: LPVOID -> ColorFormat -> IO HBRUSH
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

getBitmapDimensionEx :: HBITMAP -> IO SIZE
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

setBitmapDimensionEx :: HBITMAP -> SIZE -> IO SIZE
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

getBitmapInfo :: HBITMAP -> IO BITMAP
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type BitmapCompression = DWORD
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

bI_RGB :: BitmapCompression
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

bI_RLE8 :: BitmapCompression
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

bI_RLE4 :: BitmapCompression
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

bI_BITFIELDS :: BitmapCompression
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type ColorFormat = DWORD
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

dIB_PAL_COLORS :: ColorFormat
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

dIB_RGB_COLORS :: ColorFormat
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type LPBITMAPINFO = Ptr ()
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type BITMAPINFOHEADER = (DWORD, LONG, LONG, WORD, WORD, BitmapCompression, DWORD, LONG, LONG, Maybe DWORD, Maybe DWORD)
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type LPBITMAPINFOHEADER = Ptr BITMAPINFOHEADER
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

getBITMAPINFOHEADER_ :: LPBITMAPINFOHEADER -> IO BITMAPINFOHEADER
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…_

type BITMAPFILEHEADER = (WORD, DWORD, WORD, WORD, DWORD)
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

type LPBITMAPFILEHEADER = Ptr BITMAPFILEHEADER
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

getBITMAPFILEHEADER :: LPBITMAPFILEHEADER -> IO BITMAPFILEHEADER
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sizeofBITMAP :: Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sizeofBITMAPINFO :: Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sizeofBITMAPINFOHEADER :: Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sizeofBITMAPFILEHEADER :: Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

sizeofLPBITMAPFILEHEADER :: Word32
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

createBMPFile :: String -> HBITMAP -> HDC -> IO ()
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

cBM_INIT :: DWORD
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

getDIBits :: HDC -> HBITMAP -> INT -> INT -> Maybe LPVOID -> LPBITMAPINFO -> ColorFormat -> IO INT
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

setDIBits :: HDC -> HBITMAP -> INT -> INT -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO INT
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

createDIBitmap :: HDC -> LPBITMAPINFOHEADER -> DWORD -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO HBITMAP
https://downloads.haskell.org/~ghc/7.0.1/docs/html/libraries/Win32-2.2.0.1/src/Graphics-Win32-GDI-Bitmap.html…

Seria interessante fazer esse complemento na classe Bitmap exposta acima.

Bons estudos

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 20:24
{-# LINE 1 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
-----------------------------------------------------------------------------
{-# LINE 2 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
-- |
-- Module : Graphics.Win32.GDI.Bitmap
-- Copyright : (c) Alastair Reid, 1997-2003
-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : Esa Ilari Vuokko <ei@vuokko.info>
-- Stability : provisional
-- Portability : portable
--
-- A collection of FFI declarations for interfacing with Win32.
--
-----------------------------------------------------------------------------

module Graphics.Win32.GDI.Bitmap(
RasterOp3,
RasterOp4,
sRCCOPY,
sRCPAINT,
sRCAND,
sRCINVERT,
sRCERASE,
nOTSRCCOPY,
nOTSRCERASE,
mERGECOPY,
mERGEPAINT,
pATCOPY,
pATPAINT,
pATINVERT,
dSTINVERT,
bLACKNESS,
wHITENESS,

mAKEROP4,

BITMAP,
LPBITMAP,
setBITMAP,
deleteBitmap,
createCompatibleBitmap,
createBitmap,
createBitmapIndirect,
createDIBPatternBrushPt,
getBitmapDimensionEx,
setBitmapDimensionEx,
getBitmapInfo,

BitmapCompression,
bI_RGB,
bI_RLE8,
bI_RLE4,
bI_BITFIELDS,

ColorFormat,
dIB_PAL_COLORS,
dIB_RGB_COLORS,

LPBITMAPINFO,
BITMAPINFOHEADER,
LPBITMAPINFOHEADER,
getBITMAPINFOHEADER_,

BITMAPFILEHEADER,
LPBITMAPFILEHEADER,
getBITMAPFILEHEADER,

sizeofBITMAP,
sizeofBITMAPINFO,
sizeofBITMAPINFOHEADER,
sizeofBITMAPFILEHEADER,
sizeofLPBITMAPFILEHEADER,

createBMPFile,
cBM_INIT,
getDIBits,
setDIBits,
createDIBitmap

) WHERE

import System.Win32.Types
import Graphics.Win32.GDI.Types

import Control.Monad (liftM)
import Foreign
import Foreign.C


{-# LINE 89 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

{-# LINE 90 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

----------------------------------------------------------------
-- Resources
----------------------------------------------------------------

-- Yoiks - name clash
-- %dis bitmap x = ptr ({LPTSTR} x)
--
-- type Bitmap = LPCTSTR
--
-- intToBitmap :: Int -> Bitmap
-- intToBitmap i = makeIntResource (toWord i)
--
-- %fun LoadBitmap :: MbHINSTANCE -> Bitmap -> IO HBITMAP
-- %fail { res1 == 0 } { ErrorString("LoadBitmap") }
--
-- %const Bitmap
-- % [ OBM_CLOSE = { MAKEINTRESOURCE(OBM_CLOSE) }
-- % , OBM_UPARROW = { MAKEINTRESOURCE(OBM_UPARROW) }
-- % , OBM_DNARROW = { MAKEINTRESOURCE(OBM_DNARROW) }
-- % , OBM_RGARROW = { MAKEINTRESOURCE(OBM_RGARROW) }
-- % , OBM_LFARROW = { MAKEINTRESOURCE(OBM_LFARROW) }
-- % , OBM_REDUCE = { MAKEINTRESOURCE(OBM_REDUCE) }
-- % , OBM_ZOOM = { MAKEINTRESOURCE(OBM_ZOOM) }
-- % , OBM_RESTORE = { MAKEINTRESOURCE(OBM_RESTORE) }
-- % , OBM_REDUCED = { MAKEINTRESOURCE(OBM_REDUCED) }
-- % , OBM_ZOOMD = { MAKEINTRESOURCE(OBM_ZOOMD) }
-- % , OBM_RESTORED = { MAKEINTRESOURCE(OBM_RESTORED) }
-- % , OBM_UPARROWD = { MAKEINTRESOURCE(OBM_UPARROWD) }
-- % , OBM_DNARROWD = { MAKEINTRESOURCE(OBM_DNARROWD) }
-- % , OBM_RGARROWD = { MAKEINTRESOURCE(OBM_RGARROWD) }
-- % , OBM_LFARROWD = { MAKEINTRESOURCE(OBM_LFARROWD) }
-- % , OBM_MNARROW = { MAKEINTRESOURCE(OBM_MNARROW) }
-- % , OBM_COMBO = { MAKEINTRESOURCE(OBM_COMBO) }
-- % , OBM_UPARROWI = { MAKEINTRESOURCE(OBM_UPARROWI) }
-- % , OBM_DNARROWI = { MAKEINTRESOURCE(OBM_DNARROWI) }
-- % , OBM_RGARROWI = { MAKEINTRESOURCE(OBM_RGARROWI) }
-- % , OBM_LFARROWI = { MAKEINTRESOURCE(OBM_LFARROWI) }
-- % , OBM_OLD_CLOSE = { MAKEINTRESOURCE(OBM_OLD_CLOSE) }
-- % , OBM_SIZE = { MAKEINTRESOURCE(OBM_SIZE) }
-- % , OBM_OLD_UPARROW = { MAKEINTRESOURCE(OBM_OLD_UPARROW) }
-- % , OBM_OLD_DNARROW = { MAKEINTRESOURCE(OBM_OLD_DNARROW) }
-- % , OBM_OLD_RGARROW = { MAKEINTRESOURCE(OBM_OLD_RGARROW) }
-- % , OBM_OLD_LFARROW = { MAKEINTRESOURCE(OBM_OLD_LFARROW) }
-- % , OBM_BTSIZE = { MAKEINTRESOURCE(OBM_BTSIZE) }
-- % , OBM_CHECK = { MAKEINTRESOURCE(OBM_CHECK) }
-- % , OBM_CHECKBOXES = { MAKEINTRESOURCE(OBM_CHECKBOXES) }
-- % , OBM_BTNCORNERS = { MAKEINTRESOURCE(OBM_BTNCORNERS) }
-- % , OBM_OLD_REDUCE = { MAKEINTRESOURCE(OBM_OLD_REDUCE) }
-- % , OBM_OLD_ZOOM = { MAKEINTRESOURCE(OBM_OLD_ZOOM) }
-- % , OBM_OLD_RESTORE = { MAKEINTRESOURCE(OBM_OLD_RESTORE) }
-- % ]

----------------------------------------------------------------
-- Raster Ops
----------------------------------------------------------------

sRCCOPY :: RasterOp3
sRCCOPY = 13369376
sRCPAINT :: RasterOp3
sRCPAINT = 15597702
sRCAND :: RasterOp3
sRCAND = 8913094
sRCINVERT :: RasterOp3
sRCINVERT = 6684742
sRCERASE :: RasterOp3
sRCERASE = 4457256
nOTSRCCOPY :: RasterOp3
nOTSRCCOPY = 3342344
nOTSRCERASE :: RasterOp3
nOTSRCERASE = 1114278
mERGECOPY :: RasterOp3
mERGECOPY = 12583114
mERGEPAINT :: RasterOp3
mERGEPAINT = 12255782
pATCOPY :: RasterOp3
pATCOPY = 15728673
pATPAINT :: RasterOp3
pATPAINT = 16452105
pATINVERT :: RasterOp3
pATINVERT = 5898313
dSTINVERT :: RasterOp3
dSTINVERT = 5570569
bLACKNESS :: RasterOp3
bLACKNESS = 66
wHITENESS :: RasterOp3
wHITENESS = 16711778

{-# LINE 164 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

----------------------------------------------------------------
-- BITMAP
----------------------------------------------------------------

type BITMAP =
( int -- bmType
, int -- bmWidth
, int -- bmHeight
, int -- bmWidthBytes
, WORD -- bmPlanes
, WORD -- bmBitsPixel
, LPVOID -- bmBits
)

peekBITMAP :: Ptr BITMAP -> IO BITMAP
peekBITMAP p = DO
ty <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 182 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
width <- (\hsc_ptr -> peekByteOff hsc_ptr 4) p
{-# LINE 183 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
height <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 184 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
wbytes <- (\hsc_ptr -> peekByteOff hsc_ptr 12) p
{-# LINE 185 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
planes <- (\hsc_ptr -> peekByteOff hsc_ptr 16) p
{-# LINE 186 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
pixel <- (\hsc_ptr -> peekByteOff hsc_ptr 18) p
{-# LINE 187 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
bits <- (\hsc_ptr -> peekByteOff hsc_ptr 20) p
{-# LINE 188 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
RETURN (ty, width, height, wbytes, planes, pixel, bits)

pokeBITMAP :: Ptr BITMAP -> BITMAP -> IO ()
pokeBITMAP p (ty, width, height, wbytes, planes, pixel, bits) = DO
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p ty
{-# LINE 193 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 4) p width
{-# LINE 194 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p height
{-# LINE 195 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 12) p wbytes
{-# LINE 196 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) p planes
{-# LINE 197 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 18) p pixel
{-# LINE 198 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 20) p bits
{-# LINE 199 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

type LPBITMAP = Ptr BITMAP

setBITMAP :: LPBITMAP -> BITMAP -> IO ()
setBITMAP = pokeBITMAP

----------------------------------------------------------------
-- Misc
----------------------------------------------------------------

deleteBitmap :: HBITMAP -> IO ()
deleteBitmap bitmap =
failIfFalse_ "DeleteBitmap" $ c_DeleteBitmap bitmap
foreign import STDCALL unsafe "windows.h DeleteObject"
c_DeleteBitmap :: HBITMAP -> IO Bool

createBitmap :: int -> int -> UINT -> UINT -> Maybe LPVOID -> IO HBITMAP
createBitmap w h planes bits mb_color_data =
failIfNull "CreateBitmap" $
c_CreateBitmap w h planes bits (maybePtr mb_color_data)
foreign import STDCALL unsafe "windows.h CreateBitmap"
c_CreateBitmap :: int -> int -> UINT -> UINT -> LPVOID -> IO HBITMAP

createBitmapIndirect :: LPBITMAP -> IO HBITMAP
createBitmapIndirect p_bm =
failIfNull "CreateBitmapIndirect" $ c_CreateBitmapIndirect p_bm
foreign import STDCALL unsafe "windows.h CreateBitmapIndirect"
c_CreateBitmapIndirect :: LPBITMAP -> IO HBITMAP

createCompatibleBitmap :: HDC -> Int32 -> Int32 -> IO HBITMAP
createCompatibleBitmap dc w h =
failIfNull "CreateCompatibleBitmap" $ c_CreateCompatibleBitmap dc w h
foreign import STDCALL unsafe "windows.h CreateCompatibleBitmap"
c_CreateCompatibleBitmap :: HDC -> Int32 -> Int32 -> IO HBITMAP

createDIBPatternBrushPt :: LPVOID -> ColorFormat -> IO HBRUSH
createDIBPatternBrushPt bm usage =
failIfNull "CreateDIBPatternBrushPt" $ c_CreateDIBPatternBrushPt bm usage
foreign import STDCALL unsafe "windows.h CreateDIBPatternBrushPt"
c_CreateDIBPatternBrushPt :: LPVOID -> ColorFormat -> IO HBRUSH

----------------------------------------------------------------
-- Querying
----------------------------------------------------------------

getBitmapDimensionEx :: HBITMAP -> IO SIZE
getBitmapDimensionEx bm =
allocaSIZE $ \ p_size -> DO
failIfFalse_ "GetBitmapDimensionEx" $ c_GetBitmapDimensionEx bm p_size
peekSIZE p_size
foreign import STDCALL unsafe "windows.h GetBitmapDimensionEx"
c_GetBitmapDimensionEx :: HBITMAP -> Ptr SIZE -> IO Bool

setBitmapDimensionEx :: HBITMAP -> SIZE -> IO SIZE
setBitmapDimensionEx bm (cx,cy) =
allocaSIZE $ \ p_size -> DO
failIfFalse_ "SetBitmapDimensionEx" $ DO
c_SetBitmapDimensionEx bm cx cy p_size
peekSIZE p_size
foreign import STDCALL unsafe "windows.h SetBitmapDimensionEx"
c_SetBitmapDimensionEx :: HBITMAP -> LONG -> LONG -> Ptr SIZE -> IO Bool

getBitmapInfo :: HBITMAP -> IO BITMAP
getBitmapInfo bm =
allocaBytes (fromIntegral sizeofBITMAP) $ \ p_bm -> DO
failIfFalse_ "GetBitmapInfo" $ c_GetBitmapInfo bm sizeofBITMAP p_bm
peekBITMAP p_bm
foreign import STDCALL unsafe "windows.h GetObjectW"
c_GetBitmapInfo :: HBITMAP -> DWORD -> LPBITMAP -> IO Bool

----------------------------------------------------------------
--
----------------------------------------------------------------

type BitmapCompression = DWORD

bI_RGB :: BitmapCompression
bI_RGB = 0
bI_RLE8 :: BitmapCompression
bI_RLE8 = 1
bI_RLE4 :: BitmapCompression
bI_RLE4 = 2
bI_BITFIELDS :: BitmapCompression
bI_BITFIELDS = 3

{-# LINE 281 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

type ColorFormat = DWORD

dIB_PAL_COLORS :: ColorFormat
dIB_PAL_COLORS = 1
dIB_RGB_COLORS :: ColorFormat
dIB_RGB_COLORS = 0

{-# LINE 288 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

----------------------------------------------------------------
-- BITMAPINFO
----------------------------------------------------------------

type LPBITMAPINFO = Ptr ()

----------------------------------------------------------------
-- BITMAPINFOHEADER
----------------------------------------------------------------

type BITMAPINFOHEADER =
( DWORD -- biSize -- sizeof(BITMAPINFOHEADER)
, LONG -- biWidth
, LONG -- biHeight
, WORD -- biPlanes
, WORD -- biBitCount -- 1, 4, 8, 16, 24 or 32
, BitmapCompression -- biCompression
, DWORD -- biSizeImage
, LONG -- biXPelsPerMeter
, LONG -- biYPelsPerMeter
, Maybe DWORD -- biClrUsed
, Maybe DWORD -- biClrImportant
)

peekBITMAPINFOHEADER :: Ptr BITMAPINFOHEADER -> IO BITMAPINFOHEADER
peekBITMAPINFOHEADER p = DO
size <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 316 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
width <- (\hsc_ptr -> peekByteOff hsc_ptr 4) p
{-# LINE 317 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
height <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 318 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
planes <- (\hsc_ptr -> peekByteOff hsc_ptr 12) p
{-# LINE 319 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
nbits <- (\hsc_ptr -> peekByteOff hsc_ptr 14) p
{-# LINE 320 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
comp <- (\hsc_ptr -> peekByteOff hsc_ptr 16) p
{-# LINE 321 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
imsize <- (\hsc_ptr -> peekByteOff hsc_ptr 20) p
{-# LINE 322 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
xDensity <- (\hsc_ptr -> peekByteOff hsc_ptr 24) p
{-# LINE 323 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
yDensity <- (\hsc_ptr -> peekByteOff hsc_ptr 28) p
{-# LINE 324 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
clrUsed <- liftM numToMaybe $ (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 325 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
clrImp <- liftM numToMaybe $ (\hsc_ptr -> peekByteOff hsc_ptr 36) p
{-# LINE 326 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
RETURN (size, width, height, planes, nbits, comp, imsize,
xDensity, yDensity, clrUsed, clrImp)

type LPBITMAPINFOHEADER = Ptr BITMAPINFOHEADER

getBITMAPINFOHEADER_ :: LPBITMAPINFOHEADER -> IO BITMAPINFOHEADER
getBITMAPINFOHEADER_ = peekBITMAPINFOHEADER

----------------------------------------------------------------
-- BITMAPFILEHEADER
----------------------------------------------------------------

type BITMAPFILEHEADER =
( WORD -- bfType -- "BM" == 0x4d42
, DWORD -- bfSize -- number of bytes in file
, WORD -- bfReserved1 -- == 0
, WORD -- bfReserved2 -- == 0
, DWORD -- bfOffBits -- == (char*) bits - (char*) filehdr
)

peekBITMAPFILEHEADER :: Ptr BITMAPFILEHEADER -> IO BITMAPFILEHEADER
peekBITMAPFILEHEADER p = DO
ty <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 349 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
size <- (\hsc_ptr -> peekByteOff hsc_ptr 2) p
{-# LINE 350 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
res1 <- (\hsc_ptr -> peekByteOff hsc_ptr 6) p
{-# LINE 351 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
res2 <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 352 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
offset <- (\hsc_ptr -> peekByteOff hsc_ptr 10) p
{-# LINE 353 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
RETURN (ty, size, res1, res2, offset)

type LPBITMAPFILEHEADER = Ptr BITMAPFILEHEADER

getBITMAPFILEHEADER :: LPBITMAPFILEHEADER -> IO BITMAPFILEHEADER
getBITMAPFILEHEADER = peekBITMAPFILEHEADER

sizeofBITMAP :: Word32
sizeofBITMAP = (24)
{-# LINE 362 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
sizeofBITMAPINFO :: Word32
sizeofBITMAPINFO = (44)
{-# LINE 364 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
sizeofBITMAPINFOHEADER :: Word32
sizeofBITMAPINFOHEADER = (40)
{-# LINE 366 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
sizeofBITMAPFILEHEADER :: Word32
sizeofBITMAPFILEHEADER = (14)
{-# LINE 368 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}
sizeofLPBITMAPFILEHEADER :: Word32
sizeofLPBITMAPFILEHEADER = (14)
{-# LINE 370 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

----------------------------------------------------------------
-- CreateBMPFile
----------------------------------------------------------------

-- A (large) helper function - courtesy of Microsoft

createBMPFile :: string -> HBITMAP -> HDC -> IO ()
createBMPFile name bm dc =
withCString name $ \ c_name ->
c_CreateBMPFile c_name bm dc
foreign import ccall unsafe "dumpBMP.h CreateBMPFile"
c_CreateBMPFile :: LPCSTR -> HBITMAP -> HDC -> IO ()

{-# CFILES cbits/dumpBMP.c #-}

----------------------------------------------------------------
-- Device Independent Bitmaps
----------------------------------------------------------------

cBM_INIT :: DWORD
cBM_INIT = 4

{-# LINE 393 "libraries\Win32\.\Graphics\Win32\GDI\Bitmap.hsc" #-}

getDIBits :: HDC -> HBITMAP -> int -> int -> Maybe LPVOID -> LPBITMAPINFO -> ColorFormat -> IO int
getDIBits dc bm start nlines mb_bits Info usage =
failIfZero "GetDIBits" $
c_GetDIBits dc bm start nlines (maybePtr mb_bits) Info usage
foreign import STDCALL unsafe "windows.h GetDIBits"
c_GetDIBits :: HDC -> HBITMAP -> int -> int -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO int

setDIBits :: HDC -> HBITMAP -> int -> int -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO int
setDIBits dc bm start nlines bits Info Use =
failIfZero "SetDIBits" $ c_SetDIBits dc bm start nlines bits Info Use
foreign import STDCALL unsafe "windows.h SetDIBits"
c_SetDIBits :: HDC -> HBITMAP -> int -> int -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO int

createDIBitmap :: HDC -> LPBITMAPINFOHEADER -> DWORD -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO HBITMAP
createDIBitmap dc hdr option init_val Info usage =
failIfNull "CreateDIBitmap" $
c_CreateDIBitmap dc hdr option init_val Info usage
foreign import STDCALL unsafe "windows.h CreateDIBitmap"
c_CreateDIBitmap :: HDC -> LPBITMAPINFOHEADER -> DWORD -> LPVOID -> LPBITMAPINFO -> ColorFormat -> IO HBITMAP

----------------------------------------------------------------
-- End
----------------------------------------------------------------


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 21:50
Classe Brush GDI+

Define objetos usados para preencher o interior de formas gráficas, como retângulos, elipses, tortas, polígonos, e caminhos.

https://msdn.microsoft.com/pt-br/library/system.drawing.brush%28v=vs.110%29.aspx

https://msdn.microsoft.com/pt-br/library/system.drawing.solidbrush%28v=vs.110%29.aspx

Brush est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur(nPtr est un entier système = Null)
Constructeur GDIPObjet(nPtr)



Procedure Destructeur()



Procedure Type()

nType est un entier

// Lecture de la propriété
GdipGetBrushType(Pointer, &nType)

RENVOYER nType



Procedure PRIVÉE Type(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un Brush dynamique = allouer un Brush

// Clone l'objet
GdipCloneBrush(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteBrush(Pointer)

// Libère l'objet
GDIPObjet.Dispose()


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 21:59
CachedBitmap

Imagem e Bitmap objetos armazenar imagens em um formato independente de dispositivo. A CachedBitmap objeto armazena uma imagem no formato do dispositivo de exibição atual. Render uma imagem armazenada num CachedBitmap objecto é rápido porque nenhum tempo de processamento é gasto converter a imagem para o formato requerido pelo dispositivo de exibição.

O exemplo a seguir cria um Bitmap objeto e um CachedBitmap objeto da Texture.jpg arquivo. O Bitmap e CachedBitmap cada um são tirados 30.000 vezes. Se você executar o código, você vai ver que os CachedBitmap imagens são desenhadas substancialmente mais rápido do que os Bitmap imagens.

Bitmap Bitmap (L "Texture.jpg");
width = UINT bitmap.GetWidth ();
altura UINT = bitmap.GetHeight ();
CachedBitmap CBitmap (& bitmap, e gráficos);
int j, k;
for (j = 0; j < 300; J + = 10)
para (k = 0; k <1000; k ++)
Graphics.drawImage (& bitmap, J, J / 2, largura, altura);
for (j = 0; j <300; j + = 10)
para (k = 0; k <1000; k ++)
graphics.DrawCachedBitmap (& CBitmap, J, J 150 + / 2);


Nota Um CachedBitmap objecto corresponde ao formato do dispositivo de exibição no momento da CachedBitmap objecto foi construído. Se o usuário de seu programa altera as configurações de exibição, seu código deve construir uma nova CachedBitmap objeto. O DrawImage método irá falhar se você passar um CachedBitmap objeto que foi criado antes de uma mudança no formato de apresentação.

CachedBitmap est une Classe
hérite de Bitmap
FIN



Procedure Constructeur(bitmap est un Bitmap dynamique = Null, g est un Graphics = Null)

nPtr est un entier système

SI MesParamètres..NbReçus = 2 ALORS
GdipCreateCachedBitmap(bitmap.Pointer, g.Pointer, &nPtr)
FIN

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



//// Résumé : Clone l'objet
//PROCEDURE virtuelle Clone(rect = null, format est un entier = PixelFormatDontCare)
//
// nPtr est un entier systeme
// pclObjet est un cachedbitmap dynamique = allouer un CachedBitmap
//
// si MesParamètres..NbReçus = 0 alors
//
// // Clone l'objet
// GdipCloneImage(Pointer, &nPtr)
// sinon
//
// // Si on utilise RECTF à la place de RECT
// si typevar(rect.X) = wlRéel_4 ALORS
// GdipCloneBitmapArea(rect.x, rect.y, rect.Width, rect.Height, format, Pointer, &nPtr)
// sinon
// GdipCloneBitmapAreaI(rect.x, rect.y, rect.Width, rect.Height, format, pointer, &nptr)
// FIN
// fin
//
// // Allocation
// pclObjet.Pointer = nPtr
//
//RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteCachedBitmap(Pointer)

// Libère l'objet
GDIPObjet.Dispose()


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 22:13
Color Classe

Color est une Classe

PRIVÉ
m_nAlpha est un entier sans signe sur 1
m_nRed est un entier sans signe sur 1
m_nGreen est un entier sans signe sur 1
m_nBlue est un entier sans signe sur 1

GLOBAL PRIVÉ
m_tabARGB est un tableau d'entiers sans signe = [ 0xFFD4D0C8,
0xFF0054E3,
0xFFFFFFFF,
0xFF808080,
0xFFECE9D8,
0xFFACA899,
0xFF716F64,
0xFFF1EFE2,
0xFFFFFFFF,
0xFF000000,
0xFF004E98,
0xFFACA899,
0xFF316AC5,
0xFFFFFFFF,
0xFF000080,
0xFFD4D0C8,
0xFF7A96DF,
0xFFD8E4F8,
0xFFFFFFE1,
0xFF000000,
0xFFFFFFFF,
0xFF000000,
0xFFD4D0C8,
0xFFFFFFFF,
0xFF000000,
0xFF000000,
0x00FFFFFF,
0xFFF0F8FF,
0xFFFAEBD7,
0xFF00FFFF,
0xFF7FFFD4,
0xFFF0FFFF,
0xFFF5F5DC,
0xFFFFE4C4,
0xFF000000,
0xFFFFEBCD,
0xFF0000FF,
0xFF8A2BE2,
0xFFA52A2A,
0xFFDEB887,
0xFF5F9EA0,
0xFF7FFF00,
0xFFD2691E,
0xFFFF7F50,
0xFF6495ED,
0xFFFFF8DC,
0xFFDC143C,
0xFF00FFFF,
0xFF00008B,
0xFF008B8B,
0xFFB8860B,
0xFFA9A9A9,
0xFF006400,
0xFFBDB76B,
0xFF8B008B,
0xFF556B2F,
0xFFFF8C00,
0xFF9932CC,
0xFF8B0000,
0xFFE9967A,
0xFF8FBC8B,
0xFF483D8B,
0xFF2F4F4F,
0xFF00CED1,
0xFF9400D3,
0xFFFF1493,
0xFF00BFFF,
0xFF696969,
0xFF1E90FF,
0xFFB22222,
0xFFFFFAF0,
0xFF228B22,
0xFFFF00FF,
0xFFDCDCDC,
0xFFF8F8FF,
0xFFFFD700,
0xFFDAA520,
0xFF808080,
0xFF008000,
0xFFADFF2F,
0xFFF0FFF0,
0xFFFF69B4,
0xFFCD5C5C,
0xFF4B0082,
0xFFFFFFF0,
0xFFF0E68C,
0xFFE6E6FA,
0xFFFFF0F5,
0xFF7CFC00,
0xFFFFFACD,
0xFFADD8E6,
0xFFF08080,
0xFFE0FFFF,
0xFFFAFAD2,
0xFFD3D3D3,
0xFF90EE90,
0xFFFFB6C1,
0xFFFFA07A,
0xFF20B2AA,
0xFF87CEFA,
0xFF778899,
0xFFB0C4DE,
0xFFFFFFE0,
0xFF00FF00,
0xFF32CD32,
0xFFFAF0E6,
0xFFFF00FF,
0xFF800000,
0xFF66CDAA,
0xFF0000CD,
0xFFBA55D3,
0xFF9370DB,
0xFF3CB371,
0xFF7B68EE,
0xFF00FA9A,
0xFF48D1CC,
0xFFC71585,
0xFF191970,
0xFFF5FFFA,
0xFFFFE4E1,
0xFFFFE4B5,
0xFFFFDEAD,
0xFF000080,
0xFFFDF5E6,
0xFF808000,
0xFF6B8E23,
0xFFFFA500,
0xFFFF4500,
0xFFDA70D6,
0xFFEEE8AA,
0xFF98FB98,
0xFFAFEEEE,
0xFFDB7093,
0xFFFFEFD5,
0xFFFFDAB9,
0xFFCD853F,
0xFFFFC0CB,
0xFFDDA0DD,
0xFFB0E0E6,
0xFF800080,
0xFFFF0000,
0xFFBC8F8F,
0xFF4169E1,
0xFF8B4513,
0xFFFA8072,
0xFFF4A460,
0xFF2E8B57,
0xFFFFF5EE,
0xFFA0522D,
0xFFC0C0C0,
0xFF87CEEB,
0xFF6A5ACD,
0xFF708090,
0xFFFFFAFA,
0xFF00FF7F,
0xFF4682B4,
0xFFD2B48C,
0xFF008080,
0xFFD8BFD8,
0xFFFF6347,
0xFF40E0D0,
0xFFEE82EE,
0xFFF5DEB3,
0xFFFFFFFF,
0xFFF5F5F5,
0xFFFFFF00,
0xFF9ACD32
]

GLOBAL PUBLIC
ActiveBorder est un Color dynamique = allouer un Color(m_tabARGB[1])
ActiveCaption est un Color dynamique = allouer un Color(m_tabARGB[2])
ActiveCaptionText est un Color dynamique = allouer un Color(m_tabARGB[3])
AppWorkspace est un Color dynamique = allouer un Color(m_tabARGB[4])
Control est un Color dynamique = allouer un Color(m_tabARGB[5])
ControlDark est un Color dynamique = allouer un Color(m_tabARGB[6])
ControlDarkDark est un Color dynamique = allouer un Color(m_tabARGB[7])
ControlLight est un Color dynamique = allouer un Color(m_tabARGB[8])
ControlLightLight est un Color dynamique = allouer un Color(m_tabARGB[9])
ControlText est un Color dynamique = allouer un Color(m_tabARGB[10])
Desktop est un Color dynamique = allouer un Color(m_tabARGB[11])
GrayText est un Color dynamique = allouer un Color(m_tabARGB[12])
Highlight est un Color dynamique = allouer un Color(m_tabARGB[13])
HighlightText est un Color dynamique = allouer un Color(m_tabARGB[14])
HotTrack est un Color dynamique = allouer un Color(m_tabARGB[15])
InactiveBorder est un Color dynamique = allouer un Color(m_tabARGB[16])
InactiveCaption est un Color dynamique = allouer un Color(m_tabARGB[17])
InactiveCaptionText est un Color dynamique = allouer un Color(m_tabARGB[18])
Info est un Color dynamique = allouer un Color(m_tabARGB[19])
InfoText est un Color dynamique = allouer un Color(m_tabARGB[20])
Menu est un Color dynamique = allouer un Color(m_tabARGB[21])
MenuText est un Color dynamique = allouer un Color(m_tabARGB[22])
ScrollBar est un Color dynamique = allouer un Color(m_tabARGB[23])
Window est un Color dynamique = allouer un Color(m_tabARGB[24])
WindowFrame est un Color dynamique = allouer un Color(m_tabARGB[25])
WindowText est un Color dynamique = allouer un Color(m_tabARGB[26])
Transparent est un Color dynamique = allouer un Color(m_tabARGB[27])
AliceBlue est un Color dynamique = allouer un Color(m_tabARGB[28])
AntiqueWhite est un Color dynamique = allouer un Color(m_tabARGB[29])
Aqua est un Color dynamique = allouer un Color(m_tabARGB[30])
Aquamarine est un Color dynamique = allouer un Color(m_tabARGB[31])
Azure est un Color dynamique = allouer un Color(m_tabARGB[32])
Beige est un Color dynamique = allouer un Color(m_tabARGB[33])
Bisque est un Color dynamique = allouer un Color(m_tabARGB[34])
Black est un Color dynamique = allouer un Color(m_tabARGB[35])
BlanchedAlmond est un Color dynamique = allouer un Color(m_tabARGB[36])
Blue est un Color dynamique = allouer un Color(m_tabARGB[37])
BlueViolet est un Color dynamique = allouer un Color(m_tabARGB[38])
Brown est un Color dynamique = allouer un Color(m_tabARGB[39])
BurlyWood est un Color dynamique = allouer un Color(m_tabARGB[40])
CadetBlue est un Color dynamique = allouer un Color(m_tabARGB[41])
Chartreuse est un Color dynamique = allouer un Color(m_tabARGB[42])
Chocolate est un Color dynamique = allouer un Color(m_tabARGB[43])
Coral est un Color dynamique = allouer un Color(m_tabARGB[44])
CornflowerBlue est un Color dynamique = allouer un Color(m_tabARGB[45])
Cornsilk est un Color dynamique = allouer un Color(m_tabARGB[46])
Crimson est un Color dynamique = allouer un Color(m_tabARGB[47])
Cyan est un Color dynamique = allouer un Color(m_tabARGB[48])
DarkBlue est un Color dynamique = allouer un Color(m_tabARGB[49])
DarkCyan est un Color dynamique = allouer un Color(m_tabARGB[50])
DarkGoldenrod est un Color dynamique = allouer un Color(m_tabARGB[51])
DarkGray est un Color dynamique = allouer un Color(m_tabARGB[52])
DarkGreen est un Color dynamique = allouer un Color(m_tabARGB[53])
DarkKhaki est un Color dynamique = allouer un Color(m_tabARGB[54])
DarkMagenta est un Color dynamique = allouer un Color(m_tabARGB[55])
DarkOliveGreen est un Color dynamique = allouer un Color(m_tabARGB[56])
DarkOrange est un Color dynamique = allouer un Color(m_tabARGB[57])
DarkOrchid est un Color dynamique = allouer un Color(m_tabARGB[58])
DarkRed est un Color dynamique = allouer un Color(m_tabARGB[59])
DarkSalmon est un Color dynamique = allouer un Color(m_tabARGB[60])
DarkSeaGreen est un Color dynamique = allouer un Color(m_tabARGB[61])
DarkSlateBlue est un Color dynamique = allouer un Color(m_tabARGB[62])
DarkSlateGray est un Color dynamique = allouer un Color(m_tabARGB[63])
DarkTurquoise est un Color dynamique = allouer un Color(m_tabARGB[64])
DarkViolet est un Color dynamique = allouer un Color(m_tabARGB[65])
DeepPink est un Color dynamique = allouer un Color(m_tabARGB[66])
DeepSkyBlue est un Color dynamique = allouer un Color(m_tabARGB[67])
DimGray est un Color dynamique = allouer un Color(m_tabARGB[68])
DodgerBlue est un Color dynamique = allouer un Color(m_tabARGB[69])
Firebrick est un Color dynamique = allouer un Color(m_tabARGB[70])
FloralWhite est un Color dynamique = allouer un Color(m_tabARGB[71])
ForestGreen est un Color dynamique = allouer un Color(m_tabARGB[72])
Fuchsia est un Color dynamique = allouer un Color(m_tabARGB[73])
Gainsboro est un Color dynamique = allouer un Color(m_tabARGB[74])
GhostWhite est un Color dynamique = allouer un Color(m_tabARGB[75])
Gold est un Color dynamique = allouer un Color(m_tabARGB[76])
Goldenrod est un Color dynamique = allouer un Color(m_tabARGB[77])
Gray est un Color dynamique = allouer un Color(m_tabARGB[78])
Green est un Color dynamique = allouer un Color(m_tabARGB[79])
GreenYellow est un Color dynamique = allouer un Color(m_tabARGB[80])
Honeydew est un Color dynamique = allouer un Color(m_tabARGB[81])
HotPink est un Color dynamique = allouer un Color(m_tabARGB[82])
IndianRed est un Color dynamique = allouer un Color(m_tabARGB[83])
Indigo est un Color dynamique = allouer un Color(m_tabARGB[84])
Ivory est un Color dynamique = allouer un Color(m_tabARGB[85])
Khaki est un Color dynamique = allouer un Color(m_tabARGB[86])
Lavender est un Color dynamique = allouer un Color(m_tabARGB[87])
LavenderBlush est un Color dynamique = allouer un Color(m_tabARGB[88])
LawnGreen est un Color dynamique = allouer un Color(m_tabARGB[89])
LemonChiffon est un Color dynamique = allouer un Color(m_tabARGB[90])
LightBlue est un Color dynamique = allouer un Color(m_tabARGB[91])
LightCoral est un Color dynamique = allouer un Color(m_tabARGB[92])
LightCyan est un Color dynamique = allouer un Color(m_tabARGB[93])
LightGoldenrodYellow est un Color dynamique = allouer un Color(m_tabARGB[94])
LightGray est un Color dynamique = allouer un Color(m_tabARGB[95])
LightGreen est un Color dynamique = allouer un Color(m_tabARGB[96])
LightPink est un Color dynamique = allouer un Color(m_tabARGB[97])
LightSalmon est un Color dynamique = allouer un Color(m_tabARGB[98])
LightSeaGreen est un Color dynamique = allouer un Color(m_tabARGB[99])
LightSkyBlue est un Color dynamique = allouer un Color(m_tabARGB[100])
LightSlateGray est un Color dynamique = allouer un Color(m_tabARGB[101])
LightSteelBlue est un Color dynamique = allouer un Color(m_tabARGB[102])
LightYellow est un Color dynamique = allouer un Color(m_tabARGB[103])
Lime est un Color dynamique = allouer un Color(m_tabARGB[104])
LimeGreen est un Color dynamique = allouer un Color(m_tabARGB[105])
Linen est un Color dynamique = allouer un Color(m_tabARGB[106])
Magenta est un Color dynamique = allouer un Color(m_tabARGB[107])
Maroon est un Color dynamique = allouer un Color(m_tabARGB[108])
MediumAquamarine est un Color dynamique = allouer un Color(m_tabARGB[109])
MediumBlue est un Color dynamique = allouer un Color(m_tabARGB[110])
MediumOrchid est un Color dynamique = allouer un Color(m_tabARGB[111])
MediumPurple est un Color dynamique = allouer un Color(m_tabARGB[112])
MediumSeaGreen est un Color dynamique = allouer un Color(m_tabARGB[113])
MediumSlateBlue est un Color dynamique = allouer un Color(m_tabARGB[114])
MediumSpringGreen est un Color dynamique = allouer un Color(m_tabARGB[115])
MediumTurquoise est un Color dynamique = allouer un Color(m_tabARGB[116])
MediumVioletRed est un Color dynamique = allouer un Color(m_tabARGB[117])
MidnightBlue est un Color dynamique = allouer un Color(m_tabARGB[118])
MintCream est un Color dynamique = allouer un Color(m_tabARGB[119])
MistyRose est un Color dynamique = allouer un Color(m_tabARGB[120])
Moccasin est un Color dynamique = allouer un Color(m_tabARGB[121])
NavajoWhite est un Color dynamique = allouer un Color(m_tabARGB[122])
Navy est un Color dynamique = allouer un Color(m_tabARGB[123])
OldLace est un Color dynamique = allouer un Color(m_tabARGB[124])
Olive est un Color dynamique = allouer un Color(m_tabARGB[125])
OliveDrab est un Color dynamique = allouer un Color(m_tabARGB[126])
Orange est un Color dynamique = allouer un Color(m_tabARGB[127])
OrangeRed est un Color dynamique = allouer un Color(m_tabARGB[128])
Orchid est un Color dynamique = allouer un Color(m_tabARGB[129])
PaleGoldenrod est un Color dynamique = allouer un Color(m_tabARGB[130])
PaleGreen est un Color dynamique = allouer un Color(m_tabARGB[131])
PaleTurquoise est un Color dynamique = allouer un Color(m_tabARGB[132])
PaleVioletRed est un Color dynamique = allouer un Color(m_tabARGB[133])
PapayaWhip est un Color dynamique = allouer un Color(m_tabARGB[134])
PeachPuff est un Color dynamique = allouer un Color(m_tabARGB[135])
Peru est un Color dynamique = allouer un Color(m_tabARGB[136])
Pink est un Color dynamique = allouer un Color(m_tabARGB[137])
Plum est un Color dynamique = allouer un Color(m_tabARGB[138])
PowderBlue est un Color dynamique = allouer un Color(m_tabARGB[139])
Purple est un Color dynamique = allouer un Color(m_tabARGB[140])
Red est un Color dynamique = allouer un Color(m_tabARGB[141])
RosyBrown est un Color dynamique = allouer un Color(m_tabARGB[142])
RoyalBlue est un Color dynamique = allouer un Color(m_tabARGB[143])
SaddleBrown est un Color dynamique = allouer un Color(m_tabARGB[144])
Salmon est un Color dynamique = allouer un Color(m_tabARGB[145])
SandyBrown est un Color dynamique = allouer un Color(m_tabARGB[146])
SeaGreen est un Color dynamique = allouer un Color(m_tabARGB[147])
SeaShell est un Color dynamique = allouer un Color(m_tabARGB[148])
Sienna est un Color dynamique = allouer un Color(m_tabARGB[149])
Silver est un Color dynamique = allouer un Color(m_tabARGB[150])
SkyBlue est un Color dynamique = allouer un Color(m_tabARGB[151])
SlateBlue est un Color dynamique = allouer un Color(m_tabARGB[152])
SlateGray est un Color dynamique = allouer un Color(m_tabARGB[153])
Snow est un Color dynamique = allouer un Color(m_tabARGB[154])
SpringGreen est un Color dynamique = allouer un Color(m_tabARGB[155])
SteelBlue est un Color dynamique = allouer un Color(m_tabARGB[156])
Tan est un Color dynamique = allouer un Color(m_tabARGB[157])
Teal est un Color dynamique = allouer un Color(m_tabARGB[158])
Thistle est un Color dynamique = allouer un Color(m_tabARGB[159])
Tomato est un Color dynamique = allouer un Color(m_tabARGB[160])
Turquoise est un Color dynamique = allouer un Color(m_tabARGB[161])
Violet est un Color dynamique = allouer un Color(m_tabARGB[162])
Wheat est un Color dynamique = allouer un Color(m_tabARGB[163])
White est un Color dynamique = allouer un Color(m_tabARGB[164])
WhiteSmoke est un Color dynamique = allouer un Color(m_tabARGB[165])
Yellow est un Color dynamique = allouer un Color(m_tabARGB[166])
YellowGreen est un Color dynamique = allouer un Color(m_tabARGB[167])

FIN



Procedure Constructeur(*)

SI MesParamètres..NbReçus = 1 ALORS
m_nAlpha = MesParamètres[1] bitDécaleDroite 24
m_nRed = RVBRouge(MesParamètres[1])
m_nGreen = RVBVert(MesParamètres[1])
m_nBlue = RVBBleu(MesParamètres[1])
SINON SI MesParamètres..NbReçus = 3 ALORS
m_nAlpha = 255
m_nRed = MesParamètres[1]
m_nGreen = MesParamètres[2]
m_nBlue = MesParamètres[3]
SINON SI MesParamètres..NbReçus = 4 ALORS
m_nAlpha = MesParamètres[1]
m_nRed = MesParamètres[2]
m_nGreen = MesParamètres[3]
m_nBlue = MesParamètres[4]
FIN



Procedure Destructeur()



Procedure Alpha()
RENVOYER m_nAlpha



Procedure Alpha(nValeur)
m_nAlpha = nValeur



Procedure Blue()
RENVOYER m_nBlue



Procedure Blue(nValeur)
m_nBlue = nValeur



Procedure Green()
RENVOYER m_nGreen



Procedure Green(nValeur)
m_nGreen = nValeur



Procedure Red()
RENVOYER m_nRed



Procedure Red(nValeur)
m_nRed = nValeur



Procedure Value()
RENVOYER RVB(m_nRed, m_nGreen, m_nBlue) + (m_nAlpha bitDécaleGauche 10)



Procedure Value(nValeur est un entier)

m_nAlpha = nValeur bitDécaleDroite 24
m_nRed = RVBRouge(nValeur)
m_nGreen = RVBVert(nValeur)
m_nBlue = RVBBleu(nValeur)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 22:29
CustomLineCap

Customizar Linha

https://msdn.microsoft.com/en-us/library/windows/desktop/ms533977%28v=vs.85%29.aspx

http://forum.powerbasic.com/forum/jose-s-corner/source-code-ab/51277-gdi-classes-customlinecap-methods-examples

CustomLineCap est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur(fillPath est un GraphicsPath dynamique = Null, strokePath est un GraphicsPath dynamique = Null, baseCap est un entier = LineCapFlat, baseInset est un réel sur 4 = 0)

nPtr est un entier système
nPtrFill est un entier système = (fillPath = Null ? Null SINON fillPath.Pointer)
nPtrStroke est un entier système = (strokePath = Null ? Null SINON strokePath.Pointer)

// Crée l'objet
GdipCreateCustomLineCap(nPtrFill, nPtrStroke, baseCap, baseInset, &nPtr)

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure BaseCap()

nCap est un entier

// Lecture de la propriété
GdipGetCustomLineCapBaseCap(Pointer, &nCap)

RENVOYER nCap



Procedure BaseCap(nValeur est un entier)
// Ecriture de la propriété
GdipSetCustomLineCapBaseCap(Pointer, nValeur)



Procedure StrokeJoin()

nJoin est un entier

// Lecture de la propriété
GdipGetCustomLineCapStrokeJoin(Pointer, &nJoin)

RENVOYER nJoin



Procedure StrokeJoin(nValeur est un entier)

// Ecriture de la propriété
GdipSetCustomLineCapStrokeJoin(Pointer, nValeur)



Procedure BaseInset()

rInset est un réel sur 4

// Lecture de la propriété
GdipGetCustomLineCapBaseInset(Pointer, &rInset)

RENVOYER rInset



Procedure BaseInset(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetCustomLineCapBaseInset(Pointer, rValeur)



Procedure WidthScale()

rWidthScale est un réel sur 4

// Lecture de la propriété
GdipGetCustomLineCapWidthScale(Pointer, &rWidthScale)

RENVOYER rWidthScale



Procedure WidthScale(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetCustomLineCapWidthScale(Pointer, rValeur)



Procedure Type()

nType est un entier

// Lecture de la propriété
GdipGetCustomLineCapType(Pointer, &nType)

RENVOYER nType



Procedure PRIVÉE Type(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un CustomLineCap dynamique = allouer un CustomLineCap

// Clone l'objet
GdipCloneCustomLineCap(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

// Détruit l'objet
GdipDeleteCustomLineCap(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : GetStrokeCaps
Procedure GetStrokeCaps(startCap est un entier, endCap est un entier)

// Lecture de la propriété
GdipGetCustomLineCapStrokeCaps(Pointer, &startCap, &endCap)



// Résumé : SetStrokeCaps
Procedure SetStrokeCaps(LOCAL startCap est un entier, LOCAL endCap est un entier)

// Ecriture de la propriété
GdipSetCustomLineCapStrokeCaps(Pointer, startCap, endCap)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 22:44
Effect

Effect est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur(Clsid est un GUID)

nPtr est un entier système

// Crée l'objet
GdipCreateEffect(&Clsid, &nPtr)

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure PRIVÉE Parameters()



Procedure Parameters(stValeur)
// Ecriture de la propriété
GdipSetEffectParameters(Pointer, &stValeur, Dimension(stValeur))



// Résumé : Clone l'objet
Procedure VIRTUELLE PRIVÉE Clone()



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteEffect(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : ApplyEffect
Procedure ApplyEffect(srcbitmap est un Bitmap dynamique, rect est un RECT, dstbitmap est un Bitmap dynamique)

nPtr est un entier système

// Crée l'effet
GdipBitmapCreateApplyEffect(srcbitmap.Pointer, 1, Pointer, (rect = Null ? Null SINON rect), Null, &nPtr, Faux, Null, Null)

SI dstbitmap = Null ALORS
dstbitmap = allouer un Bitmap
FIN

// Allocation
dstbitmap.Pointer = nPtr


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 22:51
Font

Font est une Classe
hérite de GDIPObjet
FIN


Procedure PRIVÉE Constructeur()
Constructeur GDIPObjet()



Procedure Destructeur()



Procedure Family()

nPtr est un entier système
pclObjet est un FontFamily dynamique = allouer un FontFamily

// Lecture de la propriété
GdipGetFamily(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure PRIVÉE Family(v <utile>)



Procedure Style()

nStyle est un entier

// Lecture de la propriété
GdipGetFontStyle(Pointer, &nStyle)

RENVOYER nStyle



Procedure Style(nValeur est un entier)

pclFont est un Font dynamique = CreateFont(Family, Size, nValeur, Unit)

// Echange de pointeur
pclFont.Pointer <=> Pointer
pclFont.Dispose()



Procedure Size()

nSize est un réel sur 4

// Lecture de la propriété
GdipGetFontSize(Pointer, &nSize)

RENVOYER nSize



Procedure Size(rValeur est un réel sur 4)

pclFont est un Font dynamique = CreateFont(Family, rValeur, Style, Unit)

// Echange de pointeur
pclFont.Pointer <=> Pointer
pclFont.Dispose()



Procedure Unit()

nUnit est un entier

// Lecture de la propriété
GdipGetFontUnit(Pointer, &nUnit)

RENVOYER nUnit



Procedure Unit(nValeur est un entier)

pclFont est un Font dynamique = CreateFont(Family, Size, Style, nValeur)

// Echange de pointeur
pclFont.Pointer <=> Pointer
pclFont.Dispose()



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un Font dynamique = allouer un Font

// Clone l'objet
GdipCloneFont(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteFont(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : FromHfont
Procedure GLOBALE FromHDC(hDC est un entier système)

nPtr est un entier système
pclObjet est un Font dynamique = allouer un Font

// Crée l'objet
GdipCreateFontFromDC(hDC, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : CreateFont
Procedure GLOBALE CreateFont(family est un FontFamily dynamique, emSize est un réel sur 4, style est un entier = FontStyleRegular, unit est un entier = UnitPoint)

nPtr est un entier système
pclObjet est un Font dynamique = allouer un Font

// Crée l'objet
GdipCreateFont(family.Pointer, emSize, style, unit, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromName
Procedure GLOBALE FromName(fname est une chaîne, emSize est un réel sur 4, style est un entier = FontStyleRegular, unit est un entier = UnitPoint)

pclFamily est un FontFamily dynamique = allouer un FontFamily(fname)

RENVOYER CreateFont(pclFamily, emSize, style, unit)



// Résumé : GetHeight
Procedure GetHeight(g est un Graphics dynamique)

nHeight est un réel sur 4

// Lecture de la propriété
GdipGetFontHeight(Pointer, g.Pointer, &nHeight)

RENVOYER nHeight


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 23:14
FontCollection

FontCollection est une Classe
hérite de GDIPObjet
FIN



Procedure PROTÉGÉE Constructeur(nPtr est un entier système = Null)
Constructeur GDIPObjet(nPtr)



Procedure Destructeur()



Procedure Families()

nFound est un entier
nCount est un entier
tabPtr est un tableau d'entier système
tabFam est un tableau de FontFamily dynamique

SI PAS m_nNativeObject = Null ALORS

// Lecture de la propriété (1)
GdipGetFontCollectionFamilyCount(Pointer, &nFound)
Dimension(tabPtr, nFound)

// Lecture de la propriété (2)
GdipGetFontCollectionFamilyList(Pointer, nFound, &tabPtr, &nCount)
Dimension(tabFam, nCount)

// Allocation
POUR i = 1 _A_ nCount
tabFam[i] = allouer un FontFamily
tabFam[i].Pointer = tabPtr[i]
FIN
FIN

RENVOYER tabFam



Procedure PRIVÉE Families(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE PRIVÉE Clone()
RENVOYER Null



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

// Libère l'objet
GDIPObjet.Dispose()


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 23:25
FontFamily

FontFamily est une Classe
hérite de GDIPObjet

FIN

// GenericFontFamilies
CONSTANT
GenericFontFamiliesMonospace = 2
GenericFontFamiliesSansSerif = 1
GenericFontFamiliesSerif = 0
FIN



Procedure Constructeur(name est une chaîne = "", fontCollection est un FontCollection dynamique = Null)

nPtr est un entier système
u est une chaîne UNICODE = name

// Crée l'objet
GdipCreateFontFamilyFromName(&u, (fontCollection = Null ? Null SINON fontCollection.Pointer), &nPtr)

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure Name()

sName est une chaîne
u est une chaîne UNICODE sur 31

// Lecture de la propriété
GdipGetFamilyName(Pointer, &u, 0)

// Conversion
sName = u

RENVOYER sName



Procedure PRIVÉE Name(v <utile>)



// Résumé : GetGenericFontFamily
Procedure GLOBALE PRIVÉE GetGenericFontFamily(family est un entier)

nPtr est un entier système
pclObjet est un FontFamily dynamique = allouer un FontFamily

SELON family
CAS GenericFontFamiliesSansSerif

// Crée l'objet
GdipGetGenericFontFamilySansSerif(&nPtr)

CAS GenericFontFamiliesSerif

// Crée l'objet
GdipGetGenericFontFamilySerif(&nPtr)

AUTRE CAS

// Crée l'objet
GdipGetGenericFontFamilyMonospace(&nPtr)
FIN

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GenericMonospace
Procedure GLOBALE GenericMonospace()
RENVOYER GetGenericFontFamily(GenericFontFamiliesMonospace)



// Résumé : GenericSansSerif
Procedure GLOBALE GenericSansSerif()
RENVOYER GetGenericFontFamily(GenericFontFamiliesSansSerif)



// Résumé : GenericSerif
Procedure GLOBALE GenericSerif()
RENVOYER GetGenericFontFamily(GenericFontFamiliesSerif)



// Résumé : GetCellAscent
Procedure GetCellAscent(style est un entier)

nProp est un entier sur 2

// Lecture de la propriété
GdipGetCellAscent(Pointer, style, &nProp)

RENVOYER nProp



// Résumé : GetCellDescent
Procedure GetCellDescent(style est un entier)

nProp est un entier sur 2

// Lecture de la propriété
GdipGetCellDescent(Pointer, style, &nProp)

RENVOYER nProp



// Résumé : GetEmHeight
Procedure GetEmHeight(style est un entier)

nProp est un entier sur 2

// Lecture de la propriété
GdipGetEmHeight(Pointer, style, &nProp)

RENVOYER nProp



// Résumé : GetLineSpacing
Procedure GetLineSpacing(style est un entier)

nProp est un entier sur 2

// Lecture de la propriété
GdipGetLineSpacing(Pointer, style, &nProp)

RENVOYER nProp



// Résumé : IsStyleAvailable
Procedure IsStyleAvailable(style est un entier)

nProp est un entier sur 2

// Lecture de la propriété
GdipIsStyleAvailable(Pointer, style, &nProp)

RENVOYER nProp



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un FontFamily dynamique = allouer un FontFamily

// Clone l'objet
GdipCloneFontFamily(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteFontFamily(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : Equals
Procedure Equals(obj est un FontFamily dynamique)

SI obj = Null ALORS RENVOYER Faux

RENVOYER (obj.Name = Name)



// Résumé : Families
Procedure GLOBALE Families()

nPtr est un entier système
// pclObjet est un FontCollection dynamique = allouer un FontCollection

// Crée l'objet
GdipNewInstalledFontCollection(&nPtr)

// Allocation
//pclObjet.Pointer = nptr

//renvoyer pclObjet.Families


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 17 mars 2016 - 23:43
GDIPObjet

// Classe GDIPObjet
// Classe de base des objets GDI+
GDIPObjet est une Classe

PROTÉGÉ

// Pointeur vers l'objet GDI+
m_nNativeObject est un entier système

PRIVÉ

// Indique si l'objet GDI+ n'existe plus
m_bNull est un booléen

FIN



Procedure Constructeur(nObjectNatif est un entier système = Null)

// Conserve le pointeur
m_nNativeObject = nObjectNatif
m_bNull = (m_nNativeObject = 0)



Procedure Destructeur()

// Si l'objet n'est pas détruit
SI m_bNull = Faux ALORS

// Détruit l'objet
Dispose()
FIN



Procedure Pointer()
RENVOYER m_nNativeObject



Procedure Pointer(nValeur est un entier système)

// Si l'objet précédent n'est pas détruit
SI m_bNull = Faux ALORS

// Détruit l'objet
Dispose()
FIN

// Conserve le pointeur
m_nNativeObject = nValeur
m_bNull = (m_nNativeObject = 0)



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

// Libère l'objet
m_bNull = Vrai
m_nNativeObject = Null



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 00:34
Graphics

Graphics est une Classe
hérite de GDIPObjet

PRIVÉ GLOBAL
m_rDefDPIX est un réel sur 4
m_rDefDPIY est un réel sur 4

FIN



Procedure PRIVÉE Constructeur()
Constructeur GDIPObjet()



Procedure Destructeur()



Procedure GLOBALE SystemDpiX()

// Cache ?
SI m_rDefDPIX = 0 ALORS

// Allocation
clBmp est un Bitmap(1, 1)
clGfx est un Graphics = FromImage(clBmp)
m_rDefDPIX = clGfx.DpiX
m_rDefDPIY = clGfx.DpiY
FIN

RENVOYER m_rDefDPIX



Procedure GLOBALE PRIVÉE SystemDpiX(v <utile>)



Procedure GLOBALE SystemDpiY()

// Cache ?
SI m_rDefDPIY = 0 ALORS

// Allocation
clBmp est un Bitmap(1, 1)
clGfx est un Graphics = FromImage(clBmp)
m_rDefDPIX = clGfx.DpiX
m_rDefDPIY = clGfx.DpiY
FIN

RENVOYER m_rDefDPIY



Procedure GLOBALE PRIVÉE SystemDpiY(v <utile>)



Procedure Clip()

nPtr est un entier système
pclObjet est un Region dynamique = allouer un Region

// Lecture de la propriété
GdipGetClip(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Clip(pclValeur est un Region dynamique)

// Ecriture de la propriété
GdipSetClipRegion(Pointer, pclValeur.Pointer, CombineModeReplace)



Procedure ClipBounds()

stRect est un RECT

// Lecture de la propriété
GdipGetClipBoundsI(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE ClipBounds(v <utile>)



Procedure ClipBoundsF()

stRect est un RECTF

// Lecture de la propriété
GdipGetClipBounds(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE ClipBoundsF(v <utile>)



Procedure CompositingMode()

nMode est un entier

// Lecture de la propriété
GdipGetCompositingMode(Pointer, &nMode)

RENVOYER nMode



Procedure CompositingMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetCompositingMode(Pointer, nValeur)



Procedure CompositingQuality()

nQual est un entier

// Lecture de la propriété
GdipGetCompositingQuality(Pointer, &nQual)

RENVOYER nQual



Procedure CompositingQuality(nValeur est un entier)

// Ecriture de la propriété
GdipSetCompositingQuality(Pointer, nValeur)



Procedure DpiX()

x est un réel sur 4

// Lecture de la propriété
GdipGetDpiX(Pointer, &x)

RENVOYER x



Procedure PRIVÉE DpiX(v <utile>)



Procedure DpiY()

y est un réel sur 4

// Lecture de la propriété
GdipGetDpiY(Pointer, &y)

RENVOYER y



Procedure PRIVÉE DpiY(v <utile>)



Procedure InterpolationMode()

nMode est un entier = InterpolationModeInvalid

// Lecture de la propriété
GdipGetInterpolationMode(Pointer, &nMode)

RENVOYER nMode



Procedure InterpolationMode(nValeur est un entier)
// Ecriture de la propriété
GdipSetInterpolationMode(Pointer, nValeur)



Procedure IsClipEmpty()

bVal est un booléen

// Lecture de la propriété
GdipIsClipEmpty(Pointer, &bVal)

RENVOYER bVal



Procedure PRIVÉE IsClipEmpty(v <utile>)



Procedure IsVisibleClipEmpty()

bVal est un booléen

// Lecture de la propriété
GdipIsVisibleClipEmpty(Pointer, &bVal)

RENVOYER bVal



Procedure PRIVÉE IsVisibleClipEmpty(v <utile>)



Procedure PageScale()

rScale est un réel sur 4

// Lecture de la propriété
GdipGetPageScale(Pointer, &rScale)

RENVOYER rScale



Procedure PageScale(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetPageScale(Pointer, rValeur)



Procedure PageUnit()

nUnit est un entier

// Lecture de la propriété
GdipGetPageUnit(Pointer, &nUnit)

RENVOYER nUnit



Procedure PageUnit(nValeur est un entier)

// Ecriture de la propriété
GdipSetPageUnit(Pointer, nValeur)



Procedure PixelOffsetMode()

nMode est un entier = PixelOffsetModeInvalid

// Lecture de la propriété
GdipGetPixelOffsetMode(Pointer, &nMode)

RENVOYER nMode



Procedure PixelOffsetMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetPixelOffsetMode(Pointer, nValeur)



Procedure RenderingOrigin()

stPoint est un POINT

// Lecture de la propriété
GdipGetRenderingOrigin(Pointer, &stPoint.x, &stPoint.y)

RENVOYER stPoint



Procedure RenderingOrigin(stValeur est un POINT)

// Ecriture de la propriété
GdipSetRenderingOrigin(Pointer, stValeur.x, stValeur.y)



Procedure SmoothingMode()

nMode est un entier = SmoothingModeInvalid

// Lecture de la propriété
GdipGetSmoothingMode(Pointer, &nMode)

RENVOYER nMode



Procedure SmoothingMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetSmoothingMode(Pointer, nValeur)



Procedure TextContrast()

nContrast est un entier

// Lecture de la propriété
GdipGetTextContrast(Pointer, &nContrast)

RENVOYER nContrast



Procedure TextContrast(nValeur est un entier)

// Ecriture de la propriété
GdipSetTextContrast(Pointer, nValeur)



Procedure TextRenderingHint()

nHint est un entier

// Lecture de la propriété
GdipGetTextRenderingHint(Pointer, &nHint)

RENVOYER nHint



Procedure TextRenderingHint(nValeur est un entier)

// Ecriture de la propriété
GdipSetTextRenderingHint(Pointer, nValeur)



Procedure Transform()

nPtr est un entier système
pclObjet est un Matrix dynamique = allouer un Matrix

// Lecture de la propriété
GdipGetWorldTransform(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Transform(pclValeur est un Matrix dynamique)

// Ecriture de la propriété
GdipSetWorldTransform(Pointer, pclValeur.Pointer)



Procedure VisibleClipBoundsF()

stRect est un RECTF

// Lecture de la propriété
GdipGetVisibleClipBounds(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE VisibleClipBoundsF(v <utile>)



Procedure VisibleClipBounds()

stRect est un RECT

// Lecture de la propriété
GdipGetVisibleClipBoundsI(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE VisibleClipBounds(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE PRIVÉE Clone()



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteGraphics(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : BeginContainer
Procedure BeginContainer(dstRect = Null, srcRect = Null, unit est un entier = UnitWorld)

nState est un entier

SI MesParamètres..NbReçus = 0 ALORS
GdipBeginContainer2(Pointer, &nState)
SINON

// Si on utilise RECTF à la place de RECT
SI TypeVar(dstRect.X) = wlRéel_4 ALORS
GdipBeginContainer(Pointer, &dstRect, &srcRect, unit, &nState)
SINON
GdipBeginContainerI(Pointer, &dstRect, &srcRect, unit, &nState)
FIN
FIN

RENVOYER nState



// Résumé : Clear
Procedure Clear(Color est un Color dynamique)

GdipGraphicsClear(Pointer, (Color.Value))



// Résumé : DrawArc
Procedure DrawArc(pen est un Pen dynamique, rect, startAngle est un réel sur 4, sweepAngle est un réel sur 4)

// Si on utilise RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipDrawArc(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
SINON
GdipDrawArcI(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
FIN



// Résumé : DrawBezier
Procedure DrawBezier(pen est un Pen dynamique, pt1, pt2, pt3, pt4)

// Utilisation de POINTF à la place de POINT
SI TypeVar(pt1.X) = wlRéel_4 ALORS
GdipDrawBezier(Pointer, pen.Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
SINON
GdipDrawBezierI(Pointer, pen.Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
FIN



// Résumé : DrawBeziers
Procedure DrawBeziers(pen est un Pen dynamique, points)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
GdipDrawBeziers(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON
GdipDrawBeziersI(Pointer, pen.Pointer, &points, TableauOccurrence(points))
FIN



// Résumé : DrawClosedCurve
Procedure DrawClosedCurve(pen est un Pen dynamique, points, tension est un réel sur 4 = 0)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
SI MesParamètres[3]..Défaut ALORS
GdipDrawClosedCurve(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON
GdipDrawClosedCurve2(Pointer, pen.Pointer, &points, TableauOccurrence(points), tension)
FIN
SINON
SI MesParamètres[3]..Défaut ALORS
GdipDrawClosedCurveI(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON
GdipDrawClosedCurve2I(Pointer, pen.Pointer, &points, TableauOccurrence(points), tension)
FIN
FIN



// Résumé : DrawCurve
Procedure DrawCurve(pen est un Pen dynamique, points, tension est un réel sur 4 = 0, offset est un entier = 0, numberOfSegments est un entier = 0)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
SI MesParamètres[3]..Défaut _ET_ MesParamètres[4]..Défaut _ET_ MesParamètres[5]..Défaut ALORS
GdipDrawCurve(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON SI MesParamètres[4]..Défaut _ET_ MesParamètres[5]..Défaut ALORS
GdipDrawCurve2(Pointer, pen.Pointer, &points, TableauOccurrence(points), tension)
SINON
GdipDrawCurve3(Pointer, pen.Pointer, &points, TableauOccurrence(points), offset, numberOfSegments, tension)
FIN
SINON
SI MesParamètres[3]..Défaut _ET_ MesParamètres[4]..Défaut _ET_ MesParamètres[5]..Défaut ALORS
GdipDrawCurveI(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON SI MesParamètres[4]..Défaut _ET_ MesParamètres[5]..Défaut ALORS
GdipDrawCurve2I(Pointer, pen.Pointer, &points, TableauOccurrence(points), tension)
SINON
GdipDrawCurve3I(Pointer, pen.Pointer, &points, TableauOccurrence(points), offset, numberOfSegments, tension)
FIN
FIN



// Résumé : DrawEllipse
Procedure DrawEllipse(pen est un Pen dynamique, rect)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipDrawEllipse(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
SINON
GdipDrawEllipseI(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
FIN



// Résumé : DrawLine
Procedure DrawLine(pen est un Pen dynamique, pt1, pt2)

// Utilisation de POINTF à la place de POINT
SI TypeVar(pt1.X) = wlRéel_4 ALORS
GdipDrawLine(Pointer, pen.Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y)
SINON
GdipDrawLineI(Pointer, pen.Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y)
FIN



// Résumé : DrawLines
Procedure DrawLines(pen est un Pen dynamique, points)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
GdipDrawLines(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON
GdipDrawLinesI(Pointer, pen.Pointer, &points, TableauOccurrence(points))
FIN



// Résumé : DrawPath
Procedure DrawPath(pen est un Pen dynamique, path est un GraphicsPath dynamique)

GdipDrawPath(Pointer, pen.Pointer, path.Pointer)



// Résumé : DrawPie
Procedure DrawPie(pen est un Pen dynamique, rect, start_angle est un réel sur 4, sweep_angle est un réel sur 4)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipDrawPie(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
SINON
GdipDrawPieI(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
FIN



// Résumé : DrawPolygon
Procedure DrawPolygon(pen est un Pen dynamique, points)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
GdipDrawPolygon(Pointer, pen.Pointer, &points, TableauOccurrence(points))
SINON
GdipDrawPolygonI(Pointer, pen.Pointer, &points, TableauOccurrence(points))
FIN



// Résumé : DrawRectangle
Procedure DrawRectangle(pen est un Pen dynamique, rect)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipDrawRectangle(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
SINON
GdipDrawRectangleI(Pointer, pen.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
FIN



// Résumé : DrawRectangles
Procedure DrawRectangles(pen est un Pen dynamique, rects)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rects[1].X) = wlRéel_4 ALORS
GdipDrawRectangles(Pointer, pen.Pointer, &rects, TableauOccurrence(rects))
SINON
GdipDrawRectanglesI(Pointer, pen.Pointer, &rects, TableauOccurrence(rects))
FIN



// Résumé : DrawString
Procedure DrawString(s est une chaîne, font est un Font dynamique, brush est un Brush dynamique, layout est un RECTF, format est un StringFormat dynamique = Null)

u est une chaîne UNICODE = s

// Utilisation de RECTF à la place de RECT
GdipDrawString(Pointer, &u, Taille(u), font.Pointer, &layout, (format = Null ? Null SINON format.Pointer), brush.Pointer)



// Résumé : EndContainer
Procedure EndContainer(nState est un entier)

GdipEndContainer(Pointer, nState)



// Résumé : ClipRect
Procedure ClipRect(rect, combineMode est un entier = CombineModeExclude)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipSetClipRect(Pointer, rect.x, rect.y, rect.Width, rect.Height, combineMode)
SINON
GdipSetClipRectI(Pointer, rect.x, rect.y, rect.Width, rect.Height, combineMode)
FIN



// Résumé : <indiquez ici ce que fait la procédure>
Procedure ClipRegion(region est un Region dynamique, combineMode est un entier = CombineModeExclude)

GdipSetClipRegion(Pointer, region.Pointer, combineMode)



// Résumé : FillClosedCurve
Procedure FillClosedCurve(brush est un Brush dynamique, points, fillMode est un entier = FillModeAlternate, tension est un réel sur 4 = 0.5)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
SI MesParamètres[3]..Défaut ALORS
GdipFillClosedCurve(Pointer, brush.Pointer, &points, TableauOccurrence(points))
SINON
GdipFillClosedCurve2(Pointer, brush.Pointer, &points, TableauOccurrence(points), tension, fillMode)
FIN
SINON
SI MesParamètres[3]..Défaut ALORS
GdipFillClosedCurveI(Pointer, brush.Pointer, &points, TableauOccurrence(points))
SINON
GdipFillClosedCurve2I(Pointer, brush.Pointer, &points, TableauOccurrence(points), tension, fillMode)
FIN
FIN



// Résumé : FillEllipse
Procedure FillEllipse(brush est un Brush dynamique, rect)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipFillEllipse(Pointer, brush.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
SINON
GdipFillEllipseI(Pointer, brush.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
FIN



// Résumé : FillPath
Procedure FillPath(brush est un Brush dynamique, path est un GraphicsPath dynamique)

GdipFillPath(Pointer, brush.Pointer, path.Pointer)



// Résumé : FillPie
Procedure FillPie(brush est un Brush dynamique, rect, start_angle est un réel sur 4, sweep_angle est un réel sur 4)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipFillPie(Pointer, brush.Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
SINON
GdipFillPieI(Pointer, brush.Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
FIN



// Résumé : FillPolygon
Procedure FillPolygon(brush est un Brush dynamique, points, fillMode est un entier = FillModeAlternate)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
SI MesParamètres..NbReçus = 2 ALORS
GdipFillPolygon2(Pointer, brush.Pointer, &points, TableauOccurrence(points))
SINON
GdipFillPolygon(Pointer, brush.Pointer, &points, TableauOccurrence(points), fillMode)
FIN
SINON
SI MesParamètres..NbReçus = 2 ALORS
GdipFillPolygon2I(Pointer, brush.Pointer, &points, TableauOccurrence(points))
SINON
GdipFillPolygonI(Pointer, brush.Pointer, &points, TableauOccurrence(points), fillMode)
FIN
FIN



// Résumé : FillRectangle
Procedure FillRectangle(brush est un Brush dynamique, rect)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipFillRectangle(Pointer, brush.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
SINON
GdipFillRectangleI(Pointer, brush.Pointer, rect.X, rect.Y, rect.Width, rect.Height)
FIN



// Résumé : FillRectangles
Procedure FillRectangles(brush est un Brush dynamique, rects)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rects[1].X) = wlRéel_4 ALORS
GdipFillRectangles(Pointer, brush.Pointer, &rects, TableauOccurrence(rects))
SINON
GdipFillRectanglesI(Pointer, brush.Pointer, &rects, TableauOccurrence(rects))
FIN



// Résumé : FillRegion
Procedure FillRegion(brush est un Brush dynamique, region est un Region dynamique)

GdipFillRegion(Pointer, brush.Pointer, region.Pointer)



// Résumé : Flush
Procedure Flush(intention est un entier = FlushIntentionFlush)

GdipFlush(Pointer, intention)



// Résumé : FromHdc
Procedure GLOBALE FromHdc(hdc est un entier système, hdevice est un entier système = Null)

nPtr est un entier système
pclObjet est un Graphics dynamique = allouer un Graphics

// Crée l'objet
SI hdevice <> Null ALORS
GdipCreateFromHDC2(hdc, hdevice, &nPtr)
SINON
GdipCreateFromHDC(hdc, &nPtr)
FIN

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromHwnd
Procedure GLOBALE FromHwnd(hwnd est un entier système)

nPtr est un entier système
pclObjet est un Graphics dynamique = allouer un Graphics

// Crée l'objet
GdipCreateFromHWND(hwnd, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromImage
Procedure GLOBALE FromImage(Image est un Image dynamique)

nPtr est un entier système
pclObjet est un Graphics dynamique = allouer un Graphics

// Crée l'objet
GdipGetImageGraphicsContext(Image.Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromHwndICM
Procedure GLOBALE FromHwndICM(hwnd est un entier système)

nPtr est un entier système
pclObjet est un Graphics dynamique = allouer un Graphics

// Crée l'objet
GdipCreateFromHWNDICM(hwnd, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GetHdc
Procedure GetHdc()

nDC est un entier système

// Lecture de la propriété
GdipGetDC(Pointer, &nDC)

RENVOYER nDC



// Résumé : GetNearestColor
Procedure GetNearestColor(Color est un Color dynamique)

nArgb est un entier = Color.Value
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipGetNearestColor(Pointer, &nArgb)

// Allocation
pclColor.Value = nArgb

RENVOYER pclColor



// Résumé : IntersectClip
Procedure IntersectClip(region est un Region dynamique, combineMode = CombineModeIntersect)

GdipSetClipRegion(Pointer, region.Pointer, combineMode)



// Résumé : IntersectRect
Procedure IntersectRect(rect, combineMode = CombineModeIntersect)

SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipSetClipRect(Pointer, rect.X, rect.Y, rect.Width, rect.Height, combineMode)
SINON
GdipSetClipRectI(Pointer, rect.X, rect.Y, rect.Width, rect.Height, combineMode)
FIN



// Résumé : IsVisiblePoint
Procedure IsVisiblePoint(point)

bVal est un booléen

SI TypeVar(point.X) = wlRéel_4 ALORS
GdipIsVisiblePoint(Pointer, point.X, point.Y, &bVal)
SINON
GdipIsVisiblePointI(Pointer, point.X, point.Y, &bVal)
FIN

RENVOYER bVal



// Résumé : IsVisibleRect
Procedure IsVisibleRect(rect)

bVal est un booléen

SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipIsVisibleRect(Pointer, rect.X, rect.Y, rect.Width, rect.Height, &bVal)
SINON
GdipIsVisibleRectI(Pointer, rect.X, rect.Y, rect.Width, rect.Height, &bVal)
FIN

RENVOYER bVal



// Résumé : MeasureCharacterRanges
Procedure MeasureCharacterRanges(text est une chaîne, font est un Font dynamique, layout est un RECTF, format est un StringFormat dynamique)

u est une chaîne UNICODE = text
tabRgn est un tableau de Region dynamique
tabPtr est un tableau d'entiers système
nCount est un entier

// Lecture (1)
nCount = format.GetMeasurableCharacterRangeCount()

// Allocation (1)
Dimension(tabPtr, nCount)
Dimension(tabRgn, nCount)

// Lecture (2)
GdipMeasureCharacterRanges(Pointer, &u, Taille(u), font.Pointer, &layout, format.Pointer, nCount, &tabPtr)

// Allocation (2)
POUR i = 1 _A_ nCount
tabRgn[i] = allouer un Region
tabRgn[i].Pointer = tabPtr[i]
FIN

RENVOYER tabRgn



// Résumé : MeasureString
Procedure MeasureString(text est une chaîne, font est un Font dynamique, layout est un RECTF = [0, 0], format est un StringFormat dynamique = Null)

u est une chaîne UNICODE = text
box est un RECTF

// Lecture
GdipMeasureString(Pointer, &u, Taille(u), font.Pointer, &layout, (format = Null ? Null SINON format.Pointer), &box, Null, Null)

RENVOYER box



// Résumé : MultiplyTransform
Procedure MultiplyTransform(matrix est un Matrix dynamique, order est un entier = MatrixOrderPrepend)

GdipMultiplyWorldTransform(Pointer, matrix.Pointer, order)



// Résumé : ResetTransform
Procedure ResetTransform()

GdipResetWorldTransform(Pointer)



// Résumé : RotateTransform
Procedure RotateTransform(angle est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipRotateWorldTransform(Pointer, angle, order)



// Résumé : ScaleTransform
Procedure ScaleTransform(sx est un réel sur 4, sy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipScaleWorldTransform(Pointer, sx, sy, order)



// Résumé : TranslateTransform
Procedure TranslateTransform(dx est un réel sur 4, dy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipTranslateWorldTransform(Pointer, dx, dy, order)



// Résumé : ReleaseHdc
Procedure ReleaseHdc(hdc est un entier système)

GdipReleaseDC(Pointer, (hdc))



// Résumé : ResetClip
Procedure ResetClip()

GdipResetClip(Pointer)



// Résumé : Restore
Procedure Restore(nState est un entier)

GdipRestoreGraphics(Pointer, nState)



// Résumé : Save
Procedure Save()

nState est un entier

GdipSaveGraphics(Pointer, &nState)

RENVOYER nState



// Résumé : SetClip
Procedure SetClip(clip, combineMode est un entier = CombineModeReplace)

pclObj est un GDIPObjet dynamique

// On utilise un objet (Graphics, GraphicsPath ou Region)
SI TypeVar(clip) = wlInstance ALORS

SELON clip..Classe
CAS "Graphics"

pclObj <- clip
GdipSetClipGraphics(Pointer, pclObj.Pointer, combineMode)

CAS "GraphicsPath"

pclObj <- clip
GdipSetClipPath(Pointer, pclObj.Pointer, combineMode)

CAS "Region"

pclObj <- clip
GdipSetClipRegion(Pointer, pclObj.Pointer, combineMode)
FIN

// On utilise un RECT(F)
SINON SI TypeVar(clip) = wlStructure ALORS

// Si on utilise un RECTF à la place d'un RECT
SI TypeVar(clip.X) = wlRéel_4 ALORS
GdipSetClipRect(Pointer, clip.X, clip.Y, clip.Width, clip.Height, combineMode)
SINON
GdipSetClipRectI(Pointer, clip.X, clip.Y, clip.Width, clip.Height, combineMode)
FIN

// On utilise un pointer
SINON

GdipSetClipHrgn(Pointer, (clip), combineMode)
FIN



// Résumé : TransformPoints
Procedure TransformPoints(destSpace est un entier, srcSpace est un entier, pts)

SI TableauOccurrence(pts) > 0 ALORS

// Si on utilise un POINTF à la place d'un POINT
SI TypeVar(pts[1].X) = wlRéel_4 ALORS
GdipTransformPoints(Pointer, destSpace, srcSpace, &pts, TableauOccurrence(pts))
SINON
GdipTransformPointsI(Pointer, destSpace, srcSpace, &pts, TableauOccurrence(pts))
FIN
FIN



// Résumé : TranslateClip
Procedure TranslateClip(dx, dy)

// On utilise un réel à la place d'un entier
SI TypeVar(dx) = wlRéel_4 ALORS
GdipTranslateClip(Pointer, dx, dy)
SINON
GdipTranslateClipI(Pointer, dx, dy)
FIN



// Résumé : DrawImage
Procedure DrawImage(Image est un Image dynamique, x, y, width = -1, height = -1, unit est un entier = UnitPixel, xdst = 0, ydst = 0, widthdst = -1, heightdst = -1, imgAtt est un ImageAttributes dynamique = Null)

//
SI MesParamètres..NbReçus = 3 ALORS

// On utilise un réel à la place d'un entier
SI TypeVar(x) = wlRéel_4 ALORS
GdipDrawImage(Pointer, Image.Pointer, x, y)
SINON
GdipDrawImageI(Pointer, Image.Pointer, x, y)
FIN

SINON SI MesParamètres..NbReçus <= 6 ALORS

// On utilise un réel à la place d'un entier
SI TypeVar(width) = wlRéel_4 ALORS
GdipDrawImageRect(Pointer, Image.Pointer, x, y, width, height)
SINON
GdipDrawImageRectI(Pointer, Image.Pointer, x, y, width, height)
FIN

SINON SI MesParamètres..NbReçus = 8 ALORS

// On utilise un réel à la place d'un entier
SI TypeVar(width) = wlRéel_4 ALORS
GdipDrawImagePointRectI(Pointer, Image.Pointer, x, y, xdst, ydst, width, height, unit)
SINON
GdipDrawImagePointRectI(Pointer, Image.Pointer, x, y, xdst, ydst, width, height, unit)
FIN
SINON

// On utilise un réel à la place d'un entier
SI TypeVar(width) = wlRéel_4 ALORS
GdipDrawImageRectRect(Pointer, Image.Pointer, x, y, width, height, xdst, ydst, widthdst, heightdst, unit, (imgAtt = Null ? Null SINON imgAtt.Pointer), Null, Null)
SINON
GdipDrawImageRectRectI(Pointer, Image.Pointer, x, y, width, height, xdst, ydst, widthdst, heightdst, unit, (imgAtt = Null ? Null SINON imgAtt.Pointer), Null, Null)
FIN
FIN



// Résumé : DrawImageFX
Procedure DrawImageFX(Image est un Image dynamique, sourceRect est un RECTF, xForm est un Matrix dynamique, effect est un Effect dynamique, imgAtt est un ImageAttributes dynamique = Null, unit est un entier = UnitPixel)

GdipDrawImageFX(Pointer, Image.Pointer, &sourceRect, xForm.Pointer, effect.Pointer, (imgAtt = Null ? Null SINON imgAtt.Pointer), unit)



// Résumé : DrawImage
Procedure DrawCachedBitmap(Image est un CachedBitmap dynamique, x, y)

GdipDrawCachedBitmap(Pointer, Image.Pointer, x, y)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 02:29
GraphicsPath

GraphicsPath est une Classe
hérite de GDIPObjet

PRIVÉ
m_nType est un entier

FIN



Procedure Constructeur(points = Null, types = Null, fillMode est un entier = FillModeAlternate)

nPtr est un entier système
nDimPoints est un entier = TableauOccurrence(points)
nDimTypes est un entier = TableauOccurrence(types)
nPtrPoints est un entier système = (MesParamètres[1]..Défaut _OU_ nDimPoints = 0 ? Null SINON &points)
nPtrTypes est un entier système = (MesParamètres[2]..Défaut _OU_ nDimTypes = 0 ? Null SINON &types)

dbgAssertion(nDimPoints = nDimTypes, "Le nombre de points n'est pas identique au nombre de types")

// Paramètres par défaut
SI nPtrPoints = Null _ET_ nPtrTypes = Null ALORS

// Crée l'objet
GdipCreatePath(fillMode, &nPtr)
SINON

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS

// Crée l'objet
m_nType = wlRéel_4
GdipCreatePath2(nPtrPoints, nPtrTypes, nDimPoints, fillMode, &nPtr)
SINON

// Crée l'objet
m_nType = wlEntier
GdipCreatePath2I(nPtrPoints, nPtrTypes, nDimPoints, fillMode, &nPtr)
FIN
FIN

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure FillMode()

nFill est un entier

// Lecture de la propriété
GdipGetPathFillMode(Pointer, &nFill)

RENVOYER nFill



Procedure FillMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetPathFillMode(Pointer, nValeur)



Procedure PathTypes()

tabTypes est un tableau d'entiers sans signe sur 1
nCount est un entier

// Lecture de la propriété (1)
GdipGetPointCount(Pointer, &nCount)
tabTypes = allouer un tableau de (nCount) entiers sans signe sur 1

// Lecture de la propriété (2)
GdipGetPathTypes(Pointer, &tabTypes, nCount)

RENVOYER tabTypes



Procedure PRIVÉE PathTypes(v <utile>)



Procedure PointCount()

nCount est un entier

// Lecture de la propriété
GdipGetPointCount(Pointer, &nCount)

RENVOYER nCount



Procedure PRIVÉE PointCount(v <utile>)



Procedure PathPoints()

tabPoints est un tableau de POINT
tabPointsF est un tableau de POINTF
nCount est un entier

// Lecture de la propriété (1)
GdipGetPointCount(Pointer, &nCount)

SI m_nType = wlRéel_4 ALORS

tabPointsF = allouer un tableau de (nCount) POINTF

// Lecture de la propriété (2)
GdipGetPathPoints(Pointer, &tabPointsF, nCount)
RENVOYER tabPointsF
SINON

tabPoints = allouer un tableau de (nCount) POINT

// Lecture de la propriété (2)
GdipGetPathPointsI(Pointer, &tabPoints, nCount)
RENVOYER tabPoints
FIN



Procedure PRIVÉE PathPoints(v <utile>)



Procedure PathData()

stData est un PathData
nCount est un entier

// Lecture de la propriété (1)
GdipGetPointCount(Pointer, &nCount)

stData.Count = nCount
stData.Points = allouer un tableau de (nCount) POINTF
stData.Types = allouer un tableau de (nCount) entiers sans signe sur 1

// Lecture de la propriété (2)
GdipGetPathPoints(Pointer, &stData.Points, nCount)
GdipGetPathPoints(Pointer, &stData.Types, nCount)

RENVOYER stData



Procedure PRIVÉE PathData(v <utile>)



Procedure LastPoint()

stPoint est un POINTF

// Lecture de la propriété
GdipGetPathLastPoint(Pointer, &stPoint)

RENVOYER stPoint



Procedure PRIVÉE LastPoint(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un GraphicsPath dynamique = allouer un GraphicsPath

// Clone l'objet
GdipClonePath(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

// Détruit l'objet
GdipDeletePath(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : AddArc
Procedure AddArc(rect, start_angle est un réel sur 4, sweep_angle est un réel sur 4)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipAddPathArc(Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
SINON
GdipAddPathArcI(Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
FIN



// Résumé : AddBezier
Procedure AddBezier(pt1, pt2, pt3, pt4)

// Utilisation de POINTF à la place de POINT
SI TypeVar(pt1.X) = wlRéel_4 ALORS
GdipAddPathBezier(Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
SINON
GdipAddPathBezierI(Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
FIN



// Résumé : AddBeziers
Procedure AddBeziers(points)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
GdipAddPathBeziers(Pointer, &points, TableauOccurrence(points))
SINON
GdipAddPathBeziersI(Pointer, &points, TableauOccurrence(points))
FIN



// Résumé : AddEllipse
Procedure AddEllipse(rect)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipAddPathEllipse(Pointer, rect.X, rect.Y, rect.Width, rect.Height)
SINON
GdipAddPathEllipseI(Pointer, rect.X, rect.Y, rect.Width, rect.Height)
FIN



// Résumé : AddLine
Procedure AddLine(pt1, pt2)

// Utilisation de POINTF à la place de POINT
SI TypeVar(pt1.X) = wlRéel_4 ALORS
GdipAddPathLine(Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y)
SINON
GdipAddPathLineI(Pointer, pt1.X, pt1.Y, pt2.X, pt2.Y)
FIN



// Résumé : AddLines
Procedure AddLines(points)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
GdipAddPathLine2(Pointer, &points, TableauOccurrence(points))
SINON
GdipAddPathLine2I(Pointer, &points, TableauOccurrence(points))
FIN



// Résumé : AddPie
Procedure AddPie(rect, start_angle est un réel sur 4, sweep_angle est un réel sur 4)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipAddPathPie(Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
SINON
GdipAddPathPieI(Pointer, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle)
FIN



// Résumé : AddPolygon
Procedure AddPolygon(points)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
GdipAddPathPolygon(Pointer, &points, TableauOccurrence(points))
SINON
GdipAddPathPolygonI(Pointer, &points, TableauOccurrence(points))
FIN



// Résumé : AddRectangle
Procedure AddRectangle(rect)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS
GdipAddPathRectangle(Pointer, rect.X, rect.Y, rect.Width, rect.Height)
SINON
GdipAddPathRectangleI(Pointer, rect.X, rect.Y, rect.Width, rect.Height)
FIN



// Résumé : AddRectangles
Procedure AddRectangles(rects)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rects[1].X) = wlRéel_4 ALORS
GdipAddPathRectangles(Pointer, &rects, TableauOccurrence(rects))
SINON
GdipAddPathRectanglesI(Pointer, &rects, TableauOccurrence(rects))
FIN



// Résumé : AddPath
Procedure AddPath(addingPath est un GraphicsPath dynamique, connect est un booléen)

GdipAddPathPath(Pointer, addingPath.Pointer, connect)



// Résumé : AddClosedCurve
Procedure AddClosedCurve(points, tension est un réel sur 4 = 0)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
SI MesParamètres[2]..Défaut ALORS
GdipAddPathClosedCurve(Pointer, &points, TableauOccurrence(points))
SINON
GdipAddPathClosedCurve2(Pointer, &points, TableauOccurrence(points), tension)
FIN
SINON
SI MesParamètres[2]..Défaut ALORS
GdipAddPathClosedCurveI(Pointer, &points, TableauOccurrence(points))
SINON
GdipAddPathClosedCurve2I(Pointer, &points, TableauOccurrence(points), tension)
FIN
FIN



// Résumé : AddCurve
Procedure AddCurve(points, tension est un réel sur 4 = 0, offset est un entier = 0, numberOfSegments est un entier = 0)

// Utilisation de POINTF à la place de POINT
SI TypeVar(points[1].X) = wlRéel_4 ALORS
SI MesParamètres[2]..Défaut _ET_ MesParamètres[3]..Défaut _ET_ MesParamètres[4]..Défaut ALORS
GdipAddPathCurve(Pointer, &points, TableauOccurrence(points))
SINON SI MesParamètres[3]..Défaut _ET_ MesParamètres[4]..Défaut ALORS
GdipAddPathCurve2(Pointer, &points, TableauOccurrence(points), tension)
SINON
GdipAddPathCurve3(Pointer, &points, TableauOccurrence(points), offset, numberOfSegments, tension)
FIN
SINON
SI MesParamètres[2]..Défaut _ET_ MesParamètres[3]..Défaut _ET_ MesParamètres[4]..Défaut ALORS
GdipAddPathCurveI(Pointer, &points, TableauOccurrence(points))
SINON SI MesParamètres[3]..Défaut _ET_ MesParamètres[4]..Défaut ALORS
GdipAddPathCurve2I(Pointer, &points, TableauOccurrence(points), tension)
SINON
GdipAddPathCurve3I(Pointer, &points, TableauOccurrence(points), offset, numberOfSegments, tension)
FIN
FIN



// Résumé : Reset
Procedure Reset()

GdipResetPath(Pointer)



// Résumé : Reverse
Procedure Reverse()

GdipReversePath(Pointer)



// Résumé : Transform
Procedure Transform(matrix est un Matrix dynamique)

GdipTransformPath(Pointer, matrix.Pointer)



// Résumé : AddString
Procedure AddString(s est une chaîne, family est un FontFamily dynamique, style est un entier, emSize est un réel sur 4, layout, format est un StringFormat dynamique)

u est une chaîne UNICODE = s

// Utilisation de RECTF à la place de RECT
SI TypeVar(layout.X) = wlRéel_4 ALORS
GdipAddPathString(Pointer, u, Taille(u), family.Pointer, style, emSize, &layout, format.Pointer)
SINON
GdipAddPathStringI(Pointer, u, Taille(u), family.Pointer, style, emSize, &layout, format.Pointer)
FIN



// Résumé : ClearMarkers
Procedure ClearMarkers()

GdipClearPathMarkers(Pointer)



// Résumé : CloseAllFigures
Procedure CloseAllFigures()

GdipClosePathFigures(Pointer)



// Résumé : CloseFigure
Procedure CloseFigure()

GdipClosePathFigure(Pointer)



// Résumé : Flatten
Procedure Flatten(matrix est un Matrix dynamique = Null, flatness est un réel = FlatnessDefault)

GdipFlattenPath(Pointer, (matrix = Null ? Null SINON matrix.Pointer), flatness)



// Résumé : GetBounds
Procedure GetBounds(matrix est un Matrix dynamique = Null, pen est un Pen dynamique = Null)

stRect est un RECTF

// Lecture de la propriété
GdipGetPathWorldBounds(Pointer, &stRect, (matrix = Null ? Null SINON matrix.Pointer), (pen = Null ? Null SINON pen.Pointer))

RENVOYER stRect



// Résumé : IsOutlineVisible
Procedure IsOutlineVisible(point, pen est un Pen dynamique, graphics est un Graphics dynamique = Null)

bResult est un booléen

// Utilisation de POINTF à la place de POINT
SI TypeVar(point.X) = wlRéel_4 ALORS
GdipIsOutlineVisiblePathPoint(Pointer, point.X, point.Y, pen.Pointer, (graphics = Null ? Null SINON graphics.Pointer), &bResult)
SINON
GdipIsOutlineVisiblePathPointI(Pointer, point.X, point.Y, pen.Pointer, (graphics = Null ? Null SINON graphics.Pointer), &bResult)
FIN

RENVOYER bResult



// Résumé : IsVisible
Procedure IsVisible(point, graphics est un Graphics dynamique = Null)

bResult est un booléen

// Utilisation de POINTF à la place de POINT
SI TypeVar(point.X) = wlRéel_4 ALORS
GdipIsVisiblePathPoint(Pointer, point.X, point.Y, (graphics = Null ? Null SINON graphics.Pointer), &bResult)
SINON
GdipIsVisiblePathPointI(Pointer, point.X, point.Y, (graphics = Null ? Null SINON graphics.Pointer), &bResult)
FIN

RENVOYER bResult



// Résumé : SetMarker
Procedure SetMarker()

GdipSetPathMarker(Pointer)



// Résumé : StartFigure
Procedure StartFigure()

GdipStartPathFigure(Pointer)



// Résumé : Warp
Procedure Warp(destPoints est un tableau de POINTF, srcRect est un RECTF, matrix est un Matrix dynamique = Null, warpMode est un entier = WarpModePerspective, flatness est un réel sur 4 = FlatnessDefault)

GdipWarpPath(Pointer, (matrix = Null ? Null SINON matrix.Pointer), &destPoints, destPoints..Occurrence, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, warpMode, flatness)

,

// Résumé : Widen
Procedure Widen(pen est un Pen dynamique, matrix est un Matrix dynamique = Null, flatness est un réel sur 4 = FlatnessDefault)

GdipWidenPath(Pointer, pen.Pointer, (matrix = Null ? Null SINON matrix.Pointer), flatness)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 12:10
GraphicsPathIterator

GraphicsPathIterator est une Classe
hérite de GDIPObjet
FIN


Procedure Constructeur(path est un GraphicsPath dynamique = Null)

nPtr est un entier système

SI path <> Null ALORS

// Crée l'objet
GdipCreatePathIter(&nPtr, path.Pointer)
FIN

// Appel du constructeur Ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure Count()

nCount est un entier

// Lecture de la propriété
GdipPathIterGetCount(Pointer, &nCount)

RENVOYER nCount



Procedure PRIVÉE Count(v <utile>)



Procedure SubpathCount()

nCount est un entier

// Lecture de la propriété
GdipPathIterGetSubpathCount(Pointer, &nCount)

RENVOYER nCount



Procedure PRIVÉE SubpathCount(v <utile>)



Procedure HasCurve()

bVal est un booléen

// Lecture de la propriété
GdipPathIterHasCurve(Pointer, &bVal)

RENVOYER bVal



Procedure PRIVÉE HasCurve(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE PRIVÉE Clone()



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeletePathIter(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : CopyData
Procedure CopyData(points est un tableau de POINTF, types est un tableau d'entiers sans signe, startIndex est un entier, endIndex est un entier)

nCount est un entier

GdipPathIterCopyData(Pointer, &nCount, &points, &types, startIndex, endIndex)

RENVOYER nCount



// Résumé : CopyData
Procedure CopyData(points est un tableau de POINTF, types est un tableau d'entiers sans signe, startIndex est un entier, endIndex est un entier)

nCount est un entier

GdipPathIterCopyData(Pointer, &nCount, &points, &types, startIndex, endIndex)

RENVOYER nCount



// Résumé : Enumerate
Procedure Enumerate(points est un tableau de POINTF, types est un tableau d'entiers sans signe)

nCount est un entier

GdipPathIterEnumerate(Pointer, &nCount, &points, &types, points..Occurrence)

RENVOYER nCount



// Résumé : NextMarker
Procedure NextMarker(path est un GraphicsPath dynamique = Null, startIndex est un entier = 0, endIndex est un entier = 0)

nCount est un entier

SI path = Null ALORS
GdipPathIterNextMarker(Pointer, &nCount, &startIndex, &endIndex)
SINON
GdipPathIterNextMarkerPath(Pointer, &nCount, path.Pointer)
FIN

RENVOYER nCount



// Résumé : NextPathType
Procedure NextPathType(type est un entier sans signe sur 1, startIndex est un entier, endindex est un entier)

nCount est un entier

GdipPathIterNextPathType(Pointer, &nCount, &type, &startIndex, &endindex)

RENVOYER nCount



// Résumé : NextSubpath
Procedure NextSubpath(path est un GraphicsPath dynamique = Null, isClosed est un booléen = Faux, startIndex est un entier = 0, endIndex est un entier = 0)

nCount est un entier

SI path = Null ALORS
GdipPathIterNextSubpath(Pointer, &nCount, &startIndex, &endIndex, &isClosed)
SINON
GdipPathIterNextSubpathPath(Pointer, &nCount, path.Pointer, &isClosed)
FIN

RENVOYER nCount



// Résumé : Rewind
Procedure Rewind()

GdipPathIterRewind(Pointer)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 12:46
HatchBrush

Cria um HatchBrush : objeto baseado em um estilo portal, uma cor de primeiro plano e uma cor de fundo.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms535446%28v=vs.85%29.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534040%28v=vs.85%29.aspx

HatchBrush est une Classe
hérite de Brush

FIN



Procedure Constructeur(hatchStyle est un entier = HatchStyleMin, foreColor est un Color dynamique = Color.White, backColor est un Color dynamique = Color.Black)

nPtr est un entier système

// Crée l'objet
GdipCreateHatchBrush(hatchStyle, foreColor.Value, backColor.Value, &nPtr)

// Appel du constructeur ancêtre
Brush.Constructeur(nPtr)



Procedure Destructeur()



Procedure BackgroundColor()

nColor est un entier
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipGetHatchBackgroundColor(Pointer, &nColor)

// Allocation
pclColor.Value = nColor

RENVOYER pclColor



Procedure PRIVÉE BackgroundColor(v <utile>)



Procedure ForegroundColor()

nColor est un entier
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipGetHatchForegroundColor(Pointer, &nColor)

// Allocation
pclColor.Value = nColor

RENVOYER pclColor



Procedure PRIVÉE ForegroundColor(v <utile>)



Procedure HatchStyle()

nStyle est un entier

// Lecture de la propriété
GdipGetHatchStyle(Pointer, &nStyle)

RENVOYER nStyle



Procedure PRIVÉE HatchStyle(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un HatchBrush dynamique = allouer un HatchBrush

// Clone l'objet
GdipCloneBrush(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 13:20
Image

Você pode usar GDI+ para processar imagens que existem como arquivos em seus aplicativos.Fazer isso criando um novo objeto de um Image classe (como Bitmap), criar um Graphics de objeto que se refere a superfície de desenho que você deseja usar e chamando o DrawImage método da Graphics objeto.A imagem será pintada representada pela classe gráficos de superfície de desenho.Você pode usar o Editor de imagem para criar e editar arquivos de imagem no tempo de design e processá-las com GDI+ em tempo de execução.Para obter mais informações, consulte Editor de imagens para ícones.

A Imagem classe fornece métodos para carregar e salvar imagens raster (bitmaps) e imagens vetoriais (metafiles). Um objeto de imagem encapsula um bitmap ou um metarquivo e armazena atributos que você pode recuperar chamando vários métodos get. Você pode construir objetos imagem de uma variedade de tipos de arquivo, incluindo BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF e EMF.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534462%28v=vs.85%29.aspx

https://msdn.microsoft.com/pt-br/library/bb882579%28v=vs.110%29.aspx

https://msdn.microsoft.com/en-us/library/aa983623%28v=vs.71%29.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms535407%28v=vs.85%29.aspx

Image est une Classe
hérite de GDIPObjet
FIN



Procedure PROTÉGÉE Constructeur(nPtr est un entier système = Null)
Constructeur GDIPObjet(nPtr)



Procedure Destructeur()



Procedure Flags()

nFlags est un entier

// Lecture de la propriété
GdipGetImageFlags(Pointer, &nFlags)

RENVOYER nFlags



Procedure PRIVÉE Flags(v <utile>)



Procedure FrameDimensionsList()

tabGUID est un tableau de GUID
nCount est un entier

// Lecture de la propriété (1)
GdipImageGetFrameDimensionsCount(Pointer, &nCount)
Dimension(tabGUID, nCount)

// Lecture de la propriété (2)
GdipImageGetFrameDimensionsList(Pointer, &tabGUID, nCount)

RENVOYER tabGUID



Procedure PRIVÉE FrameDimensionsList(v <utile>)



Procedure Height()

nHeight est un entier

// Lecture de la propriété
GdipGetImageHeight(Pointer, &nHeight)

RENVOYER nHeight



Procedure PRIVÉE Height(v <utile>)



Procedure HorizontalResolution()

nHorz est un réel sur 4

// Lecture de la propriété
GdipGetImageHorizontalResolution(Pointer, &nHorz)

RENVOYER nHorz



Procedure PRIVÉE HorizontalResolution(v <utile>)



Procedure Palette()

stPalette est un ColorPalette
sz est un entier
buf est un Buffer
tabColors est un tableau d'entiers

// Lecture de la propriété (1)
GdipGetImagePaletteSize(Pointer, &sz)
buf = Répète(Caract(0), sz)

Transfert(&stPalette.Flags, &buf, 4)
Transfert(&stPalette.Count, (&buf) + 4, 4)

Dimension(stPalette.Entries, stPalette.Count)
Dimension(tabColors, stPalette.Count)

Transfert(&tabColors, (&buf) + 4, stPalette.Count * 4)

// Allocation
POUR i = 1 _A_ stPalette.Count
stPalette.Entries[i] = allouer un Color(tabColors[i])
FIN

RENVOYER stPalette



Procedure Palette(stValeur est un ColorPalette)

buf est un Buffer = Répète(Caract(0), 8 + stValeur.Count * 4)
tabColors est un tableau d'entiers

// Allocation
POUR TOUT pclColor DE stValeur.Entries
Ajoute(tabColors, pclColor.Value)
FIN

Transfert(&buf, &stValeur, 8)
Transfert((&buf) + 8, &tabColors, stValeur.Count * 4)

// Ecriture de la propriété
GdipSetImagePalette(Pointer, &buf)



Procedure PhysicalDimension()

stSize est un SIZEF

// Lecture de la propriété
GdipGetImageDimension(Pointer, &stSize.Width, &stSize.Height)

RENVOYER stSize



Procedure PRIVÉE PhysicalDimension(v <utile>)



Procedure PixelFormat()

nFormat est un entier

// Lecture de la propriété
GdipGetImagePixelFormat(Pointer, &nFormat)

RENVOYER nFormat



Procedure PRIVÉE PixelFormat(v <utile>)



Procedure PropertyIdList()

nCount est un entier
tabProp est un tableau d'entiers

// Lecture de la propriété (1)
GdipGetPropertyCount(Pointer, &nCount)
Dimension(tabProp, nCount)

// Lecture de la propriété (2)
GdipGetPropertyIdList(Pointer, nCount, &tabProp)

RENVOYER tabProp



Procedure PRIVÉE PropertyIdList(v <utile>)



Procedure PropertyItems()

nCount est un entier
sz est un entier
tabProp est un tableau de PropertyItem
buf est un Buffer
nPtr est un entier système
len est un entier
bufLoc est un Buffer
_byte est un tableau d'entier sans signe sur 1
_long est un tableau d'entier
_short est un tableau d'entier sur 2
_ptr est un entier système

// Lecture de la propriété (1)
GdipGetPropertySize(Pointer, &sz, &nCount)
Dimension(tabProp, nCount)
buf = Répète(Caract(0), sz)

// Lecture de la propriété (2)
GdipGetAllPropertyItems(Pointer, sz, nCount, &buf)
nPtr = &buf

// Allocation
POUR i = 1 _A_ nCount
bufLoc = ""

Transfert(&tabProp[i].id, nPtr, 4)
Transfert(&tabProp[i].length, nPtr + 4, 4)
Transfert(&tabProp[i].type, nPtr + 8, 4)
Transfert(&_ptr, nPtr + 12, 4)
len = tabProp[i].length

SELON tabProp[i].type
CAS PropertyTagTypeByte
Dimension(_byte, len)
Transfert(&_byte, _ptr, len)
tabProp[i].value = _byte

CAS PropertyTagTypeLong
Dimension(_long, len / 4)
Transfert(&_long, _ptr, len)
tabProp[i].value = _long

CAS PropertyTagTypeShort
Dimension(_short, len / 2)
Transfert(&_short, _ptr, len)
tabProp[i].value = _short

CAS PropertyTagTypeSLONG, PropertyTagTypeRational, PropertyTagTypeSRational
bufLoc = Répète(Caract(0), len)
Transfert(&bufLoc, _ptr, len)
tabProp[i].value = bufLoc

CAS PropertyTagTypeASCII
bufLoc = Répète(Caract(0), len - 1)
Transfert(&bufLoc, _ptr, len - 1)
tabProp[i].value = bufLoc

CAS PropertyTagTypeUndefined
bufLoc = Répète(Caract(0), len)
Transfert(&bufLoc, _ptr, len)
tabProp[i].value = bufLoc
FIN

nPtr += 16
FIN

RENVOYER tabProp



Procedure PropertyItems(Valeur)



Procedure RawFormat()

stGUID est une GUID

// Lecture de la propriété
GdipGetImageRawFormat(Pointer, &stGUID)

RENVOYER stGUID



Procedure PRIVÉE RawFormat(v <utile>)



Procedure Width()

nWidth est un entier

// Lecture de la propriété
GdipGetImageWidth(Pointer, &nWidth)

RENVOYER nWidth



Procedure PRIVÉE Width(v <utile>)



Procedure Size()

// Allocation
stSize est un SIZE = [Width, Height]

RENVOYER stSize



Procedure PRIVÉE Size(v <utile>)



Procedure VerticalResolution()

nVert est un entier

// Lecture de la propriété
GdipGetImageVerticalResolution(Pointer, &nVert)

RENVOYER nVert



Procedure PRIVÉE VerticalResolution(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un Image dynamique = allouer un Image

// Clone l'objet
GdipCloneImage(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDisposeImage(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : FromFile
Procedure GLOBALE fromFile(fileName est une chaîne, bICM est un booléen = Faux)

nPtr est un entier système
pclObjet est un Image dynamique = allouer un Image
u est une chaîne UNICODE = fileName

// Crée l'objet
SI bICM ALORS
GdipLoadImageFromFileICM(&u, &nPtr)
SINON
GdipLoadImageFromFile(&u, &nPtr)
FIN

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : FromFile
Procedure GLOBALE FromMemory(buffer est un Buffer, bICM est un booléen = Faux)

nPtr est un entier système
pclObjet est un Image dynamique = allouer un Image
nPtrStream est un entier système
nPtrGlobal est un entier système

// Crée un pointeur mémoire
nPtrGlobal = API("kernel32", "GlobalAlloc", 0x0040, Taille(buffer))
Transfert(nPtrGlobal, &buffer, Taille(buffer))

// Crée un IStream sur le pointeur mémoire
API("ole32", "CreateStreamOnHGlobal", nPtrGlobal, Vrai, &nPtrStream)

// Crée l'objet
SI bICM ALORS
GdipLoadImageFromStreamICM(nPtrStream, &nPtr)
SINON
GdipLoadImageFromStream(nPtrStream, &nPtr)
FIN

// Libère le IStream
AppelInterface(nPtrStream, 2)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GetBounds
Procedure GetBounds(pageUnit est un entier)

stRectF est un RECTF

// Lecture de la propriété
GdipGetImageBounds(Pointer, &stRectF, &pageUnit)

RENVOYER stRectF



// Résumé : GetEncoderParameterList
Procedure GetEncoderParameterList(encoder est un GUID)

sz est un entier
buffer est un Buffer
encParam est un EncoderParameters

// Lecture de la propriété (1)
GdipGetEncoderParameterListSize(Pointer, &encoder, &sz)
buffer = Répète(Caract(0), sz)

// Lecture de la propriété (2)
GdipGetEncoderParameterList(Pointer, &encoder, sz, &buffer)

// Allocation
Transfert(&encParam.Count, &buffer, 4)
Dimension(encParam.Parameter, encParam.Count)
Transfert(&encParam.Parameter, (&buffer) + 4, (encParam.Count * TableauInfo(encParam.Parameter, tiTailleElément)))

RENVOYER encParam



// Résumé : GetFrameCount
Procedure GetFrameCount(frameDimension est un GUID)

nCount est un entier

// Lecture de la propriété
GdipImageGetFrameCount(Pointer, &frameDimension, &nCount)

RENVOYER nCount



// Résumé : GetPropertyItem
Procedure GetPropertyItem(propid est un entier)

stProp est un PropertyItem
sz est un entier
buf est un Buffer
bufLoc est un Buffer
_ptr est un entier système
len est un entier
nPtr est un entier système
_byte est un tableau d'entiers sans signe sur 1
_short est un tableau d'entiers sur 2
_long est un tableau d'entiers

// Lecture de la propriété (1)
GdipGetPropertyItemSize(Pointer, propid, &sz)
buf = Répète(Caract(0), sz)

// Lecture de la propriété (2)
GdipGetPropertyItem(Pointer, propid, sz, &buf)
nPtr = &buf

Transfert(&stProp.id, nPtr, 4)
Transfert(&stProp.length, nPtr + 4, 4)
Transfert(&stProp.type, nPtr + 8, 4)
Transfert(&_ptr, nPtr + 12, 4)
len = stProp.length

SELON stProp.type
CAS PropertyTagTypeByte
Dimension(_byte, len)
Transfert(&_byte, _ptr, len)
stProp.value = _byte

CAS PropertyTagTypeLong
Dimension(_long, len / 4)
Transfert(&_long, _ptr, len)
stProp.value = _long

CAS PropertyTagTypeShort
Dimension(_short, len / 2)
Transfert(&_short, _ptr, len)
stProp.value = _short

CAS PropertyTagTypeSLONG, PropertyTagTypeRational, PropertyTagTypeSRational
bufLoc = Répète(Caract(0), len)
Transfert(&bufLoc, _ptr, len)
stProp.value = bufLoc

CAS PropertyTagTypeASCII
bufLoc = Répète(Caract(0), len - 1)
Transfert(&bufLoc, _ptr, len - 1)
stProp.value = bufLoc

CAS PropertyTagTypeUndefined
bufLoc = Répète(Caract(0), len)
Transfert(&bufLoc, _ptr, len)
stProp.value = bufLoc
FIN

RENVOYER stProp



// Résumé : GetThumbnailImage
Procedure GetThumbnailImage(thbwidth est un entier, thbheight est un entier)

nPtr est un entier système
pclImage est un Image dynamique = allouer un Image

// Lecture de la propriété
GdipGetImageThumbnail(Pointer, thbwidth, thbheight, &nPtr, Null, Null)

// Allocation
pclImage.Pointer = nPtr

RENVOYER pclImage



// Résumé : RemovePropertyItem
Procedure RemovePropertyItem(propid est un entier)

GdipRemovePropertyItem(Pointer, propid)



// Résumé : RotateFlip
Procedure RotateFlip(flip est un entier)

GdipImageRotateFlip(Pointer, flip)



// Résumé : GetEncoderFormat
Procedure GetEncoderFormat(format est un GUID)

encoders est un tableau de ImageCodecInfo
nCount est un entier
sz est un entier
bufEnc est un Buffer
encoder est un ImageCodecInfo dynamique = Null

// Lecture de la propriété (1)
GdipGetImageEncodersSize(&nCount, &sz)
bufEnc = Répète(Caract(0), sz)
Dimension(encoders, nCount)

// Lecture de la propriété (2)
GdipGetImageEncoders(nCount, sz, &bufEnc)
Transfert(&encoders, &bufEnc, TableauInfo(encoders, tiTailleElément) * nCount)

// Récupère l'encoder
POUR i = 1 _A_ nCount
SI IsEqualGUID(encoders[i].FormatID, format) ALORS
encoder = encoders[i]
SORTIR
FIN
FIN

RENVOYER encoder



// Résumé : Save
Procedure Save(filename est une chaîne, format est un GUID = RawFormat, bMemory est un booléen = Faux, encoderParams est un EncoderParameters dynamique = Null)

encoder est un ImageCodecInfo dynamique = GetEncoderFormat(format)
u est une chaîne UNICODE = filename
bufImage est un Buffer
nPtrStream est un entier système
nPtrGlobal est un entier système
nPtrLock est un entier système

SI encoder = Null ALORS

// Tente avec le format RAW
encoder = GetEncoderFormat(RawFormat)
FIN

SI encoder <> Null ALORS

// Ecriture
SI bMemory ALORS

// Crée un pointeur mémoire
nPtrGlobal = API("kernel32", "GlobalAlloc", 0x0042, 0)

// Crée un IStream sur le pointeur mémoire
API("ole32", "CreateStreamOnHGlobal", nPtrGlobal, Vrai, &nPtrStream)

// Ecriture
GdipSaveImageToStream(Pointer, nPtrStream, &encoder.Clsid, (encoderParams = Null ? Null SINON &encoderParams))
bufImage = Répète(Caract(0), API("kernel32", "GlobalSize", nPtrGlobal))

// Lecture
nPtrLock = API("kernel32", "GlobalLock", nPtrGlobal)
Transfert(&bufImage, nPtrLock, Taille(bufImage))
API("kernel32", "GlobalUnlock", nPtrGlobal)

// Libère le IStream
AppelInterface(nPtrStream, 2)
SINON

// Ecriture
RENVOYER (GdipSaveImageToFile(Pointer, &u, &encoder.Clsid, (encoderParams = Null ? Null SINON &encoderParams)) = Ok)
FIN
FIN

SI bMemory ALORS
RENVOYER bufImage
SINON
RENVOYER Faux
FIN



// Résumé : SaveAdd
Procedure SaveAdd(encoderParams est un EncoderParameters, Image est un Image dynamique = Null)

SI Image = Null ALORS
GdipSaveAdd(Pointer, &encoderParams)
SINON
GdipSaveAddImage(Pointer, Image.Pointer, &encoderParams)
FIN



// Résumé : SelectActiveFrame
Procedure SelectActiveFrame(frameDimension est un GUID, frameIndex est un entier)

GdipImageSelectActiveFrame(Pointer, &frameDimension, frameIndex)



// Résumé : SetPropertyItem
Procedure SetPropertyItem(propItem est un PropertyItem)

bufProp est un Buffer
nPtr est un entier système
_tab est un tableau dynamique
_sz est un Buffer
_nz est un entier

bufProp = Répète(Caract(0), 12)

// Transfert de l'entête
Transfert(&bufProp, &propItem, 12)
bufProp += Répète(Caract(0), 4)

// Pointeur mémoire
nPtr = &bufProp + 16
Transfert((&bufProp) + 12, &nPtr, 4)

// Données
bufProp += Répète(Caract(0), propItem.length)

SELON propItem.type
CAS PropertyTagTypeByte
_tab = allouer un tableau de (propItem.length) entiers sans signe sur 1
_tab = propItem.value
Transfert(nPtr, &_tab, propItem.length)
CAS PropertyTagTypeLong
_nz = propItem.length / 4
_tab = allouer un tableau de (_nz) entiers
_tab = propItem.value
Transfert(nPtr, &_tab, propItem.length)
CAS PropertyTagTypeShort
_nz = propItem.length / 2
_tab = allouer un tableau de (_nz) entiers sur 2
_tab = propItem.value
Transfert(nPtr, &_tab, propItem.length)
AUTRES CAS
_sz = propItem.value
Transfert(nPtr, &_sz, propItem.length)
FIN

GdipSetPropertyItem(Pointer, &bufProp)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 14:04
ImageAttributes

Um ImageAttributes objeto contém informações sobre como as cores de bitmap e metafile são manipulados durante o processamento. Um ImageAttributes objeto mantém várias configurações de cor-de ajustamento, incluindo matrizes cor-de ajuste, matrizes em tons de cinza-ajuste, os valores gamma-correção, mesas cor-mapa, e os valores de cor-de limiar.

http://www.c-sharpcorner.com/uploadfile/mahesh/image-attributes-and-the-imageattributes-class-in-gdi/

ImageAttributes est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur()

nPtr est un entier système

// Crée l'objet
GdipCreateImageAttributes(&nPtr)

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



// Résumé : ClearBrushRemapTable
Procedure ClearBrushRemapTable()

ClearRemapTable(ColorAdjustTypeBrush)



// Résumé : ClearColorKey
Procedure ClearColorKey(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesColorKeys(Pointer, type, Faux, 0, 0)



// Résumé : ClearColorMatrix
Procedure ClearColorMatrix(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesColorMatrix(Pointer, type, Faux, Null, Null, ColorMatrixFlagsDefault)



// Résumé : ClearGamma
Procedure ClearGamma(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesGamma(Pointer, type, Faux, 0)



// Résumé : ClearNoOp
Procedure ClearNoOp(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesNoOp(Pointer, type, Faux)



// Résumé : ClearOutputChannel
Procedure ClearOutputChannel(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesOutputChannel(Pointer, type, Faux, ColorChannelFlagsLast)



// Résumé : ClearOutputChannelColorProfile
Procedure ClearOutputChannelColorProfile(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesOutputChannelColorProfile(Pointer, type, Faux, Null)



// Résumé : ClearRemapTable
Procedure ClearRemapTable(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesRemapTable(Pointer, type, Faux, 0, Null)



// Résumé : ClearThreshold
Procedure ClearThreshold(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesThreshold(Pointer, type, Faux, 0)



// Résumé : SetColorMatrix
Procedure SetColorMatrix(colormatrix est un ColorMatrix, grayMatrix est un ColorMatrix dynamique, type est un entier = ColorAdjustTypeDefault, flags est un entier = ColorMatrixFlagsDefault)

GdipSetImageAttributesColorMatrix(Pointer, type, Faux, &colormatrix, (grayMatrix = Null ? Null SINON &grayMatrix), flags)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un ImageAttributes dynamique = allouer un ImageAttributes

// Clone l'objet
GdipCloneImageAttributes(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDisposeImageAttributes(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : GetAdjustedPalette
Procedure GetAdjustedPalette(Palette est un ColorPalette, type est un entier)

tabPalette est un tableau d'entiers
vcPalette est composée de
flags est un entier
Count est un entier
ptr est un entier système
FIN

// Lecture de la propriété
GdipGetImageAttributesAdjustedPalette(Pointer, &vcPalette, &type)

// Allocation
Dimension(tabPalette, vcPalette.count)
Transfert(&tabPalette, vcPalette.ptr, TableauInfo(tabPalette, tiTailleTotale))

Palette.Count = vcPalette.count
Palette.Flags = vcPalette.Flags

POUR i = 1 _A_ tabPalette..Occurrence
Ajoute(Palette.Entries, allouer un Color(tabPalette[i]))
FIN



// Résumé : SetBrushRemapTable
Procedure SetBrushRemapTable(map est un tableau de ColorMap)

SetRemapTable(map, ColorAdjustTypeBrush)



// Résumé : SetGamma
Procedure SetGamma(gamma est un réel sur 4, type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesGamma(Pointer, type, Vrai, gamma)



// Résumé : SetNoOp
Procedure SetNoOp(type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesNoOp(Pointer, type, Vrai)



// Résumé : SetOutputChannel
Procedure SetOutputChannel(flag est un entier = ColorChannelFlagsLast, type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesOutputChannel(Pointer, type, Vrai, flag)



// Résumé : SetOutputChannelColorProfile
Procedure SetOutputChannelColorProfile(colorProfileFilename est une chaîne, type est un entier = ColorAdjustTypeDefault)

u est une chaîne UNICODE = colorProfileFilename
GdipSetImageAttributesOutputChannelColorProfile(Pointer, type, Vrai, &u)



// Résumé : SetRemapTable
Procedure SetRemapTable(map est un tableau de ColorMap, type est un entier = ColorAdjustTypeDefault)

_gdiMap est une structure
oldC est un entier
newC est un entier
FIN

tabMap est un tableau de _gdiMap
stMap est un _gdiMap

// Allocation
POUR i = 1 _A_ map..Occurrence
stMap = [map[i].oldColor.Value, map[i].newColor.Value]
Ajoute(tabMap, stMap)
FIN

// Ecriture de la propriété
GdipSetImageAttributesRemapTable(Pointer, type, Vrai, map..Occurrence, &tabMap)



// Résumé : SetThreshold
Procedure SetThreshold(threshold est un réel sur 4, type est un entier = ColorAdjustTypeDefault)

GdipSetImageAttributesThreshold(Pointer, type, Vrai, threshold)



// Résumé : SetWrapMode
Procedure SetWrapMode(mode est un entier, color_ est un Color dynamique = Color.Black, clamp est un booléen = Faux)

GdipSetImageAttributesWrapMode(Pointer, mode, color_.Value, clamp)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 14:16
InstalledFontCollection

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534469%28v=vs.85%29.aspx

https://msdn.microsoft.com/de-de/library/office/system.drawing.text.installedfontcollection%28v=vs.71%29

InstalledFontCollection est une Classe
hérite de FontCollection
FIN



Procedure Constructeur()

nPtr est un entier système

// Crée l'objet
GdipNewInstalledFontCollection(&nPtr)

// Allocation
FontCollection.Constructeur(nPtr)



Procedure Destructeur()



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

// Libère l'objet
GDIPObjet.Dispose()


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 14:41
LinearGradientBrush

LinearGradientBrush e PathGradientBrush para preencher um retângulo e um caminho.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms535353%28v=vs.85%29.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534043%28v=vs.85%29.aspx

http://www.c-sharpcorner.com/uploadfile/dbeniwal321/using-lineargradientbrush-and-pathgradientbrush-in-gdi/


LinearGradientBrush est une Classe
hérite de Brush
FIN



Procedure Constructeur(point1 = Null, point2 = Null, color1 est un Color dynamique = Color.White, color2 est un Color dynamique = Color.White, wrapMode est un entier = WrapModeTile, linearGradientMode est un entier = 0, angle est un réel sur 4 = 0, isAngleScaleable est un booléen = Faux)

nPtr est un entier système
stRect est un RECT
stRectF est un RECTF

// Construction à partir d'un RECT(F)
SI MesParamètres[6]..Défaut = Faux ALORS

// Utilisation de POINTF à la place de POINT
SI TypeVar(point1.X) = wlRéel_4 ALORS

stRectF = [point1.x, point1.y, point2.x - point1.x, point2.y - point1.y]

// Crée l'objet
GdipCreateLineBrushFromRect(&stRectF, color1.Value, color2.Value, linearGradientMode, wrapMode, &nPtr)
SINON

stRect = [point1.x, point1.y, point2.x - point1.x, point2.y - point1.y]

// Crée l'objet
GdipCreateLineBrushFromRectI(&stRectF, color1.Value, color2.Value, linearGradientMode, wrapMode, &nPtr)
FIN

// Construction à partir d'un RECT(F) et d'un angle
SINON SI MesParamètres[6]..Défaut = Faux ALORS

// Utilisation de POINTF à la place de POINT
SI TypeVar(point1.X) = wlRéel_4 ALORS

stRectF = [point1.x, point1.y, point2.x - point1.x, point2.y - point1.y]

// Crée l'objet
GdipCreateLineBrushFromRectWithAngle(&stRectF, color1.Value, color2.Value, angle, isAngleScaleable, wrapMode, &nPtr)
SINON

stRect = [point1.x, point1.y, point2.x - point1.x, point2.y - point1.y]

// Crée l'objet
GdipCreateLineBrushFromRectWithAngleI(&stRectF, color1.Value, color2.Value, angle, isAngleScaleable, wrapMode, &nPtr)
FIN

// Construction à partir de deux points
SINON

// Utilisation de POINTF à la place de POINT
SI TypeVar(point1.X) = wlRéel_4 ALORS

// Crée l'objet
GdipCreateLineBrush(&point1, &point2, color1.Value, color2.Value, wrapMode, &nPtr)
SINON

// Crée l'objet
GdipCreateLineBrushI(&point1, &point2, color1.Value, color2.Value, wrapMode, &nPtr)
FIN
FIN

// Appel du constructeur ancêtre
Brush.Constructeur(nPtr)



Procedure Destructeur()



Procedure Blend()

stBlend est un Blend
nCount est un entier

// Lecture de la propriété (1)
GdipGetLineBlendCount(Pointer, &nCount)
stBlend.Factors = allouer un tableau de (nCount) réels sur 4
stBlend.Positions = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetLineBlend(Pointer, &stBlend.Factors, &stBlend.Positions, nCount)

RENVOYER stBlend



Procedure Blend(stValeur est un Blend)

// Ecriture de la propriété
GdipSetLineBlend(Pointer, &stValeur.Factors, &stValeur.Positions, stValeur.Positions..Occurrence)



Procedure GammaCorrection()

bGamma est un booléen

// Lecture de la propriété
GdipGetLineGammaCorrection(Pointer, &bGamma)

RENVOYER bGamma



Procedure GammaCorrection(bValeur est un booléen)

// Ecriture de la propriété
GdipSetLineGammaCorrection(Pointer, bValeur)



Procedure InterpolationColors()

tabARGB est un tableau d'entiers
stInterpol est un ColorBlend
nCount est un entier

// Lecture de la propriété (1)
GdipGetLinePresetBlendCount(Pointer, &nCount)
tabARGB = allouer un tableau de (nCount) entiers
stInterpol.Colors = allouer un tableau de (nCount) Color dynamique
stInterpol.Positions = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetLinePresetBlend(Pointer, &tabARGB, &stInterpol.Positions, nCount)

// Allocation
POUR i = 1 _A_ nCount
stInterpol.Colors[i] = allouer un Color(tabARGB[i])
FIN

RENVOYER stInterpol



Procedure InterpolationColors(stValeur est un ColorBlend)

tabARGB est un tableau d'entiers

// Allocation
POUR CHAQUE pclColor DE stValeur.Colors
Ajoute(tabARGB, pclColor.Value)
FIN

// Ecriture de la propriété
GdipSetLinePresetBlend(Pointer, &tabARGB, &stValeur.Positions, stValeur.Positions..Occurrence)



Procedure LinearColors()

tabARGB est un tableau de 2 entiers
tabColors est un tableau de 2 Color dynamique

// Lecture de la propriété
GdipGetLineColors(Pointer, &tabARGB)

// Allocation
tabColors[1] = allouer un Color(tabARGB[1])
tabColors[2] = allouer un Color(tabARGB[2])

RENVOYER tabColors



Procedure LinearColors(tabValeur est un tableau de 2 Color dynamique)

tabARGB est un tableau de 2 entiers

// Allocation
tabARGB[1] = tabValeur[1].Value
tabARGB[2] = tabValeur[2].Value

// Ecriture de la propriété
GdipSetLineColors(Pointer, tabARGB[1], tabARGB[2])



Procedure Rectangle()

stRect est un RECT

// Lecture de la propriété
GdipGetLineRectI(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE Rectangle(v <utile>)



Procedure RectangleF()

stRect est un RECTF

// Lecture de la propriété
GdipGetLineRect(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE RectangleF(v <utile>)



Procedure Transform()

nPtr est un entier système
pclObjet est un Matrix dynamique = allouer un Matrix

// Lecture de la propriété
GdipGetLineTransform(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Transform(pclValeur est un Matrix dynamique)

// Ecriture de la propriété
GdipSetLineTransform(Pointer, pclValeur.Pointer)



Procedure WrapMode()

nWrap est un entier

// Lecture de la propriété
GdipGetLineWrapMode(Pointer, &nWrap)

RENVOYER nWrap



Procedure WrapMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetLineWrapMode(Pointer, nValeur)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un LinearGradientBrush dynamique = allouer un LinearGradientBrush

// Clone l'objet
GdipCloneBrush(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : MultiplyTransform
Procedure MultiplyTransform(matrix est un Matrix dynamique, order est un entier = MatrixOrderPrepend)

GdipMultiplyLineTransform(Pointer, matrix.Pointer, order)



// Résumé : ResetTransform
Procedure ResetTransform()

GdipResetLineTransform(Pointer)



// Résumé : RotateTransform
Procedure RotateTransform(angle est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipRotateLineTransform(Pointer, angle, order)



// Résumé : ScaleTransform
Procedure ScaleTransform(sx est un réel sur 4, sy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipScaleLineTransform(Pointer, sx, sy, order)



// Résumé : TranslateTransform
Procedure TranslateTransform(dx est un réel sur 4, dy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipTranslateLineTransform(Pointer, dx, dy, order)



// Résumé : SetBlendTriangularShape
Procedure SetBlendTriangularShape(focus est un réel sur 4, scale est un réel sur 4 = 1.0)

// Ecriture de la propriété
GdipSetLineLinearBlend(Pointer, focus, scale)



// Résumé : SetSigmaBellShape
Procedure SetSigmaBellShape(focus est un réel sur 4, scale est un réel sur 4 = 1.0)

// Ecriture de la propriété
GdipSetLineSigmaBlend(Pointer, focus, scale)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 15:37
Matrix Class

Uma matriz de objecto representa uma matriz de 3 x 3 que, por sua vez, representa uma transformação afim. A matriz de objectos armazena apenas seis dos 9 números em uma matriz de 3 x 3, porque todos os 3 × 3 matrizes que representam transformações afins têm a mesma terceira coluna (0, 0, 1). Transformações afins incluem girar, dimensionar, refletindo, corte, e tradução. Em GDI +, a Matrix classe fornece a base para a realização de transformações afins em desenhos vetoriais, imagens e texto.

Um m × n matriz é um conjunto de números dispostos em m linhas e n ​​colunas. A ilustração a seguir mostra várias matrizes.





Ilustração que mostra seis matrizes de dimensões variáveis





Você pode adicionar duas matrizes do mesmo tamanho pela adição de elementos individuais. A ilustração a seguir mostra dois exemplos de adição de matrizes.

Ilustração que mostra como executar adição de matrizes

Um m × n matriz pode ser multiplicada por um n × p matriz, eo resultado é uma m × p matriz. O número de colunas na primeira matriz tem de ser o mesmo que o número de linhas na segunda matriz. Por exemplo, uma matriz de 4 × 2 pode ser multiplicado por uma matriz 2 x 3 para produzir uma matriz 4 x 3.

Pontos no plano e linhas e colunas de uma matriz pode ser pensado como vectores. Por exemplo, (2, 5) é um vector com dois componentes, e (3, 7, 1) é um vector com três componentes. O produto escalar de dois vectores é definido como se segue:

(A, b) ?? (C, d) = AC + BD

(A, b, c) ?? (D, e, f) = ad + estar + cf

Por exemplo, o produto de ponto de (2, 3) e (5, 4), (2) (5) + (3) (4) = 22. O produto de ponto de (2, 5, 1) e (4, 3, 1) é (2) (4) + (5) (3) + (1) (1) = 24. Note-se que o produto de ponto de dois vectores é um número, não um outro vector. Observe também que você pode calcular o produto escalar somente se os dois vetores têm o mesmo número de componentes.

Sejam A (i, j) é a entrada na matriz A em o i th fileira e o j th coluna. Por exemplo, um (3, 2) é a entrada na matriz A no 3 rd linha e o 2 nd coluna. Suponhamos que A, B, e C são matrizes, e AB = C. As entradas de C são calculados como se segue:

C (i, j) = (linha i de A) ?? (Coluna j de B)

A ilustração a seguir mostra vários exemplos de multiplicação de matrizes.





Ilustração que mostra como executar a multiplicação de matrizes

Se você pensar em um ponto no plano como uma matriz 1 × 2, você pode transformar esse ponto pela multiplicação por uma matriz de 2 × 2. A ilustração a seguir mostra várias transformações aplicadas ao ponto (2, 1).





Ilustração que mostra como usar a multiplicação de matrizes para dimensionar, girar ou refletir um ponto em um plano

Todas as transformações mostradas na figura anterior são transformações lineares. Certas outras transformações, tal como a tradução, não é linear, e não pode ser expressa como a multiplicação por uma matriz 2 x 2. Suponha que você queira começar com o ponto (2, 1), girá-lo 90 graus, traduzi-la 3 unidades na direção x, e traduzi-lo 4 unidades na direção y. Você pode fazer isso através da realização de uma multiplicação de matrizes seguido por uma adição de matrizes.





Ilustração que mostra como a multiplicação de matrizes e adição pode girar um ponto e traduzi-lo duas vezes

A transformação linear (multiplicação por uma matriz 2 x 2) seguido de tradução (adição de uma matriz 1 × 2) é chamado uma transformação afim. Uma alternativa ao armazenamento de uma transformação afim de um par de matrizes (um para a parte linear e outra para a tradução) é para guardar toda a transformação em uma matriz de 3 x 3. Para fazer isto funcionar, um ponto no plano deve ser armazenado numa matriz de 1 × 3 com um manequim 3 de coordenadas. A técnica usual é a de fazer coordena todas as 3 igual a 1. Por exemplo, o ponto (2, 1) é representado pela matriz [2 1 1]. A ilustração a seguir mostra uma transformação afim (girar 90 graus; traduzir 3 unidades na direção x, 4 unidades na direção y) expressa como a multiplicação por uma única matriz 3 × 3.





Ilustração que mostra como a multiplicação de matrizes pode executar uma transformação afim

No exemplo anterior, o ponto (2, 1) é mapeado para o ponto (2, 6). Note-se que a terceira coluna da matriz de 3 x 3 contém os números 0, 0, 1. Este será sempre o caso para a matriz de 3 x 3 de uma transformação afim. Os números importantes são os seis números nas colunas 1 e 2. A 2 × 2 parte superior esquerda da matriz representa a parte linear da transformação, e as duas primeiras entradas na 3ª fila representam a tradução.





Ilustração que mostra que as duas primeiras colunas são mais significativas para uma matriz de 3x3 de uma transformação afim

No Windows GDI + você pode armazenar uma transformação afim em uma Matrix objeto. Porque a terceira coluna de uma matriz que representa uma transformação afim é sempre (0, 0, 1), especifique apenas os seis números nas duas primeiras colunas quando você construir uma matriz de objeto. A declaração Matrix myMatrix (0.0f, 1.0f, -1.0f, 0.0f, 3.0f, 4.0f); constrói a matriz mostrada na figura anterior.

Composite Transformations

Uma transformação compósito é uma sequência de transformações, um depois do outro. Considere as matrizes e transformações na lista a seguir:

Matrix A Rodar 90 graus
Escala B matriz por um factor de dois na direcção X
Matrix C Traduzir 3 unidades na direção y

Se você começar com o ponto (2, 1) - representado pela matriz [2 1 1] - e multiplicar por A, então B, depois C, o ponto (2,1) vai sofrer as três transformações na ordem listada.

[2 1 1]ABC = [ –2 5 1]

Em vez de armazenar as três partes do composto de transformação em três matrizes separadas, é possível multiplicar A, B, e C em conjunto para obter uma única matriz de 3 x 3 que armazena toda a transformação compósito. Suponha ABC = D. Em seguida, um ponto multiplicado por D dá o mesmo resultado que um ponto multiplicado por um, então B, em seguida, C.

[2 1 1] D = [-2 5 1]

A ilustração a seguir mostra as matrizes A, B, C, e D.





Ilustração que mostra como executar múltiplas transformações multiplicando as matrizes constitutivas

O facto de a matriz de uma transformação compósito pode ser formado através da multiplicação das matrizes de transformação individuais significa que qualquer sequência de transformações afins podem ser armazenadas numa única matriz objecto.

Nota A ordem de uma transformação composta é importante. Em geral, girar, em seguida, escala, em seguida, traduzir não é o mesmo que escala, em seguida, gire, em seguida, traduzir. De modo semelhante, a ordem da multiplicação de matrizes é importante. Em geral, a ABC não é a mesma como a BAC.

A Matrix classe fornece vários métodos para a construção de uma transformação composta: Matrix :: Multiply , Matrix :: Rotate , Matrix :: RotateAt , Matrix :: Scale , Matrix :: cisalhamento , e Matrix :: Translate . O exemplo a seguir cria a matriz de uma transformação composto que primeiro gira 30 graus, em seguida, escalas por um factor de dois na direcção y, e, em seguida, se traduz 5 unidades na direcção x.

Matrix myMatrix;
myMatrix.Rotate (30.0f);
myMatrix.Scale (1.0f, 2.0F, MatrixOrderAppend);
myMatrix.Translate (5.0f, 0.0f, MatrixOrderAppend);

A ilustração a seguir mostra a matriz.





https://msdn.microsoft.com/en-us/library/windows/desktop/ms534475%28v=vs.85%29.aspx

https://msdn.microsoft.com/en-us/library/7e1w5dhw%28v=vs.110%29.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534044%28v=vs.85%29.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms536397%28v=vs.85%29.aspx

http://www.codeproject.com/Articles/8281/Matrix-Transformation-of-Images-using-NET-GDIplus

http://www.codeproject.com/Tips/788200/Applying-Matrix-Transformations-in-GDIplus

Matrix est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur(rect = Null, plgpts = Null)

nPtr est un entier système

SI MesParamètres[1]..Défaut ALORS

// Crée l'objet
GdipCreateMatrix(&nPtr)
SINON

SI TypeVar(plgpts) = wlTableau ALORS

// Dimension du tableau
Dimension(plgpts, 3)

// Utilisation de RECTF à la place de RECT
SI TypeVar(rect.X) = wlRéel_4 ALORS

// Crée l'objet
GdipCreateMatrix3(&rect, &plgpts, &nPtr)
SINON

// Crée l'objet
GdipCreateMatrix3I(&rect, &plgpts, &nPtr)
FIN
SINON

// Crée l'objet
GdipCreateMatrix2((rect.X), (rect.Y), (rect.Width), (rect.Height), (plgpts.X), (plgpts.Y), &nPtr)
FIN
FIN

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure Elements()

tabElts est un tableau de 6 réels sur 4

// Lecture de la propriété
GdipGetMatrixElements(Pointer, &tabElts)

RENVOYER tabElts



Procedure Elements(tabValeur est un tableau de 6 réels sur 4)

// Ecriture de la propriété
GdipSetMatrixElements(Pointer, tabValeur[1], tabValeur[2], tabValeur[3], tabValeur[4], tabValeur[5], tabValeur[6])



Procedure IsIdentity()

bVal est un booléen

// Lecture de la propriété
GdipIsMatrixIdentity(Pointer, &bVal)

RENVOYER bVal



Procedure PRIVÉE IsIdentity(v <utile>)



Procedure IsInvertible()

bVal est un booléen

// Lecture de la propriété
GdipIsMatrixInvertible(Pointer, &bVal)

RENVOYER bVal



Procedure PRIVÉE IsInvertible(v <utile>)



Procedure OffsetX()
RENVOYER Elements[5]



Procedure PRIVÉE OffsetX(v <utile>)



Procedure OffsetY()
RENVOYER Elements[6]



Procedure PRIVÉE OffsetY(v <utile>)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un Matrix dynamique = allouer un Matrix

// Clone l'objet
GdipCloneMatrix(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteMatrix(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : Equals
Procedure Equals(m est un Matrix dynamique)

bVal est un booléen

// Lecture de l'opérateur
GdipIsMatrixEqual(Pointer, m.Pointer, &bVal)

RENVOYER bVal



// Résumé : Invert
Procedure Invert()

GdipInvertMatrix(Pointer)



// Résumé : Multiply
Procedure Multiply(matrix est un Matrix dynamique, order est un entier = MatrixOrderPrepend)

GdipMultiplyMatrix(Pointer, matrix.Pointer, order)



// Résumé : Reset
Procedure Reset()

GdipSetMatrixElements(Pointer, 1, 0, 0, 1, 0, 0)



// Résumé : Rotate
Procedure Rotate(angle est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipRotateMatrix(Pointer, angle, order)



// Résumé : RotateAt
Procedure RotateAt(angle est un réel sur 4, point est un POINTF, order est un entier = MatrixOrderPrepend)

// Calcul des éléments
Cos est un réel sur 4 = Cosinus(angle)
Sin est un réel sur 4 = Sinus(angle)
e4 est un réel sur 4 = -point.x * Cos + point.y * Sin + point.x
e5 est un réel sur 4 = -point.x * Sin + point.y * Cos + point.y
m est un tableau de 6 réels sur 4 = Elements

SI order = MatrixOrderPrepend ALORS
GdipSetMatrixElements(Pointer,
Cos * m[1] + Sin * m[3],
Cos * m[2] + Sin * m[4],
-Sin * m[1] + Cos * m[3],
-Sin * m[2] + Cos * m[4],
e4 * m[1] + e5 * m[3] + m[5],
e4 * m[2] + e5 * m[4] + m[6])
SINON
GdipSetMatrixElements(Pointer,
m[1] * Cos + m[2] * -Sin,
m[1] * Sin + m[2] * Cos,
m[3] * Cos + m[4] * -Sin,
m[3] * Sin + m[4] * Cos,
m[5] * Cos + m[6] * -Sin + e4,
m[5] * Sin + m[6] * Cos + e5)
FIN



// Résumé : Scale
Procedure Scale(scaleX est un réel sur 4, scaleY est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipScaleMatrix(Pointer, scaleX, scaleY, order)



// Résumé : Shear
Procedure Shear(shearX est un réel sur 4, shearY est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipShearMatrix(Pointer, shearX, shearY, order)



// Résumé : TransformPoints
Procedure TransformPoints(pts)

// Utilisation de POINTF à la place de POINT
SI TypeVar(pts[1].X) = wlRéel_4 ALORS
GdipTransformMatrixPoints(Pointer, &pts, TableauOccurrence(pts))
SINON
GdipTransformMatrixPointsI(Pointer, &pts, TableauOccurrence(pts))
FIN



// Résumé : TransformVectors
Procedure TransformVectors(pts)

// Utilisation de POINTF à la place de POINT
SI TypeVar(pts[1].X) = wlRéel_4 ALORS
GdipVectorTransformMatrixPoints(Pointer, &pts, TableauOccurrence(pts))
SINON
GdipVectorTransformMatrixPointsI(Pointer, &pts, TableauOccurrence(pts))
FIN



// Résumé : Translate
Procedure Translate(offsetX est un réel sur 4, offsetY est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipTranslateMatrix(Pointer, offsetX, offsetY, order)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 16:53
Prezados,

O assunto é muito relevante sobre a classe Matriz, segue maiores detalhes:

Como usar uma matriz de cores para transformar uma única cor

Outras versões

GDI+fornece a Image e Bitmap classes para armazenar e manipular imagens. Imagee Bitmap objetos armazenam a cor de cada pixel como um número de 32 bits: de 8 bits cada um para vermelho, verde, azul e alfa.Cada um dos quatro componentes é um número de 0 a 255, com 0 representando nenhum intensidade e 255, que representa a intensidade total.O componente alfa Especifica a transparência da cor: 0 é completamente transparente e 255 é totalmente opaco.

Um vetor de cor é uma tupla de 4 do formulário (vermelho, verde, azul, alfa).Por exemplo, o vetor de cor (0, 255, 0, 255) representa uma cor opaca que nenhum vermelho ou azul, mas tem verde em intensidade total.

Outra convenção para representar cores usa o número 1 para a intensidade total.Usando essa convenção, a cor descrita no parágrafo anterior seria representada pelo vetor (0, 1, 0, 1).GDI+usa a convenção de 1 como intensidade total quando ele realizar transformações de cor.

Você pode aplicar transformações lineares (rotação, dimensionamento e assim por diante) a vetores de cor multiplicando os vetores de cor por uma matriz de 4 × 4.No entanto, você não pode usar uma matriz de 4 × 4 para realizar uma tradução (não linear).Se você adicionar uma coordenada quinta fictícia (por exemplo, o número 1) para cada um dos vetores de cor, você pode usar uma matriz de 5 × 5 para aplicar qualquer combinação de transformações lineares e traduções.Uma transformação que consiste em uma transformação linear seguida de uma tradução é chamada de uma transformação afim.

Por exemplo, suponha que você deseja iniciar com a cor (0.2, 0.0, 0.4, 1.0) e aplicar as transformações seguintes:

Dobrar o componente vermelho

Adicionar 0,2 aos componentes vermelhos, verdes e azuis

A multiplicação de matriz a seguir realizará o par de transformações na ordem listada.

Recolorir

Os elementos de uma matriz de cores são indexados (baseado em zero) por linha e coluna.Por exemplo, a entrada na quinta linha e terceira coluna da matriz m é indicada por M [4] [2].





A matriz de identidade 5 × 5 (mostrado na ilustração a seguir) tem 1s na diagonal e outra em todos os lugares de 0s.Se você multiplicar um vetor de cor, a matriz de identidade, o vetor de cor não é alterada.Uma maneira conveniente para formar a matriz de uma transformação de cor é começar com a matriz de identidade e fazer uma pequena alteração que produz a transformação desejada.





Recolorir

Para uma discussão mais detalhada sobre as matrizes e transformações, consulte sistemas de coordenadas e transformações.

O exemplo a seguir usa uma imagem que é uma cor (0.2, 0.0, 0.4, 1.0) e aplica a transformação descrita nos parágrafos anteriores.

A ilustração a seguir mostra a imagem original à esquerda e a imagem transformada no lado direito.
Cores





O código no exemplo a seguir usa as seguintes etapas para executar o Recolorir:

Inicializar um ColorMatrix objeto.

Criar um ImageAttributes de objetos e passar a ColorMatrix o objeto para o SetColorMatrix método da ImageAttributes objeto.

Passar o ImageAttributes o objeto para o DrawImage o método de um Graphics objeto.

Como converter cores de imagens?

Uma tradução adiciona um valor a um ou mais dos componentes de cor de quatro.As entradas de matriz de cores que representam as traduções são fornecidas na tabela a seguir.





O exemplo seguinte constrói uma Image o objeto do arquivo ColorBars.bmp.Em seguida, o código adiciona 0,75 para o componente vermelho de cada pixel na imagem.A imagem original é desenhada juntamente com a imagem transformada.

A ilustração a seguir mostra a imagem original à esquerda e a imagem transformada no lado direito.
Converter cores





A tabela a seguir lista os vetores de cor para as quatro barras antes e após a tradução de vermelha.Observe que, como o valor máximo para um componente de cor é 1, o componente vermelho na segunda linha não é alterado.(Da mesma forma, o valor mínimo para um componente de cor é 0).







Como usar transformações para ajustar a escala de cores?

Uma transformação de escala multiplica um ou mais dos componentes de cor de quatro, por um número.A tabela a seguir recebem as entradas de matriz de cores que representam o dimensionamento.





Uma cor de escala

O exemplo seguinte constrói uma Image o objeto do arquivo ColorBars2.bmp.Em seguida, o código dimensiona o componente azul de cada pixel na imagem por um fator de 2.A imagem original é desenhada juntamente com a imagem transformada.

Image Image = new Bitmap("ColorBars2.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = Image.Width;
int height = Image.Height;

float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 2, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);

e.Graphics.DrawImage(Image, 10, 10, width, height);

e.Graphics.DrawImage(
Image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);


A ilustração a seguir mostra a imagem original à esquerda e imagem dimensionada à direita.





A tabela a seguir lista os vetores de cor para as quatro barras antes e após o dimensionamento azul.Observe que o componente azul na barra de cores quarto caiu de 0,8 para 0,6.Isso ocorre porque GDI+ retém apenas a parte fracionária do resultado.Por exemplo, (2)(0.8) = 1,6, e a parte fracionária de 1.6 é 0,6.Reter somente a parte fracionária garante que o resultado é sempre no intervalo [0, 1].






Dimensionamento de várias cores

O exemplo seguinte constrói uma Image o objeto do arquivo ColorBars2.bmp.Em seguida, o código dimensiona os componentes vermelhos, verdes e azuis de cada pixel na imagem.Os componentes vermelhos são dimensionados 25 por cento, os componentes em verdes são dimensionados 35 por cento e os componentes em azuis são dimensionados 50 por cento.

Image Image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = Image.Width;
int height = Image.Height;

float[][] colorMatrixElements = {
new float[] {.75F, 0, 0, 0, 0},
new float[] {0, .65F, 0, 0, 0},
new float[] {0, 0, .5F, 0, 0},
new float[] {0, 0, 0, 1F, 0},
new float[] {0, 0, 0, 0, 1F}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);

e.Graphics.DrawImage(Image, 10, 10, width, height);

e.Graphics.DrawImage(
Image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);


A ilustração a seguir mostra a imagem original à esquerda e imagem dimensionada à direita.





A tabela a seguir lista os vetores de cor para as quatro barras antes e após o dimensionamento vermelho, verde e azul.





--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 17:13
Prezados,

Continuando o assunto sobre Matrizes, um dia vocês vão usar:

Como girar cores

Rotação em um espaço de cores four-dimensional é difícil visualizar.Podemos pode tornar mais fácil visualizar a rotação concordando em manter um dos componentes de cor fixos.Suponha que nós concordamos em manter o componente alfa fixado em 1 (totalmente opaco).Em seguida, podemos pode visualizar um espaço de cores tridimensional com eixos de vermelhos, verdes e azuis, conforme mostrado na ilustração a seguir.





Uma cor pode ser considerada como um ponto no espaço 3D.Por exemplo, o ponto no espaço (1, 0, 0) representa a cor vermelha e o ponto (0, 1, 0) no espaço representa a cor verde.

A ilustração a seguir mostra o que significa girar a cor (1, 0, 0) por meio de um ângulo de 60 graus no plano vermelho-verde.Rotação em paralelo ao plano de vermelho-verde plano pode ser considerada como rotação sobre o eixo azul.





A ilustração a seguir mostra como inicializar uma matriz de cores para realizar rotações sobre cada um dos três eixos de coordenadas (vermelho, verde, azul).





O exemplo a seguir usa uma imagem que é uma cor (1, 0, 0,6) e aplica uma rotação de 60 graus sobre o eixo azul.O ângulo da rotação é varrido para fora em um plano que é paralelo ao plano de vermelho-verde.

A ilustração a seguir mostra a imagem original à esquerda e a imagem girada de cor à direita.





Girar cores

A ilustração a seguir mostra uma visualização da rotação cor realizada no código a seguir.





PRIVATE void RotateColors(PaintEventArgs e)
{
Bitmap Image = new Bitmap("RotationInput.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = Image.Width;
int height = Image.Height;
float degrees = 60f;
double r = degrees * System.Math.PI / 180; // degrees to radians

float[][] colorMatrixElements = {
new float[] {(float)System.Math.Cos(r), (float)System.Math.Sin(r), 0, 0, 0},
new float[] {(float)-System.Math.Sin(r), (float)-System.Math.Cos(r), 0, 0, 0},
new float[] {0, 0, 2, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);

e.Graphics.DrawImage(Image, 10, 10, width, height);

e.Graphics.DrawImage(
Image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);

}


Compilando o código

O exemplo anterior é projetado para uso com o Windows Forms e requer PaintEventArgse, que é um parâmetro da Paint manipulador de eventos.Substitua RotationInput.bmp com um nome de arquivo de imagem e um caminho válido no sistema.




Como distorcer cores?

A distorção aumenta ou diminui um componente de cor em uma quantidade proporcional para outro componente de cor.Por exemplo, considere a transformação onde o componente vermelho é aumentado pela metade o valor do componente azul.Em transformação, a cor (0.2, 0,5, 1) se tornaria (0,7 0,5, 1).O novo componente vermelho é 0,2 + (1/2)(1) = 0,7.

O exemplo seguinte constrói uma Image o objeto do arquivo ColorBars4.bmp.Em seguida, o código aplica a transformação de distorção descrita no parágrafo anterior para cada pixel na imagem.

A ilustração a seguir mostra a imagem original à esquerda e a imagem distorcida à direita.





A tabela a seguir lista os vetores de cor para as quatro barras antes e após a transformação de distorção.





Image Image = new Bitmap("ColorBars.bmp");
ImageAttributes ImageAttributes = Novas ImageAttributes ();
int width = Image.Width;
int height = Image.Height;

flutuar [] [] = {colorMatrixElements
novo flutuador [] {1, 0, 0, 0, 0},
nova flutuador [] {0, 1, 0, 0, 0},
nova flutuador [] {0.5f, 0, 1, 0, 0},
nova flutuador [] {0, 0, 0, 1, 0},
nova flutuador [] {0, 0, 0, 0, 1}};

ColorMatrix ColorMatrix = Novas ColorMatrix (colorMatrixElements);

imageAttributes.SetColorMatrix (
ColorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);

e.Graphics.DrawImage (imagem, 10, 10, largura, altura);

e.Graphics.DrawImage(
imagem,
nova Retângulo (150, 10, largura, altura), // destino retângulo
0, 0, // canto superior esquerdo do retângulo de origem
largura, // largura da fonte rectângulo
de altura, // altura do retângulo de origem
GraphicsUnit.Pixel,
ImageAttributes);


Compilando o código

O exemplo mostrado foi desenvolvido para Windows Forms, e precisa de um PaintEventArgs e, que é um parâmetro do evento Paint.Substitua ColorBars.bmp com um nome de imagem e um caminho válido no sistema.

Segue aqui links complementares para os seus estudos.

https://msdn.microsoft.com/pt-br/library/system.drawing.imaging.colormatrix%28v=vs.110%29.aspx

https://msdn.microsoft.com/pt-br/library/system.drawing.imaging.imageattributes%28v=vs.110%29.aspx

https://msdn.microsoft.com/pt-br/library/4b4dc1kz%28v=vs.110%29.aspx…

https://msdn.microsoft.com/pt-br/library/system.drawing.imaging.colormatrix%28v=vs.110%29.aspx

https://msdn.microsoft.com/pt-br/library/system.drawing.imaging.colormap%28v=vs.110%29.aspx

https://msdn.microsoft.com/pt-br/library/3ke1f63h%28v=vs.110%29.aspx

http://ithoughthecamewithyou.com/post/fastest-image-merge-%28alpha-blend%29-in-gdi2b

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 17:24
PathGradientBrush


PathGradientBrush est une Classe
hérite de Brush
FIN



Procedure Constructeur(path = Null, wrapMode est un entier = WrapModeClamp)

nPtr est un entier système
pclPath est un GraphicsPath dynamique

SI PAS MesParamètres[1]..Défaut ALORS

// Utilisation de GraphicsPath
SI TypeVar(path) = wlInstance _ET_ path..Classe = "GraphicsPath" ALORS

pclPath <- path

// Crée l'objet
GdipCreatePathGradientFromPath(pclPath.Pointer, &nPtr)

// Utilisation de POINT(F)
SINON SI TypeVar(path) = wlTableau ALORS

// Utilisation de POINTF à la place de POINT
SI TypeVar(path[1].X) = wlRéel_4 ALORS

// Crée l'objet
GdipCreatePathGradient(&path, TableauOccurrence(path), wrapMode, &nPtr)
SINON

// Crée l'objet
GdipCreatePathGradientI(&path, TableauOccurrence(path), wrapMode, &nPtr)
FIN
FIN
FIN

// Appel du constructeur ancêtre
Brush.Constructeur(nPtr)



Procedure Destructeur()



Procedure Blend()

stBlend est un Blend
nCount est un entier

// Lecture de la propriété (1)
GdipGetPathGradientBlendCount(Pointer, &nCount)
stBlend.Factors = allouer un tableau de (nCount) réels sur 4
stBlend.Positions = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetPathGradientBlend(Pointer, &stBlend.Factors, &stBlend.Positions, nCount)

RENVOYER stBlend



Procedure Blend(stValeur est un Blend)

// Ecriture de la propriété
GdipSetPathGradientBlend(Pointer, &stValeur.Factors, &stValeur.Positions, stValeur.Positions..Occurrence)



Procedure CenterColor()

nColor est un entier
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipGetPathGradientCenterColor(Pointer, &nColor)

// Allocation
pclColor.Value = nColor

RENVOYER pclColor



Procedure CenterColor(pclValeur est un Color dynamique)

// Ecriture de la propriété
GdipSetPathGradientCenterColor(Pointer, pclValeur.Value)



Procedure CenterPoint()

stPoint est un POINT

// Lecture de la propriété
GdipGetPathGradientCenterPointI(Pointer, &stPoint)

RENVOYER stPoint



Procedure CenterPoint(stValeur est un POINT)

// Ecriture de la propriété
GdipSetPathGradientCenterPointI(Pointer, &stValeur)



Procedure CenterPointF(stValeur est un POINTF)

// Ecriture de la propriété
GdipSetPathGradientCenterPoint(Pointer, &stValeur)



Procedure FocusScales()

xScale est un réel sur 4
yScale est un réel sur 4
stFocus est un POINTF

// Lecture de la propriété
GdipGetPathGradientFocusScales(Pointer, &xScale, &yScale)

// Allocation
stFocus = [xScale, yScale]

RENVOYER stFocus



Procedure FocusScales(stValeur est un POINTF)

// Ecriture de la propriété
GdipSetPathGradientFocusScales(Pointer, stValeur.x, stValeur.y)



Procedure InterpolationColors()

tabARGB est un tableau d'entiers
stInterpol est un ColorBlend
nCount est un entier

// Lecture de la propriété (1)
GdipGetPathGradientPresetBlendCount(Pointer, &nCount)
tabARGB = allouer un tableau de (nCount) entiers
stInterpol.Colors = allouer un tableau de (nCount) Color dynamique
stInterpol.Positions = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetPathGradientPresetBlend(Pointer, &tabARGB, &stInterpol.Positions, nCount)

// Allocation
POUR i = 1 _A_ nCount
stInterpol.Colors[i] = allouer un Color(tabARGB[i])
FIN

RENVOYER stInterpol



Procedure InterpolationColors(stValeur est un ColorBlend)

tabARGB est un tableau d'entiers

// Allocation
POUR CHAQUE pclColor DE stValeur.Colors
Ajoute(tabARGB, pclColor.Value)
FIN

// Ecriture de la propriété
GdipSetPathGradientPresetBlend(Pointer, &tabARGB, &stValeur.Positions, stValeur.Positions..Occurrence)



Procedure Rectangle()

stRect est un RECT

// Lecture de la propriété
GdipGetPathGradientRectI(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE Rectangle(v <utile>)



Procedure RectangleF()

stRect est un RECTF

// Lecture de la propriété
GdipGetPathGradientRect(Pointer, &stRect)

RENVOYER stRect



Procedure PRIVÉE RectangleF(v <utile>)



Procedure SurroundColors()

tabARGB est un tableau d'entiers
tabColors est un tableau de Color dynamique
nCount est un entier

// Lecture de la propriété (1)
GdipGetPathGradientSurroundColorCount(Pointer, &nCount)
tabARGB = allouer un tableau de (nCount) entiers

// Lecture de la propriété (2)
GdipGetPathGradientSurroundColorsWithCount(Pointer, &tabARGB, &nCount)
tabColors = allouer un tableau de (nCount) Color dynamique

// Allocation
POUR i = 1 _A_ nCount
tabColors[i] = allouer un Color(tabARGB[i])
FIN

RENVOYER tabColors



Procedure SurroundColors(tabValeur est un tableau de Color dynamique)

tabARGB est un tableau d'entiers
nCount est un entier = tabValeur..Occurrence

// Allocation
POUR CHAQUE pclColor DE tabValeur
Ajoute(tabARGB, pclColor.Value)
FIN

// Ecriture de la propriété
GdipSetPathGradientSurroundColorsWithCount(Pointer, &tabARGB, &nCount)



Procedure Transform()

nPtr est un entier système
pclObjet est un Matrix dynamique = allouer un Matrix

// Lecture de la propriété
GdipGetPathGradientTransform(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Transform(pclValeur est un Matrix dynamique)

// Ecriture de la propriété
GdipSetPathGradientTransform(Pointer, pclValeur.Pointer)



Procedure WrapMode()

nWrap est un entier

// Lecture de la propriété
GdipGetPathGradientWrapMode(Pointer, &nWrap)

RENVOYER nWrap



Procedure WrapMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetPathGradientWrapMode(Pointer, nValeur)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un PathGradientBrush dynamique = allouer un PathGradientBrush

// Clone l'objet
GdipCloneBrush(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : MultiplyTransform
Procedure MultiplyTransform(matrix est un Matrix dynamique, order est un entier = MatrixOrderPrepend)

GdipMultiplyPathGradientTransform(Pointer, matrix.Pointer, order)



// Résumé : ResetTransform
Procedure ResetTransform()

GdipResetPathGradientTransform(Pointer)



// Résumé : RotateTransform
Procedure RotateTransform(angle est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipRotatePathGradientTransform(Pointer, angle, order)



// Résumé : ScaleTransform
Procedure ScaleTransform(sx est un réel sur 4, sy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipScalePathGradientTransform(Pointer, sx, sy, order)



// Résumé : SetBlendTriangularShape
Procedure SetBlendTriangularShape(focus est un réel sur 4, scale est un réel sur 4 = 1.0)

// Ecriture de la propriété
GdipSetPathGradientLinearBlend(Pointer, focus, scale)



// Résumé : SetSigmaBellShape
Procedure SetSigmaBellShape(focus est un réel sur 4, scale est un réel sur 4 = 1.0)

// Ecriture de la propriété
GdipSetPathGradientSigmaBlend(Pointer, focus, scale)



// Résumé : TranslateTransform
Procedure TranslateTransform(dx est un réel sur 4, dy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipTranslatePathGradientTransform(Pointer, dx, dy, order)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 17:31
Exemplo de Gradiente:













--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 21:28
Pen Class

Método define o estilo de traço para este Pen objeto.

O comprimento dos traços de uma linha tracejada é dependente do estilo de traço e a largura da caneta objecto. O comprimento do espaço que separa dois traços de uma linha a tracejado é igual à largura da caneta objecto.
Exemplos

O exemplo a seguir cria um Pen objeto, define o estilo de traço, e desenha uma linha. O código, em seguida, redefine o estilo de traço, desenha uma segunda linha, redefine estilo pitada de novo, e chama uma terceira linha.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534485%28v=vs.85%29.aspx

https://msdn.microsoft.com/en-us/library/1z5bhdx7%28v=vs.90%29.aspx

http://www.openwinforms.com/line_pattern_in_gdi_plus.html

Example_SetDashStyle VOID (HDC HDC)
{
Gráficos Gráficos (HDC);

// Cria um objeto Pen.
Pen caneta (Color (255, 0, 0, 255), 15);

// Defina o estilo de traço para a pena, e desenhar uma linha tracejada.
pen.SetDashStyle (DashStyleDash);
graphics.DrawLine (& caneta, 0, 50, 400, 150);

// Repor o estilo de traço para a caneta e desenhe uma segunda linha.
pen.SetDashStyle (DashStyleDot);
graphics.DrawLine (e caneta, 0, 80, 400, 180);

// Repor o estilo de traço para a pena, e desenhar uma terceira linha.
pen.SetDashStyle (DashStyleDashDot);
graphics.DrawLine (e caneta, 0, 110, 400, 210);
}



Classe Pen Wx

Pen est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur(brush_color est un GDIPObjet dynamique = Null, width est un réel sur 4 = 1.0, unit est un entier = UnitWorld)

nPtr est un entier système
pclColor est un Color dynamique

SI PAS MesParamètres[1]..Défaut ALORS

// Utilisation de Color
SI brush_color..Classe = "Color" ALORS
pclColor <- brush_color

// Crée l'objet
GdipCreatePen1(pclColor.Value, width, unit, &nPtr)

// Utilisation de Brush
SINON SI brush_color..Classe = "Brush" ALORS

// Crée l'objet
GdipCreatePen2(brush_color.Pointer, width, unit, &nPtr)
FIN
FIN

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure Alignment()

nAlign est un entier

// Lecture de la propriété
GdipGetPenMode(Pointer, &nAlign)

RENVOYER nAlign



Procedure Alignment(nValeur est un entier)

// Ecriture de la propriété
GdipSetPenMode(Pointer, nValeur)



Procedure Brush()

nPtr est un entier système
pclObjet est un Brush dynamique = allouer un Brush

// Lecture de la propriété
GdipGetPenBrushFill(Pointer, &nPtr)

pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Brush(pclBrush est un Brush dynamique)

// Ecriture de la propriété
GdipSetPenBrushFill(Pointer, (pclBrush = Null ? Null SINON pclBrush.Pointer))



Procedure Color()

nColor est un entier
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipGetPenColor(Pointer, &nColor)

pclColor.Value = nColor

RENVOYER pclColor



Procedure Color(pclColor est un Color dynamique)

// Ecriture de la propriété
GdipSetPenColor(Pointer, pclColor.Value)



Procedure CompoundArray()

nCount est un entier
tabCmp est un tableau de réels sur 4

// Lecture de la propriété (1)
GdipGetPenCompoundCount(Pointer, &nCount)
tabCmp = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetPenCompoundArray(Pointer, &tabCmp, nCount)

RENVOYER tabCmp



Procedure CompoundArray(tabValeur est un tableau de réels sur 4)

// Ecriture de la propriété
GdipSetPenCompoundArray(Pointer, &tabValeur, tabValeur..Occurrence)



Procedure CustomEndCap()

nPtr est un entier système
pclObjet est un CustomLineCap dynamique = allouer un CustomLineCap

// Lecture de la propriété
GdipGetPenCustomEndCap(Pointer, &nPtr)

pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure CustomEndCap(pclCap est un CustomLineCap dynamique)

// Ecriture de la propriété
GdipSetPenCustomEndCap(Pointer, (pclCap = Null ? Null SINON pclCap.Pointer))



Procedure CustomStartCap()

nPtr est un entier système
pclObjet est un CustomLineCap dynamique = allouer un CustomLineCap

// Lecture de la propriété
GdipGetPenCustomStartCap(Pointer, &nPtr)

pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure CustomStartCap(pclCap est un CustomLineCap dynamique)

// Ecriture de la propriété
GdipSetPenCustomStartCap(Pointer, (pclCap = Null ? Null SINON pclCap.Pointer))



Procedure DashCap()

nDash est un entier

// Lecture de la propriété
GdipGetPenDashCap197819(Pointer, &nDash)

RENVOYER nDash



Procedure DashCap(nValeur est un entier)

// Ecriture de la propriété
GdipSetPenDashCap197819(Pointer, nValeur)



Procedure DashOffset()

rDash est un réel sur 4

// Lecture de la propriété
GdipGetPenDashOffset(Pointer, &rDash)

RENVOYER rDash



Procedure DashOffset(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetPenDashOffset(Pointer, rValeur)



Procedure DashPattern()

nCount est un entier
tabPat est un tableau de réels sur 4

// Lecture de la propriété (1)
GdipGetPenDashCount(Pointer, &nCount)
tabPat = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetPenDashArray(Pointer, &tabPat, nCount)

RENVOYER tabPat



Procedure DashPattern(tabValeur est un tableau de réel sur 4)

// Ecriture de la propriété
GdipSetPenDashArray(Pointer, &tabValeur, tabValeur..Occurrence)



Procedure DashStyle()

nStyle est un entier

// Lecture de la propriété
GdipGetPenDashStyle(Pointer, &nStyle)

RENVOYER nStyle



Procedure DashStyle(nValeur est un entier)

// Ecriture de la propriété
GdipSetPenDashStyle(Pointer, nValeur)



Procedure StartCap()

nCap est un entier

// Lecture de la propriété
GdipGetPenStartCap(Pointer, &nCap)

RENVOYER nCap



Procedure StartCap(nValeur est un entier)

// Ecriture de la propriété
GdipSetPenStartCap(Pointer, nValeur)



Procedure EndCap()

nCap est un entier

// Lecture de la propriété
GdipGetPenEndCap(Pointer, &nCap)

RENVOYER nCap



Procedure EndCap(nValeur est un entier)

// Ecriture de la propriété
GdipSetPenEndCap(Pointer, nValeur)



Procedure LineJoin()

nJoin est un entier

// Lecture de la propriété
GdipGetPenLineJoin(Pointer, &nJoin)

RENVOYER nJoin



Procedure LineJoin(nValeur est un entier)

// Ecriture de la propriété
GdipSetPenLineJoin(Pointer, nValeur)



Procedure MiterLimit()

rLimit est un réel sur 4

// Lecture de la propriété
GdipGetPenMiterLimit(Pointer, &rLimit)

RENVOYER rLimit



Procedure MiterLimit(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetPenMiterLimit(Pointer, rValeur)



Procedure PenType()

nType est un entier

// Lecture de la propriété
GdipGetPenFillType(Pointer, &nType)

RENVOYER nType



Procedure PRIVÉE PenType(v <utile>)



Procedure Transform()

nPtr est un entier système
pclObjet est un Matrix dynamique = allouer un Matrix

// Lecture de la propriété
GdipGetPenTransform(Pointer, &nPtr)

pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Transform(pclValeur est un Matrix dynamique)

// Ecriture de la propriété
GdipSetPenTransform(Pointer, (pclValeur = Null ? Null SINON pclValeur.Pointer))



Procedure Width()

rWidth est un réel sur 4

// Lecture de la propriété
GdipGetPenWidth(Pointer, &rWidth)

RENVOYER rWidth



Procedure Width(rValeur est un réel sur 4)

// Ecriture de la propriété
GdipSetPenWidth(Pointer, rValeur)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un Pen dynamique = allouer un Pen

// Clone l'objet
GdipClonePen(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeletePen(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : MultiplyTransform
Procedure MultiplyTransform(matrix est un Matrix dynamique, order est un entier = MatrixOrderPrepend)

GdipMultiplyPenTransform(Pointer, matrix.Pointer, order)



// Résumé : ResetTransform
Procedure ResetTransform()

GdipResetPenTransform(Pointer)



// Résumé : RotateTransform
Procedure RotateTransform(angle est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipRotatePenTransform(Pointer, angle, order)



// Résumé : ScaleTransform
Procedure ScaleTransform(sx est un réel sur 4, sy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipScalePenTransform(Pointer, sx, sy, order)



// Résumé : SetLineCap
Procedure SetLineCap(startCap est un entier, endCap est un entier, dashCap est un entier)

GdipSetPenLineCap197819(Pointer, startCap, endCap, dashCap)



// Résumé : TranslateTransform
Procedure TranslateTransform(dx est un réel sur 4, dy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipTranslatePenTransform(Pointer, dx, dy, order)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 21:33
PrivateFontCollection

PrivateFontCollection est une Classe
hérite de FontCollection
FIN



Procedure Constructeur()

nPtr est un entier système

// Crée l'objet
GdipNewPrivateFontCollection(&nPtr)

// Allocation
FontCollection.Constructeur(nPtr)



Procedure Destructeur()



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeletePrivateFontCollection(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : AddFontFile
Procedure AddFontFile(filename est une chaîne)

u est une chaîne UNICODE = filename

GdipPrivateAddFontFile(Pointer, &u)



// Résumé : AddMemoryFont
Procedure AddMemoryFont(memory est un entier système, Length est un entier)

GdipPrivateAddMemoryFont(Pointer, memory, Length)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2016 - 23:45
Region Class

A Região classe descreve uma área da superfície do mostrador. A área pode ser de qualquer forma. Em outras palavras, a fronteira da área pode ser uma combinação de linhas rectas e curvas. As regiões também podem ser criados a partir do interior de retângulos, caminhos, ou uma combinação destes. Regiões são usados ​​em recorte e bateu-testando operações.

Uma região é uma porção da área de exibição de um dispositivo de saída. As regiões podem ser simples (um único retângulo) ou complexo (uma combinação de polígonos e curvas fechadas). A ilustração a seguir mostra duas regiões: uma construída a partir de um retângulo, e outro construído a partir de um caminho.





Regiões são muitas vezes utilizados para recorte e bateu testes. Clipping envolve restringindo desenho para uma determinada região da área de exibição, geralmente a parte que precisa ser atualizado. testes bateu envolve a verificação para determinar se o cursor estiver em uma determinada região da tela quando um botão do mouse é pressionado.

Você pode construir uma região de um retângulo ou um caminho. Você também pode criar regiões complexas, combinando regiões existentes. A Região classe fornece os seguintes métodos para combinar regiões: Intersect , União , Xor , Excluir , e Complementar .

A intersecção das duas regiões é o conjunto de todos os pontos pertencentes a ambas as regiões. A união é o conjunto de todos os pontos pertencentes a uma ou a outra, ou ambas as regiões. O complemento de uma região é o conjunto de todos os pontos que não estão na região. A ilustração a seguir mostra a intersecção e união das duas regiões mostradas na ilustração anterior.






O Xor método, aplicado a um par de regiões, produz uma região que contém todos os pontos pertencentes a uma região ou o outro, mas não ambos. O Excluir método, aplicado a um par de regiões, produz uma região que contém todos os pontos na primeira região que não estão na segunda região. A ilustração abaixo mostra as regiões que resultam da aplicação do Xor e Excluir métodos para as duas regiões mostrados no início deste tópico.





Para preencher uma região, você precisa de uma Gráficos objeto, uma escova objeto, e uma Região objeto. O Gráficos objeto fornece o FillRegion método e as Escova atributos armazenamentos de objetos do preenchimento, como cor ou padrão. O exemplo a seguir preenche uma região com uma cor sólida.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534501%28v=vs.85%29.aspx

https://msdn.microsoft.com/en-us/library/4t53hf8d%28v=vs.110%29.aspx

http://forums.asp.net/t/1231528.aspx…+

Region est une Classe
hérite de GDIPObjet
FIN



Procedure Constructeur(in_ = Null)

nPtr est un entier système
pclObj est un GDIPObjet dynamique

// Par défaut
SI MesParamètres..NbReçus = 0 OU in_ = Null ALORS

// Crée l'objet
GdipCreateRegion(&nPtr)
SINON

// On a reçu un objet
SI TypeVar(in_) = wlInstance ALORS

pclObj <- in_

// Crée l'objet
GdipCreateRegionPath(pclObj.Pointer, &nPtr)

SINON SI TypeVar(in_) = wlStructure ALORS

SI TypeVar(in_.X) = wlRéel_4 ALORS

// Crée l'objet
GdipCreateRegionRect(&in_, &nPtr)
SINON

// Crée l'objet
GdipCreateRegionRectI(&in_, &nPtr)
FIN

// On a reçu une structure
SINON SI TypeVar(in_) = wlTableau

// Crée l'objet
GdipCreateRegionRgnData(&in_, TableauOccurrence(in_), &nPtr)

// On a reçu un pointeur
SINON SI TypeVar(in_) DANS (wlEntier, wlEntier_4, wlEntier_8, wlEntierSansSigne_4, wlEntierSansSigne_8)

// Crée l'objet
GdipCreateRegionHrgn((in_), &nPtr)
FIN

FIN

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure RgnData()

tabData est un tableau d'entiers sans signe sur 1
nCount est un entier
nFilled est un entier

// Lecture de la propriété (1)
GdipGetRegionDataSize(Pointer, &nCount)

Dimension(tabData, nCount)

// Lecture de la propriété (2)
GdipGetRegionData(Pointer, &tabData, nCount, &nFilled)

RENVOYER tabData



Procedure PRIVÉE RgnData(v <utile>)



// Résumé : Union
Procedure Union(in_)

Combine(in_, CombineModeUnion)



// Résumé : Intersect
Procedure Intersect(in_)

Combine(in_, CombineModeIntersect)



// Résumé : Combine
Procedure PROTÉGÉE Combine(in_, combineMode est un entier)

pclObj est un GDIPObjet dynamique

// On a reçu un objet
SI TypeVar(in_) = wlInstance ALORS

pclObj <- in_

SELON pclObj..Classe
CAS "Region"
GdipCombineRegionRegion(Pointer, pclObj.Pointer, combineMode)
CAS "GraphicsPath"
GdipCombineRegionPath(Pointer, pclObj.Pointer, combineMode)
FIN

SINON SI TypeVar(in_) = wlStructure ALORS

SI TypeVar(in_.X) = wlRéel_4 ALORS

// Crée l'objet
GdipCombineRegionRect(Pointer, &in_, combineMode)
SINON

// Crée l'objet
GdipCombineRegionRectI(Pointer, &in_, combineMode)
FIN
FIN



// Résumé : Complement
Procedure Complement(in_)

Combine(in_, CombineModeComplement)



// Résumé : Exclude
Procedure Exclude(in_)

Combine(in_, CombineModeExclude)



// Résumé : Xor
Procedure Xor(in_)

Combine(in_, CombineModeXor)



// Résumé : Replace
Procedure Replace(in_)

Combine(in_, CombineModeReplace)



// Résumé : Translate
Procedure Translate(dx, dy)

SI TypeVar(dx) = wlRéel_4 ALORS
GdipTranslateRegion(Pointer, dx, dy)
SINON
GdipTranslateRegionI(Pointer, dx, dy)
FIN



// Résumé : IsVisiblePoint
Procedure IsVisiblePoint(x, y, g est un Graphics dynamique = Null)

bVal est un booléen

SI TypeVar(x) = wlRéel_4 ALORS
GdipIsVisibleRegionPoint(Pointer, x, y, (g = Null ? Null SINON g.Pointer), &bVal)
SINON
GdipIsVisibleRegionPointI(Pointer, x, y, (g = Null ? Null SINON g.Pointer), &bVal)
FIN



// Résumé : IsVisibleRect
Procedure IsVisibleRect(x, y, width, height, g est un Graphics dynamique = Null)

bVal est un booléen

SI TypeVar(x) = wlRéel_4 ALORS
GdipIsVisibleRegionRect(Pointer, x, y, width, height, (g = Null ? Null SINON g.Pointer), &bVal)
SINON
GdipIsVisibleRegionRectI(Pointer, x, y, width, height, (g = Null ? Null SINON g.Pointer), &bVal)
FIN



// Résumé : IsEmpty
Procedure IsEmpty(g est un Graphics dynamique)

bval est un booléen

GdipIsEmptyRegion(Pointer, g.Pointer, &bval)

RENVOYER bval



// Résumé : IsInfinite
Procedure IsInfinite(g est un Graphics dynamique)

bval est un booléen

GdipIsInfiniteRegion(Pointer, g.Pointer, &bval)

RENVOYER bval



// Résumé : MakeEmpty
Procedure MakeEmpty()

GdipSetEmpty(Pointer)



// Résumé : MakeInfinite
Procedure MakeInfinite()

GdipSetInfinite(Pointer)



// Résumé : Equals
Procedure Equals(r est un Region dynamique, g est un Graphics dynamique)

bval est un booléen

GdipIsEqualRegion(Pointer, r.Pointer, g.Pointer, &bval)

RENVOYER bval



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un Region dynamique = allouer un Region

// Clone l'objet
GdipCloneRegion(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteRegion(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : Transform
Procedure Transform(m est un Matrix dynamique)

GdipTransformRegion(Pointer, m.Pointer)



// Résumé : GetHrgn
Procedure GetHrgn(g est un Graphics dynamique)

nRgn est un entier système

GdipGetRegionHRgn(Pointer, g.Pointer, &nRgn)

RENVOYER nRgn



// Résumé : GetBounds
Procedure GetBounds(g est un Graphics dynamique)

stRect est un RECT

GdipGetRegionBoundsI(Pointer, g.Pointer, &stRect)

RENVOYER stRect



// Résumé : GetBoundsF
Procedure GetBoundsF(g est un Graphics dynamique)

stRect est un RECTF

GdipGetRegionBounds(Pointer, g.Pointer, &stRect)

RENVOYER stRect


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 19 mars 2016 - 00:13
SolidBrush CLASS


SolidBrush est une Classe
hérite de Brush
FIN



Procedure Constructeur(Color est un Color dynamique = Null)

nPtr est un entier système

// Crée l'objet
GdipCreateSolidFill((Color = Null ? 0 SINON Color.Value), &nPtr)

// Appel du constructeur ancêtre
Brush.Constructeur(nPtr)



Procedure Destructeur()



Procedure Color()

nColor est un entier
pclColor est un Color dynamique = allouer un Color

// Lecture de la propriété
GdipGetSolidFillColor(Pointer, &nColor)

// Allocation
pclColor.Value = nColor

RENVOYER pclColor



Procedure Color(pclValeur est un Color dynamique)

// Ecriture de la propriété
GdipSetSolidFillColor(Pointer, pclValeur.Value)



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un SolidBrush dynamique = allouer un SolidBrush

// Clone l'objet
GdipCloneBrush(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 19 mars 2016 - 00:20
StringFormat CLASS

https://msdn.microsoft.com/en-us/library/windows/desktop/ms534733%28v=vs.85%29.aspx

StringFormat est une Classe
hérite de GDIPObjet

PRIVÉ
m_nLanguage est un entier sur 2

FIN



Procedure Constructeur(options est un entier = 0, language est un entier = LANG_NEUTRAL)

nPtr est un entier système

// Crée l'objet
GdipCreateStringFormat(options, language, &nPtr)
m_nLanguage = language

// Appel du constructeur ancêtre
GDIPObjet.Constructeur(nPtr)



Procedure Destructeur()



Procedure Alignment()

nAlign est un entier

// Lecture de la propriété
GdipGetStringFormatAlign(Pointer, &nAlign)

RENVOYER nAlign



Procedure Alignment(nValeur est un entier)

// Ecriture de la propriété
GdipSetStringFormatAlign(Pointer, nValeur)



Procedure LineAlignment()

nAlign est un entier

// Lecture de la propriété
GdipGetStringFormatLineAlign(Pointer, &nAlign)

RENVOYER nAlign



Procedure LineAlignment(nValeur est un entier)

// Ecriture de la propriété
GdipSetStringFormatLineAlign(Pointer, nValeur)



Procedure FormatFlags()

nFlags est un entier

// Lecture de la propriété
GdipGetStringFormatFlags(Pointer, &nFlags)

RENVOYER nFlags



Procedure FormatFlags(nValeur est un entier)

// Ecriture de la propriété
GdipSetStringFormatFlags(Pointer, nValeur)



Procedure HotkeyPrefix()

nPrefix est un entier

// Lecture de la propriété
GdipGetStringFormatHotkeyPrefix(Pointer, &nPrefix)

RENVOYER nPrefix



Procedure HotkeyPrefix(nValeur est un entier)

// Ecriture de la propriété
GdipSetStringFormatHotkeyPrefix(Pointer, nValeur)



Procedure Trimming()

nTrim est un entier

// Lecture de la propriété
GdipGetStringFormatTrimming(Pointer, &nTrim)

RENVOYER nTrim



Procedure Trimming(nValeur est un entier)

// Ecriture de la propriété
GdipSetStringFormatTrimming(Pointer, nValeur)



Procedure DigitSubstitutionMethod()

nSub est un entier

// Lecture de la propriété
GdipGetStringFormatDigitSubstitution(Pointer, &m_nLanguage, &nSub)

RENVOYER nSub



Procedure PRIVÉE DigitSubstitutionMethod(v <utile>)



// Résumé : Détruit l'objet
Procedure VIRTUELLE Dispose()

GdipDeleteStringFormat(Pointer)

// Libère l'objet
GDIPObjet.Dispose()



// Résumé : Clone l'objet
Procedure VIRTUELLE Clone()

nPtr est un entier système
pclObjet est un StringFormat dynamique = allouer un StringFormat

// Clone l'objet
GdipCloneStringFormat(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GenericDefault
Procedure GLOBALE GenericDefault()

nPtr est un entier système
pclObjet est un StringFormat dynamique = allouer un StringFormat

// Crée l'objet
GdipStringFormatGetGenericDefault(&nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : GenericTypographic
Procedure GLOBALE GenericTypographic()

nPtr est un entier système
pclObjet est un StringFormat dynamique = allouer un StringFormat

// Crée l'objet
GdipStringFormatGetGenericTypographic(&nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



// Résumé : SetMeasurableCharacterRanges
Procedure SetMeasurableCharacterRanges(ranges est un tableau de CharacterRange)

// Ecriture de la propriété
GdipSetStringFormatMeasurableCharacterRanges(Pointer, ranges..Occurrence, &ranges)



// Résumé : GetMeasurableCharacterRangeCount
Procedure GetMeasurableCharacterRangeCount()

nCount est un entier

// Lecture de la propriété
GdipGetStringFormatMeasurableCharacterRangeCount(Pointer, &nCount)

RENVOYER nCount



// Résumé : SetTabStops
Procedure SetTabStops(firstTabOffset est un réel sur 4, tabStops est un tableau de réels sur 4)

// Ecriture de la propriété
GdipSetStringFormatTabStops(Pointer, firstTabOffset, tabStops..Occurrence, &tabStops)



// Résumé : SetDigitSubstitution
Procedure SetDigitSubstitution(language est un entier, substitute est un entier)

// Ecriture de la propriété
GdipSetStringFormatDigitSubstitution(Pointer, language, substitute)



// Résumé : GetTabStops
Procedure GetTabStops(firstTabOffset est un réel sur 4)

nCount est un entier
tabStops est un tableau de réels sur 4
firstTabOffset = 0

// Lecture de la propriété (1)
GdipGetStringFormatTabStopCount(Pointer, &nCount)
tabStops = allouer un tableau de (nCount) réels sur 4

// Lecture de la propriété (2)
GdipGetStringFormatTabStops(Pointer, nCount, &firstTabOffset, &tabStops)

RENVOYER tabStops


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 19 mars 2016 - 00:24
TextureBrush

TextureBrush est une Classe
hérite de Brush

FIN


Procedure Constructeur(Image est un Image dynamique = Null, dstRect = Null, wrapMode est un entier = WrapModeTile, imgAtt est un ImageAttributes dynamique = Null)

nPtr est un entier système

// Syntaxe par défaut
SI MesParamètres[2]..Défaut ALORS

// Crée l'objet
GdipCreateTexture(Image.Pointer, wrapMode, &nPtr)
SINON

// On utilise RECTF à la place de RECT
SI TypeVar(dstRect.X) = wlRéel_4 ALORS

SI imgAtt = Null ALORS

// Crée l'objet
GdipCreateTexture2(Image.Pointer, wrapMode, dstRect.X, dstRect.Y, dstRect.Width, dstRect.height, &nPtr)
SINON

// Crée l'objet
GdipCreateTextureIA(Image.Pointer, imgAtt.Pointer, dstRect.X, dstRect.Y, dstRect.Width, dstRect.height, &nPtr)
FIN
SINON
SI imgAtt = Null ALORS

// Crée l'objet
GdipCreateTexture2I(Image.Pointer, wrapMode, dstRect.X, dstRect.Y, dstRect.Width, dstRect.height, &nPtr)
SINON

// Crée l'objet
GdipCreateTextureIAI(Image.Pointer, imgAtt.Pointer, dstRect.X, dstRect.Y, dstRect.Width, dstRect.height, &nPtr)
FIN
FIN
FIN

// Appel du constructeur ancêtre
Brush.Constructeur(nPtr)



Procedure Destructeur()



Procedure Image()

nPtr est un entier système
pclImage est un Bitmap dynamique = allouer un Bitmap

// Lecture de la propriété
GdipGetTextureImage(Pointer, &nPtr)

// Allocation
pclImage.Pointer = nPtr

RENVOYER pclImage



Procedure PRIVÉE Image(v <utile>)



Procedure Transform()

nPtr est un entier système
pclObjet est un Matrix dynamique = allouer un Matrix

// Lecture de la propriété
GdipGetTextureTransform(Pointer, &nPtr)

// Allocation
pclObjet.Pointer = nPtr

RENVOYER pclObjet



Procedure Transform(pclValeur est un Matrix dynamique)

// Ecriture de la propriété
GdipSetTextureTransform(Pointer, pclValeur.Pointer)



Procedure WrapMode()

nWrap est un entier

// Lecture de la propriété
GdipGetTextureWrapMode(Pointer, &nWrap)

RENVOYER nWrap



Procedure WrapMode(nValeur est un entier)

// Ecriture de la propriété
GdipSetTextureWrapMode(Pointer, nValeur)



// Résumé : MultiplyTransform
Procedure MultiplyTransform(matrix est un Matrix dynamique, order est un entier = MatrixOrderPrepend)

GdipMultiplyTextureTransform(Pointer, matrix.Pointer, order)



// Résumé : ResetTransform
Procedure ResetTransform()

GdipResetTextureTransform(Pointer)



// Résumé : RotateTransform
Procedure RotateTransform(angle est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipRotateTextureTransform(Pointer, angle, order)



// Résumé : ScaleTransform
Procedure ScaleTransform(sx est un réel sur 4, sy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipScaleTextureTransform(Pointer, sx, sy, order)



// Résumé : TranslateTransform
Procedure TranslateTransform(dx est un réel sur 4, dy est un réel sur 4, order est un entier = MatrixOrderPrepend)

GdipTranslateTextureTransform(Pointer, dx, dy, order)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 19 mars 2016 - 00:26




--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 19 mars 2016 - 13:11
DOWNLOAD WD_GDI+





https://mega.nz/…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Posté le 23 novembre 2016 - 13:10
De todo esse pessoal que posta dicas e tutoriais sobre os produtos wxdev em português, você é o único que encontrei que não fica apenas no trivial da ferramenta e compartilha conhecimentos mais avançados.
Parabéns!:merci:
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 29 novembre 2016 - 06:26
Obrigado pelo incentivo...

Doar o nosso tempo para os outros sem nada esperar em troca não é fácil.

É mais fácil receber criticas do que elegios, muito obrigado pela força.

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/