Началось это вчера - захотелось нарисовать подобный фон. Резво придумал алгоритм и ничо не получил:
Шустро нашлась заметка Using Color Gradients in Win32_SDK Programs:
Код выглядит примерно так:
If InitSprite() And OpenWindow(0,0,0,640,480,"SineWave",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
StartDrawing(ScreenOutput())
; /* Start color; Change the R,G,B values
; To the color of your choice */
r1.a = 255
g1.a = 0
b1.a = 0;
; /* End Color; Change the R,G,B values
; To the color of your choice */
r2.a = 255
g2.a = 255
b2.a = 0;
; /* loop To create the gradient */
; For(int i=0;i<rect.right;i++)
For x=0 To 639
; /* Color ref. For the gradient */
; int r,g,b;
; /* Determine the colors */
r.a = r1 + (x * (r2-r1) / 640);
g.a = g1 + (x * (g2-g1) / 640);
b.a = b1 + (x * (b2-b1) / 640);
LineXY( x,0,x,479,RGB(r,g,b) )
Next x
StopDrawing()
FlipBuffers()
Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
If InitSprite() And OpenWindow(0,0,0,640,480,"gradient",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
StartDrawing(ScreenOutput())
; /* Start color; Change the R,G,B values
; To the color of your choice */
r1.a = 255
g1.a = 0
b1.a = 0;
; /* End Color; Change the R,G,B values
; To the color of your choice */
r2.a = 0;255
g2.a = 255
b2.a = 0;
;add
r3.a=0
g3.a=0
b3.a=255
r4.a=255
g4.a=255
b4.a=255
; /* loop To create the gradient */
; For(int i=0;i<rect.right;i++)
For y=0 To 479
r01=r1 + (y * (r3-r1) / 480);
g01=g1 + (y * (g3-g1) / 480);
b01=b1 + (y * (b3-b1) / 480);
r02=r2 + (y * (r4-r2) / 480);
g02=g2 + (y * (g4-g2) / 480);
b02=b2 + (y * (b4-b2) / 480);
For x=0 To 639
; /* Color ref. For the gradient */
; int r,g,b;
; /* Determine the colors */
r.a = r01 + (x * (r02-r01) / 640);
g.a = g01 + (x * (g02-g01) / 640);
b.a = b01 + (x * (b02-b01) / 640);
Box( x,y,1,1,RGB(r,g,b) )
Next x
Next y
StopDrawing()
FlipBuffers()
Repeat
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
Комментарии
Отправить комментарий