Jak vytvořit obraz jen z 8 barev? Efekt se dá použít různě, ale není příliš častý, někdy se pomocí něj dají pěkně upravovat portréty, od popartových plakátů to má sice hodně daleko, ale snad se to někomu shodne.
Kód je maximálně jednoduchý, k použití této procedury jsou třeba dva parametry a těmi jsou PictureBox, se kterým budeme pracovat, a práh. Práh udává místo, ve kterém dochází k přelomu. Rozhodu je se o tom, zda hodnota pro barvu bude 0, nebo 255.
Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Sub EightColor(Img As PictureBox, prah As Long)
Img.DrawWidth = 1
Img.ScaleMode = 3
Img.AutoRedraw = True
RGBMax = 256
On Error Resume Next
For x = 0 To Img.ScaleWidth
For y = 0 To Img.ScaleHeight
DoEvents
Imgp = GetPixel(Img.hdc, x, y)
b = Imgp \ RGBMax \ RGBMax
g = (Imgp \ RGBMax) Mod RGBMax
r = Imgp Mod RGBMax
If r >= prah Then r = 255
If g >= prah Then g = 255
If b >= prah Then b = 255
If r <= prah Then r = 0
If g <= prah Then g = 0
If b <= prah Then b = 0
Call SetPixel(Img.hdc, x, y, RGB(r, g, b))
Next y
DoEvents
Next x
Img.Refresh
End Sub