Set FSO = CreateObject("Scripting.FileSystemObject")
Home = FSO.GetParentFolderName(WScript.ScriptFullName)
Home="C:\RIS\TEMP"
Set GDI = CreateObject("prjGDIplus.Global")
Set i = GDI.CreateImage(FSO.BuildPath(Home, "xxx.bmp"))
CreateObject("prjFloodFill.clsFloodFill").FloodFillImage i, 80, 80, 255, 65280
Set c = GDI.CreateBitmap(i.Width, i.Height, i.Format)
GDI.CreateGraphicsFromImage(c).DrawImage i, 0, 0
c.SaveToJpeg FSO.BuildPath(Home, "xxx.jpg")
Set GDI = Nothing
Set GDI = CreateObject("prjGDIplus.Global")
Set i = GDI.CreateImage(FSO.BuildPath("D:\Progr_Progi\#RIS\map\pic", "66a.bmp"))
CreateObject("prjFloodFill.clsFloodFill").FloodFillImage i, 166, 141, 65280, 255
Set c = GDI.CreateBitmap(i.Width, i.Height, i.Format)
GDI.CreateGraphicsFromImage(c).DrawImage i, 0, 0
c.SaveToJpeg FSO.BuildPath("C:\", "xxx.jpg")
Set GDI = Nothing
Private Sub Form_Load()
Set GDI = CreateObject("prjGDIplus.Global")
Set i = GDI.CreateImage(FSO.BuildPath("D:\Progr_Progi\#RIS\map\pic", "66a.bmp"))
CreateObject("prjFloodFill.clsFloodFill").FloodFillImage i, 166, 141, 65280, 255
Set c = GDI.CreateBitmap(i.Width, i.Height, i.Format)
GDI.CreateGraphicsFromImage(c).DrawImage i, 0, 0
c.SaveToJpeg FSO.BuildPath("C:\", "xxx.jpg")
Set GDI = Nothing
End Sub
Private Declare Function FloodFill Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Picture1.FillStyle = vbFSSolid
Picture1.FillColor = RGB(255, 255, 255)
FloodFill Picture1.hDC, x, y, Picture1.Point(x, y) '65280
End Sub
Private Sub FloodFillImageARGB(ByVal Image As PictureBox, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal FillColor As Long)
'very inefficient, but as good as I can
Dim StackX As Collection, StackY As Collection
Set StackX = New Collection: Set StackY = New Collection
Dim w As Long, h As Long
w = Image.Width: h = Image.Height
StackX.Add x: StackY.Add y
While StackX.Count
x = StackX(1): y = StackY(1)
Image.PSet (x, y), FillColor
StackX.Remove 1: StackY.Remove 1
If x > 0 Then x = x - 1: GoSub Test: x = x + 1
If x < w Then x = x + 1: GoSub Test: x = x - 1
If y > 0 Then y = y - 1: GoSub Test: y = y + 1
If y < h Then y = y + 1: GoSub Test: y = y - 1
Wend
Exit Sub
Test:
Select Case Image.Point(x, y)
Case crColor, FillColor: 'ignore
Case Else: If StackX.Count Then StackX.Add x, , 1: StackY.Add y, , 1 Else StackX.Add x: StackY.Add y
End Select
Return
End Sub
FloodFillImageARGB Picture1, x, y, Picture1.Point(x, y), RGB(127, 127, 127)
KyPCAHT писал(а):Бог с этим jpg ....
Написал такую тестовую прогу ....
Ошибок ни каких не пишет, а закрашивать не закрашивает
Могу свою картинку выслать, давай мыло ...
KyPCAHT писал(а):Пробывал твоей функцией заливки, слегка измененной
а вызываю так
- Код: Выделить всё
FloodFillImageARGB Picture1, x, y, Picture1.Point(x, y), RGB(127, 127, 127)
Он закрашивает одну точку и все ...
SavePicture Picture1, "c:\xxx.bmp"
SavePicture Picture1.Image, "c:\xxx.bmp"
Dim Image As Picture
Set Image = LoadPicture("D:\Progr_Progi\#RIS\map\pic\66a.BMP")
hdcImg = GetDC(Image.Handle)
FloodFill hdcImg, 182, 88, 8388608
Picture1.Picture = img
Picture1.Refresh
Private Declare Function SetPixelFormat Lib "gdi32" Alias "SetPixelFormat" (ByVal hDC As Long, ByVal n As Long, pcPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
tyomitch писал(а):1. SetPixelFormat тут не при чём, совершенно.
tyomitch писал(а):Или используй PictureBox, или мою обёртку
KyPCAHT писал(а):tyomitch писал(а):1. SetPixelFormat тут не при чём, совершенно.
Тогда почему когда я заружаю картинку в объект и беру его длину и ширину, то он возвращает мне не в пикселях, а в чем-то левом?
KyPCAHT писал(а):tyomitch писал(а):Или используй PictureBox, или мою обёртку
А разве я могу использовать этот объект без формы(мне же ActiveX нужен), у меня не получалось, писал error 91, что ли, приду домой уточню
А дока к твоей обертке есть?
И так не поделу вопрос: Вы из какого города?
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Mail.ru [бот], Yandex-бот и гости: 7