weil es im "Allgemein Forum" nicht so ganz gut passt dachte ich mir
poste ich es hier für Euch
Eine Procedure mit der man in einem Image eine Farbe gegen ne andere
tauschen kann - entstanden durch eine Frage hier im Board
Die Grundlage habe ich aus dem Archiv von einem Post von Mischa
Wäre ev. ja was fürs Codearchiv?
Zur Geschwindigkeit nur soviel absolut flugs!! *ggg
Viel Spaß damit
FGK
Code: Alles auswählen
;Beispiel zum Erstetzen einer Farbe in einem Image
;04/2006 von FGK
Procedure ReplaceImageColor(Image,OldColor,NewColor)
UseImage(Image)
hdc=StartDrawing(ImageOutput())
b=ImageWidth():h=ImageHeight()
hzwischen=CreateCompatibleBitmap_(hdc,b,h)
HdcTemp=CreateCompatibleDC_(hdc)
obj=SelectObject_(HdcTemp,hzwischen)
HdcBack=CreateCompatibleDC_(hdc)
HdcObject=CreateCompatibleDC_(hdc)
HdcMem=CreateCompatibleDC_(hdc)
HdcSave=CreateCompatibleDC_(hdc)
BmPAndBack=CreateBitmap_(b,h,1,1,0)
BmPAndObject=CreateBitmap_(b,h,1,1,0)
BmPAndMem=CreateCompatibleBitmap_(hdc,b,h)
BmPSave=CreateCompatibleBitmap_(hdc,b,h)
BmpBackOld=SelectObject_(HdcBack,BmPAndBack)
BmpObjectOld=SelectObject_(HdcObject,BmPAndObject)
BmpMemOld=SelectObject_(HdcMem,BmPAndMem)
BmpSaveOld=SelectObject_(HdcSave,BmPSave)
BitBlt_(HdcTemp,0,0,b,h,hdc,0,0,#SRCCOPY)
BitBlt_(HdcSave,0,0,b,h,HdcTemp,0,0,#SRCCOPY)
CColor=SetBkColor_(HdcTemp,OldColor)
BitBlt_(HdcObject,0,0,b,h,HdcTemp,0,0,#SRCCOPY)
SetBkColor_(HdcTemp,CColor)
StopDrawing()
ColorImage=CreateImage(#PB_Any,b,h)
UseImage(Image)
target=StartDrawing(ImageOutput())
Box(0,0,b,h,NewColor)
BitBlt_(HdcBack,0,0,b,h,HdcObject,0,0,#NOTSRCCOPY)
BitBlt_(HdcMem,0,0,b,h,target,x,y,#SRCCOPY)
BitBlt_(HdcMem,0,0,b,h,HdcObject,0,0,#SRCAND)
BitBlt_(HdcTemp,0,0,b,h,HdcBack,0,0,#SRCAND)
BitBlt_(HdcMem,0,0,b,h,HdcTemp,0,0,#SRCPAINT)
BitBlt_(HdcTemp,0,0,b,h,HdcMem,0,0,#SRCCOPY)
BitBlt_(target,0,0,b,h,HdcTemp,0,0,#SRCCOPY)
StopDrawing()
UseImage(Image)
StartDrawing(ImageOutput())
DrawImage(ColorImage,0,0)
StopDrawing()
;Cleanup Handles
DeleteObject_(obj):DeleteObject_(BmpBackOld)
DeleteObject_(BmpObjectOld):DeleteObject_(BmpMemOld)
DeleteObject_(BmpSaveOld):DeleteDC_(HdcMem)
DeleteDC_(HdcBack):DeleteDC_(HdcObject)
DeleteDC_(HdcSave):DeleteDC_(HdcTemp)
DeleteObject_(hzwischen):DeleteObject_(BmPAndBack)
DeleteObject_(BmPAndObject):DeleteObject_(BmPAndMem)
DeleteObject_(BmPSave)
EndProcedure
LoadImage(1, "C:\Develop\PureBasic3-92\Examples\Sources\Data\Purebasic.bmp") ;<-Pfad/Name anpassen
CopyImage(1,2)
ReplaceImageColor(1,RGB(87,109,131),RGB(0,255,255))
OpenWindow(0,0,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ImageColorReplace")
CreateGadgetList(WindowID())
ImageGadget(0, 0, 0, 400, 200, UseImage(2))
ImageGadget(1, 0, 200, 400, 200, UseImage(1))
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow