Strich Punkt Strich Linie

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Strich Punkt Strich Linie

Beitrag von Velindos »

Hallo Leute,

möchte die Linie mit LCLK Zeichnen ...

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [IMG] DE/ENCODER
;  ++++++++++++++++++++++++++++++
UseTGAImageDecoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseTIFFImageDecoder()
;}
;- ++++++++++++++++++++++++++++++

Global hwnd

Global x1,y1,x2,y2
Global Rotstift_ShowLine.i
Global Rotstift_Deleter
Global DeltaX 
Global DeltaY

Global Start.Point
Global RotstiftStart_X
Global RotstiftStart_Y
Global RotstiftEnde_X
Global RotstiftEnde_Y

Global RotstiftStaerke = 20
Global Rotstift_Color = $01FFFE
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Enumeration
  #ImageGadget
  #ImageZeichnen
  #Img_Rotstift_Bild 
EndEnumeration
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_ThickLineXY(X1.i, Y1.i, X2.i, Y2.i, Rotstift_Color.i, Thickness.i)
  Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
  Protected I, DeltaX.i, DeltaY.i
  If Length = 0
    Circle(X1, Y1, Thickness/2, Rotstift_Color)
  Else
    For I = 0 To Length
      DeltaX = (X2-X1)*I/Length
      DeltaY = (Y2-Y1)*I/Length
      Circle(X1+DeltaX, Y1+DeltaY, Thickness/2, Rotstift_Color)
    Next
  EndIf
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure DashDotL(x1.i, y1.i, x2.i, y2.i, Color.i,Thick.f,Lstep.f)
  Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
  Protected scale.f
  Protected i
  
  scale.f = (y2-y1)/(x2-x1)
  
  ;   For i = 0 To 10
  For i = 0 To Length
    
    ; macht Linie
    Rotstift_ThickLineXY(x1,y1,x1+Lstep,y1 + Lstep * scale, Color, Thick)
    
    If Thick = 1
      ; Punkt machen
      Circle(x1+Lstep + Lstep/2,y1+1.5 * Lstep * scale,Thick,Color)
    Else
      ; Macht Punkte 
      Circle(x1+Lstep + Lstep/2,y1+1.5 * Lstep * scale,Thick/2,Color)
    EndIf
    
    ; aufschaltung
    x1 = x1+Lstep + Lstep
    y1 = y1+2*Lstep*scale
    
  Next
  
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_MouseDown()
  Rotstift_ShowLine = #True
  Debug "Rotstift_MouseDown" + Rotstift_ShowLine
  Debug "WindowMouseX(hwnd) ="+WindowMouseX(hwnd)
  Debug "WindowMouseY(hwnd) ="+WindowMouseY(hwnd)
  Debug "Start\X ="+Start\X
  Debug "Start\Y ="+Start\Y
  RotstiftStart_X =  WindowMouseX(hwnd)
  RotstiftStart_Y =  WindowMouseY(hwnd)
EndProcedure
Procedure Rotstift_MouseMove()
  
  Debug "Rotstift_MouseMove" + Rotstift_ShowLine
  
  
  If Rotstift_ShowLine = #True
    
    RotstiftEnde_X = WindowMouseX(hwnd)
    RotstiftEnde_Y = WindowMouseY(hwnd)
    
    
    DeltaX = Start\X - WindowMouseX(hwnd)
    DeltaY = Start\Y - WindowMouseY(hwnd)
    Debug "DeltaX =" + DeltaX
    Debug "DeltaY =" + DeltaY
    
    StartDrawing(ImageOutput(#ImageZeichnen))
    DrawImage(ImageID(#Img_Rotstift_Bild), 0, 0)
    
    DrawingMode(#PB_2DDrawing_Default)
    DashDotL(RotstiftEnde_X, RotstiftEnde_Y, RotstiftStart_X, RotstiftStart_Y,$01FFFE,4,20)
    
    StopDrawing()
    SetGadgetState(#ImageGadget,ImageID(#ImageZeichnen))
    
  EndIf
EndProcedure
Procedure Rotstift_MouseUp ()
  Debug "Rotstift_MouseUp" + Rotstift_ShowLine
  DeltaX = Start\X - WindowMouseX(hwnd)
  DeltaY = Start\Y - WindowMouseY(hwnd)
  Debug "DeltaX =" + DeltaX
  Debug "DeltaY =" + DeltaY
  
  StartDrawing(ImageOutput(#Img_Rotstift_Bild))
  DrawingMode(#PB_2DDrawing_AlphaBlend)
  DrawImage(ImageID(#ImageZeichnen), 0, 0)
  
  
  DrawingMode(#PB_2DDrawing_Default)
  DashDotL(RotstiftEnde_X, RotstiftEnde_Y, RotstiftStart_X, RotstiftStart_Y,$01FFFE,4,20)
  
  
  StopDrawing()
  ; CopyImage(#ImageZeichnen,#Img_Rotstift_Bild)
  SetGadgetState(#ImageGadget,ImageID(#Img_Rotstift_Bild))
  
  Rotstift_ShowLine = #False
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_RechteMouseDown ()
  Debug "Rotstift_RechteMouseDown"
  Rotstift_Deleter = #True
EndProcedure
Procedure Rotstift_RechteMouseUp()
  Debug "Rotstift_RechteMouseUp"
  Rotstift_Deleter = #False
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_CallBack(WindowID, uMsg, wParam, lParam) 
  Protected Result
  Result = #PB_ProcessPureBasicEvents
  ;LINKE Maustaste
  Select uMsg
    Case #WM_LBUTTONDOWN
      Rotstift_MouseDown()
    Case #WM_MOUSEMOVE
      Rotstift_MouseMove()
    Case #WM_LBUTTONUP
      Rotstift_MouseUp ()
    Case #WM_RBUTTONDOWN  
      Rotstift_RechteMouseDown ()
    Case #WM_RBUTTONUP
      Rotstift_RechteMouseUp()
  EndSelect
  ProcedureReturn Result 
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; -----------------------------
hwnd = OpenWindow(#PB_Any, 0, 0, 667, 687, "DrawWindows DashDotL", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
; -----------------------------
CreateImage(#ImageZeichnen, 667, 667,24,$FFFFFF)


CreateImage(#Img_Rotstift_Bild, 667, 667,24,RGB(210, 105, 30))
; -----------------------------
ImageGadget(#ImageGadget, 0, 0, 667, 667,ImageID(#Img_Rotstift_Bild))
; -----------------------------
DisableGadget(#ImageGadget,1)
; -----------------------------
SetWindowCallback(@Rotstift_CallBack(),hwnd)
; -----------------------------



;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Define WindowNr ,event ,Key.l
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Repeat
  
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_CloseWindow
      End
      
      
      
  EndSelect
  
ForEver

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Strich Punkt Strich Linie

Beitrag von ccode_new »

Hallo Velindos,

wie meinst du das ?

"LCLK" = LeftClick ?

Wenn ja:

Hier ein Beispiel:

Code: Alles auswählen

Procedure DashDot_Line(x1.d, y1.d, x2.d, y2.d, thickness.i, color.i)
  Protected dx.d, dy.d, length.d, i.i, x.d, y.d
  
  dx = Abs(x2 - x1)
  dy = Abs(y2 - y1)
  
  If(dx>dy)
    length = dx
  Else
    length = dy
  EndIf
  
  dx = (x2-x1) / length
  dy = (y2-y1) / length
  
  x = x1 + 0.5 * Sign(dx)
  y = y1 + 0.5 * Sign(dy)

  i = 0   
  
  While(i <= length)
    x=x+dx
    y=y+dy
    
    If i % 30 = 15
      Circle(x, y, thickness, color)
    ElseIf Not (i % 30 > 5 And i % 30 < 25)
      Circle(x, y, thickness, color)
    EndIf
    
    i+1
  Wend
EndProcedure

Enumeration
  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave 
EndEnumeration

Enumeration
  #GADGET_Canvas
  #GADGET_Color 
  #GADGET_Brush
  #GADGET_Line
  #GADGET_Box
  #GADGET_Circle
  #GADGET_Fill
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
EndEnumeration

Global CurrentColor, CurrentMode, StartX, StartY

; Draw the mouse action result depending on the currently selected mode and event type
;
Procedure DrawAction(x, y, EventType)

  If StartDrawing(CanvasOutput(#GADGET_Canvas))
    Select CurrentMode
    
      Case #GADGET_Brush
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, 5, CurrentColor)
        EndIf
        
      Case #GADGET_Line
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        ;LineXY(StartX, StartY, x, y, 20, CurrentColor)
        
        ;-Andere Linienart
        DashDot_Line(StartX, StartY, x, y, 3, CurrentColor)
      
      Case #GADGET_Box
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
        
      Case #GADGET_Circle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        
        If x > StartX
          rx = x - StartX
        Else
          rx = StartX - x
        EndIf
        
        If y > StartY
          ry = y - StartY
        Else
          ry = StartY - y
        EndIf
        
        If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
          ry = rx
        EndIf
        
        Ellipse(StartX, StartY, rx, ry, CurrentColor)
      
      Case #GADGET_Fill
        If EventType = #PB_EventType_LeftButtonDown
          FillArea(x, y, -1, CurrentColor)
        EndIf
  
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

CurrentColor = $000000
CurrentMode  = #GADGET_Line
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content, 380, 380, 24)

If OpenWindow(0, 0, 0, 460, 400, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(#GADGET_Canvas, 10, 10, 380, 380, #PB_Canvas_ClipMouse)

  ButtonImageGadget(#GADGET_Color, 400, 10, 50, 50, ImageID(#IMAGE_Color))
  
  ButtonGadget(#GADGET_Brush,  400, 100, 50, 25, "Brush",  #PB_Button_Toggle)
  ButtonGadget(#GADGET_Line,   400, 130, 50, 25, "Line",   #PB_Button_Toggle)
  ButtonGadget(#GADGET_Box,    400, 160, 50, 25, "Box",    #PB_Button_Toggle)
  ButtonGadget(#GADGET_Circle, 400, 190, 50, 25, "Circle", #PB_Button_Toggle)
  ButtonGadget(#GADGET_Fill,   400, 220, 50, 25, "Fill",   #PB_Button_Toggle)
  
  DisableGadget(#GADGET_Brush, 1)
  DisableGadget(#GADGET_Box, 1)
  DisableGadget(#GADGET_Circle, 1)
  DisableGadget(#GADGET_Fill, 1)
    
  ButtonGadget(#GADGET_Clear,  400, 280, 50, 25, "Clear")
  
  ButtonGadget(#GADGET_Load,   400, 335, 50, 25, "Load")
  ButtonGadget(#GADGET_Save,   400, 365, 50, 25, "Save")
  
  SetGadgetState(#GADGET_Line, 1)
  SetActiveGadget(#GADGET_Line)
  
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)

  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
    
      Select EventGadget()
      
        Case #GADGET_Canvas
          X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
          Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
          Type = EventType()
        
          Select EventType()
          
            Case #PB_EventType_LeftButtonDown
              ;
              ; This stores the current content of the CanvasGadget in #IMAGE_Content,
              ; so it can be re-drawn while the mouse moves
              ;
              If StartDrawing(ImageOutput(#IMAGE_Content))
                DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
                StopDrawing()
              EndIf
              
              StartX = X
              StartY = Y
              DrawAction(X, Y, EventType())

            
            Case #PB_EventType_LeftButtonUp
              DrawAction(X, Y, EventType())                        
            
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                DrawAction(X, Y, EventType())            
              EndIf
                      
          EndSelect
        
        Case #GADGET_Color
          CurrentColor = ColorRequester(CurrentColor)
          If StartDrawing(ImageOutput(#IMAGE_Color))
            Box(0, 0, 35, 35, CurrentColor)
            StopDrawing()
            SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
          EndIf
          
        Case #GADGET_Brush, #GADGET_Line, #GADGET_Box, #GADGET_Circle, #GADGET_Fill
          EventGadget = EventGadget()
          For Gadget = #GADGET_Brush To #GADGET_Fill
            If Gadget = EventGadget
              SetGadgetState(Gadget, 1) 
            Else
              SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
            EndIf
          Next Gadget          
          CurrentMode = EventGadget             
      
        Case #GADGET_Clear
          If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, 380, 380, $FFFFFF)
            StopDrawing()
          EndIf
      
        Case #GADGET_Load
          File$ = OpenFileRequester("Load Image...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
          If File$
            If LoadImage(#IMAGE_LoadSave, File$)
              If StartDrawing(CanvasOutput(#GADGET_Canvas))
                Box(0, 0, 380, 380, $FFFFFF)
                DrawImage(ImageID(#IMAGE_LoadSave), 0, 0)
                StopDrawing()
              EndIf
              FreeImage(#IMAGE_LoadSave)
            Else
              MessageRequester("CanvasGadget", "Cannot load image: " + File$)
            EndIf
          EndIf
              
        Case #GADGET_Save
          File$ = SaveFileRequester("Save Image...", File$, "JPEG Images|*.jpeg|All Files|*.*", 0)
          If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
            If CreateImage(#IMAGE_LoadSave, 380, 380, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
              DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
              StopDrawing()
              
              If SaveImage(#IMAGE_LoadSave, File$, #PB_ImagePlugin_JPEG) = 0
                MessageRequester("CanvasGadget", "Cannot save image: " + File$)
              EndIf
              
              FreeImage(#IMAGE_LoadSave)
            EndIf            
          EndIf
                
      EndSelect
    
    EndIf
    
  Until Event = #PB_Event_CloseWindow

EndIf
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Strich Punkt Strich Linie

Beitrag von Velindos »

Hallo ccode_new,
Danke für deinen Vorschlag, funzt!

Nun habe ich noch einen Radiergummi mit RCLK eingebaut.

Für das Löschen verwende ich die Radiergummifarbe gleich der Hintergrundfarbe, dass funzt! Aber ...

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [IMG] DE/ENCODER
;  ++++++++++++++++++++++++++++++
UseTGAImageDecoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseTIFFImageDecoder()
;}
;- ++++++++++++++++++++++++++++++
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ CONST
Enumeration
  #ImageZeichnen
  #Img_Rotstift_Bild
  #Img_Rotstift_Edit_FontColor
EndEnumeration
;}
;{ GLOBAL´s
Global hwnd
Global RotstiftGadget_ImageGadget
Global RotstiftGadget_Linie
Global RotstiftGadget_Strichliert
Global RotstiftGadget_Linienfarbe
Global RotstiftGadget_Staerke

Global RotstiftGadget_Mode = 0

Global x1,y1,x2,y2
Global Rotstift_ShowLine.i
Global Rotstift_Radiergummi
Global DeltaX
Global DeltaY

Global OffsetX = 0
Global OffsetY = 45

Global Graph_RotStart.Point
Global Graph_RotEnde.Point

Global Rotstift_Staerke = 3
Global Rotstift_Color = $01FFFE


Global Font_Arial.s = "Arial"
Global Font_Rotstift_Staerke = LoadFont(#PB_Any,Font_Arial, 13,#PB_Font_Bold|#PB_Font_HighQuality)

Global Img_Rotstift_Edit_FontColor = CreateImage(#Img_Rotstift_Edit_FontColor,30,30,24,Rotstift_Color)

Global Radiergummifarbe =  RGB(210, 105, 30)
Global Img_Rotstift_Bild = CreateImage(#Img_Rotstift_Bild, 667, 667,24,Radiergummifarbe)

Global ImageZeichnen = CreateImage(#ImageZeichnen, 667, 667,24, $FFFFFF)
; -----------------------------

;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_ThickLineXY(X1.i, Y1.i, X2.i, Y2.i, Thickness.i, Rotstift_Color.i)
  Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
  Protected I, DeltaX.i, DeltaY.i
  If Length = 0
    Circle(X1, Y1, Thickness/2, Rotstift_Color)
  Else
    For I = 0 To Length
      DeltaX = (X2-X1)*I/Length
      DeltaY = (Y2-Y1)*I/Length
      Circle(X1+DeltaX, Y1+DeltaY, Thickness/2, Rotstift_Color)
    Next
  EndIf
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure DashDot_Line(x1.d, y1.d, x2.d, y2.d, thickness.i, color.i)
  Protected dx.d, dy.d, length.d, i.i, x.d, y.d
  
  dx = Abs(x2 - x1)
  dy = Abs(y2 - y1)
  
  If(dx>dy)
    length = dx
  Else
    length = dy
  EndIf
  
  dx = (x2-x1) / length
  dy = (y2-y1) / length
  
  x = x1 + 0.5 * Sign(dx)
  y = y1 + 0.5 * Sign(dy)
  
  i = 0   
  
  While(i <= length)
    x=x+dx
    y=y+dy
    
    If i % 30 = 15
      Circle(x, y, thickness, color)
    ElseIf Not (i % 30 > 5 And i % 30 < 25)
      Circle(x, y, thickness, color)
    EndIf
    
    i+1
  Wend
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_Radiergummi()
  
  Graph_RotEnde\X = WindowMouseX(hwnd) - OffsetX
  Graph_RotEnde\Y = WindowMouseY(hwnd) - OffsetY
  
  StartDrawing(ImageOutput(#ImageZeichnen))
  Circle(Graph_RotEnde\X,Graph_RotEnde\Y, 10, Radiergummifarbe)
  StopDrawing()
  
  CopyImage(#ImageZeichnen,#Img_Rotstift_Bild)
  
  SetGadgetState(RotstiftGadget_ImageGadget,ImageID(#Img_Rotstift_Bild))
EndProcedure

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_MouseDown()
  Rotstift_ShowLine = #True
  Graph_RotStart\X =  WindowMouseX(hwnd) - OffsetX
  Graph_RotStart\Y =  WindowMouseY(hwnd) - OffsetY
EndProcedure
Procedure Rotstift_MouseMove()
  
  Debug "Rotstift_MouseMove" + Rotstift_ShowLine
  
  
  If Rotstift_ShowLine = #True
    
    Graph_RotEnde\X = WindowMouseX(hwnd) - OffsetX
    Graph_RotEnde\Y = WindowMouseY(hwnd) - OffsetY
    
    StartDrawing(ImageOutput(#ImageZeichnen))
    DrawImage(ImageID(#Img_Rotstift_Bild), 0, 0)
    DrawingMode(#PB_2DDrawing_Default)
    
    
    If RotstiftGadget_Mode = 0
      Rotstift_ThickLineXY(Graph_RotEnde\X, Graph_RotEnde\Y, Graph_RotStart\X, Graph_RotStart\Y,Rotstift_Staerke,Rotstift_Color)
    Else
      DashDot_Line(Graph_RotEnde\X, Graph_RotEnde\Y, Graph_RotStart\X, Graph_RotStart\Y,Rotstift_Staerke/2,Rotstift_Color)
    EndIf
    
    StopDrawing()
    SetGadgetState(RotstiftGadget_ImageGadget,ImageID(#ImageZeichnen))
    
  EndIf
EndProcedure
Procedure Rotstift_MouseUp ()
  
  Graph_RotEnde\X = WindowMouseX(hwnd) - OffsetX
  Graph_RotEnde\Y = WindowMouseY(hwnd) - OffsetY
  
  
  StartDrawing(ImageOutput(#Img_Rotstift_Bild))
  DrawingMode(#PB_2DDrawing_AlphaBlend)
  DrawImage(ImageID(#ImageZeichnen), 0, 0)
  DrawingMode(#PB_2DDrawing_Default)
  
  
  If RotstiftGadget_Mode = 0
    Rotstift_ThickLineXY(Graph_RotEnde\X, Graph_RotEnde\Y, Graph_RotStart\X, Graph_RotStart\Y,Rotstift_Staerke,Rotstift_Color)
  Else
    DashDot_Line(Graph_RotEnde\X, Graph_RotEnde\Y, Graph_RotStart\X, Graph_RotStart\Y,Rotstift_Staerke/2,Rotstift_Color)
  EndIf
  
  StopDrawing()
  ; CopyImage(#ImageZeichnen,#Img_Rotstift_Bild)
  SetGadgetState(RotstiftGadget_ImageGadget,ImageID(#Img_Rotstift_Bild))
  
  Rotstift_ShowLine = #False
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_RechteMouseDown ()
  Debug "Rotstift_RechteMouseDown"
  Rotstift_Radiergummi = #True
EndProcedure
Procedure Rotstift_RechteMouseUp()
  Debug "Rotstift_RechteMouseUp"
  Rotstift_Radiergummi = #False
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rotstift_CallBack(WindowID, uMsg, wParam, lParam)
  Protected Result
  Result = #PB_ProcessPureBasicEvents
  ;LINKE Maustaste
  Select uMsg
    Case #WM_LBUTTONDOWN
      Rotstift_MouseDown()
    Case #WM_MOUSEMOVE
      Debug "MOUSEMOVE= "+Rotstift_Radiergummi
      If Rotstift_Radiergummi = #True      
        Rotstift_Radiergummi()
      Else
        Rotstift_MouseMove()
      EndIf
    Case #WM_LBUTTONUP
      Rotstift_MouseUp ()
    Case #WM_RBUTTONDOWN 
      Rotstift_RechteMouseDown ()
    Case #WM_RBUTTONUP
      Rotstift_RechteMouseUp()
  EndSelect
  ProcedureReturn Result
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{ Main
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
hwnd = OpenWindow(#PB_Any, 0, 0, 667, 735, "Strich Punkt Strich Linie mit Radierer mit Radiergummi", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
; -----------------------------
RotstiftGadget_Linienfarbe = ButtonImageGadget (#PB_Any,0,1,30,30,ImageID(#Img_Rotstift_Edit_FontColor))
GadgetToolTip(RotstiftGadget_Linienfarbe, "Linienfarbe")
; -----------------------------
RotstiftGadget_Staerke = SpinGadget(#PB_Any,  31, 1, 40, 30, 1, 40 ,#PB_Spin_Numeric  )
SetGadgetFont(RotstiftGadget_Staerke,FontID(Font_Rotstift_Staerke))
SetGadgetState (RotstiftGadget_Staerke,Rotstift_Staerke) 
SetGadgetText(RotstiftGadget_Staerke,Str(Rotstift_Staerke)) 
GadgetToolTip(RotstiftGadget_Staerke, "Stiftstaerke")
; -----------------------------
RotstiftGadget_Linie = ButtonGadget(#PB_Any,71,1,30,30,"---")
; -----------------------------
RotstiftGadget_Strichliert = ButtonGadget(#PB_Any,101,1,30,30,"- - -")
; -----------------------------
RotstiftGadget_ImageGadget = ImageGadget(#PB_Any, OffsetX, OffsetY, 667, 667,ImageID(#Img_Rotstift_Bild))
DisableGadget(RotstiftGadget_ImageGadget,1)
; -----------------------------
SetWindowCallback(@Rotstift_CallBack(),hwnd)
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Define WindowNr ,event ,Key.l
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Repeat
  
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      ;{ GADGET
      Select EventGadget()
        Case RotstiftGadget_Linie
          RotstiftGadget_Mode = 0
        Case RotstiftGadget_Strichliert
          RotstiftGadget_Mode = 1
        Case RotstiftGadget_Linienfarbe
          ;{
          Rotstift_Color = ColorRequester()
          If Rotstift_Color
            FreeImage(Img_Rotstift_Edit_FontColor)
            CreateImage(#Img_Rotstift_Edit_FontColor,30,30,24,Rotstift_Color)
            SetGadgetAttribute(RotstiftGadget_Linienfarbe , #PB_Button_Image ,ImageID(#Img_Rotstift_Edit_FontColor))
          EndIf
          ;}
          
        Case RotstiftGadget_Staerke
          ; Rotstiftstaerke
          SetGadgetText(RotstiftGadget_Staerke, Str(GetGadgetState(RotstiftGadget_Staerke)))
          Rotstift_Staerke = GetGadgetState(RotstiftGadget_Staerke) 
          
      EndSelect
      ;}
  EndSelect
  
ForEver
Wenn ich ein Bild hinterlege habe ich aber das Probleme das ich das Bild mit dieser Farbe übermale!
Meine Frage: Gibt es eine Transparent Farbe?
Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Strich Punkt Strich Linie

Beitrag von ccode_new »

Velindos hat geschrieben:Nun habe ich noch einen Radiergummi mit RCLK eingebaut.

Für das Löschen verwende ich die Radiergummifarbe gleich der Hintergrundfarbe, dass funzt! Aber ...
Aber ... !!!

Das "Aber" ist echt knifflig! Ohne spezielle API-Kenntnisse ist es mit reinen PureBasic-Mittel recht kompliziert.

Unter Windows könnte ein Weiterforschen mit dieser Funktion: "TransparentBlt" helfen.

Hier mal ein "naja geht so" - plattformübergreifendes PureBasic-Beispiel:

Code: Alles auswählen

UseJPEGImageDecoder()
UsePNGImageDecoder()

Structure MPos
  x.d
  y.d
EndStructure

Global CMouse.MPos

Global bgimg.s = ""

Global selectMode.w = 0 ; 1 = Clear / 2 = Paint

Global base = CreateImage(#PB_Any, 400, 400, 32, #PB_Image_Transparent)

Global layer1 = CreateImage(#PB_Any, 400, 400, 32, #PB_Image_Transparent)
Global layer2 = CreateImage(#PB_Any, 400, 400, 32, #PB_Image_Transparent)

Global font = LoadFont(#PB_Any, "Comic Sans MS", 24, #PB_Font_Bold)

Global TranspFilter_Color.f

Procedure Transparent_Filter(x, y, SrcColor, TrgColor)
  If SrcColor = TranspFilter_Color
    ProcedureReturn TrgColor
  EndIf
  ProcedureReturn SrcColor
EndProcedure

StartDrawing(ImageOutput(layer1)) ;Hintergrund-Ebene
DrawingMode(#PB_2DDrawing_AllChannels)
DrawingFont(FontID(font))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(20, 20, "Layer 1", RGB(0,0,255))
StopDrawing()

StartDrawing(ImageOutput(layer2)) ;Zeichen-Ebene
DrawingMode(#PB_2DDrawing_AllChannels)
DrawingFont(FontID(font))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(45, 45, "Layer 2", RGB(255,0,0))
StopDrawing()


Procedure MouseFrame(win, *mRet.MPos, mx, my, mw, mh)
  Protected mxx, myy
  *mRet\x = 0 : *mRet\y = 0
  mxx = WindowMouseX(win) : myy = WindowMouseY(win)
  If (mxx > mx And mxx < (mw+mx)) And (myy > my And myy < (mh+my))
    *mRet\x = 400 / mw * (mxx-mx) ;Bildwerte müssen angepasst werden.
    *mRet\y = 400 / mh * (myy-my)
  EndIf
EndProcedure

Procedure.b OverGadget(*MausPos.MPos, Element)
  If ((*MausPos\x >= GadgetX(Element)) And (*MausPos\x <= (GadgetX(Element) + GadgetWidth(Element))) And (*MausPos\y >= GadgetY(Element)) And (*MausPos\y <= GadgetY(Element) + GadgetHeight(Element)))
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure DrawBase()
  
  StartDrawing(ImageOutput(base)) ;Das transparente Gesamtbild (für das Canvas-Gadget)
  
  Box(0, 0, ImageWidth(base),ImageHeight(base), RGB(0,0,0))
  
  DrawingMode(#PB_2DDrawing_CustomFilter)
  TranspFilter_Color = RGB(0,0,0)
  CustomFilterCallback(@Transparent_Filter())
  
  DrawAlphaImage(ImageID(layer1), 0, 0)
  DrawAlphaImage(ImageID(layer2), 0, 0)
  
  StopDrawing()
  
  StartDrawing(CanvasOutput(0))
  DrawImage(ImageID(base), 0, 0)
  StopDrawing()
EndProcedure


OpenWindow(0, 0, 0, 420, 460, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(0, 10, 50, 400, 400) ;Canvas kann viel, aber keine Transparents ! 

ButtonGadget(1, 10, 10, 150, 30, "Load BG-Image")
ButtonGadget(2, 170, 10, 150, 30, "Clear-Pen")
ButtonGadget(3, 330, 10, 80, 30, "Paint")

DrawBase()

Repeat
  event = WindowEvent()
  
  If event = #PB_Event_Gadget
    If EventGadget() = 1 ;Lade Hintergrundbild
      If selectMode <> 0 : selectMode = 0 : EndIf
      
      bgimg = OpenFileRequester("Bitte ein Bild auswählen.", "", "*.jpg;*.JPG;*.jpeg;*.png;*.bmp", 0)
      If bgimg <> ""
        LoadImage(0, bgimg)
        If IsImage(0)
          ResizeImage(0, ImageWidth(layer1), ImageHeight(layer1)) 
          StartDrawing(ImageOutput(layer1))
          DrawAlphaImage(ImageID(0), 0, 0)
          StopDrawing()
          DrawBase()
        EndIf
      EndIf
    ElseIf EventGadget() = 2 ;Clear (Radiergummi)
      If selectMode <> 1
        selectMode = 1
        MessageRequester("Huhu!!!", "Der Radierer wurde ausgewählt.")
      Else
        selectMode = 0
        MessageRequester("Huhu!!!", "Der Radierer wurde deaktiviert.")
      EndIf
    ElseIf EventGadget() = 3 ;Paint
      If selectMode <> 2
        selectMode = 2
        MessageRequester("Huhu!!!", "Der Malpinsel wurde ausgewählt.")
      Else
        selectMode = 0
        MessageRequester("Huhu!!!", "Der Malpinsel wurde deaktiviert.")
      EndIf
    EndIf
  EndIf
  
  If selectMode = 1
    CMouse\x = WindowMouseX(0)
    CMouse\y = WindowMouseY(0)
    If OverGadget(@CMouse, 0)
      
      MouseFrame(0, @CMouse, GadgetX(0), GadgetY(0), GadgetWidth(0), GadgetHeight(0))
      
      StartDrawing(ImageOutput(layer2))
      
      DrawingMode(#PB_2DDrawing_CustomFilter)
      TranspFilter_Color = Point(CMouse\x, CMouse\y)
      CustomFilterCallback(@Transparent_Filter())
      
      Circle(CMouse\x, CMouse\y, 20, RGB(0,0,0))
      StopDrawing()
      
      DrawBase()
    EndIf
  ElseIf selectMode = 2
    CMouse\x = WindowMouseX(0)
    CMouse\y = WindowMouseY(0)
    If OverGadget(@CMouse, 0)
      
      MouseFrame(0, @CMouse, GadgetX(0), GadgetY(0), GadgetWidth(0), GadgetHeight(0))
      
      StartDrawing(ImageOutput(layer2))
      
      Circle(CMouse\x, CMouse\y, 20, RGB(0,255,0))
      
      StopDrawing()
      
      DrawBase()
    EndIf
  EndIf
  
  ;Delay(20)
Until event = #PB_Event_CloseWindow

End
Es ist stark ausbaufähig!
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Strich Punkt Strich Linie

Beitrag von mk-soft »

Vor dem Zeichnen oder Radieren von dem Hintergrundbild eine Kopie erstellen...

So ähnlich wie hier: viewtopic.php?f=8&t=28782
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Strich Punkt Strich Linie

Beitrag von ccode_new »

...Oder man trickst noch weiter:
(Bye Bye liebes CanvasGadget :) )

Code: Alles auswählen

UseJPEGImageDecoder()
UsePNGImageDecoder()

InitSprite()

Structure MPos
  x.d
  y.d
EndStructure

Global event.i

Global CMouse.MPos

Global IsOver.b = #False

Global bgimg.s = ""

Global layer1.i
Global layer2.i
Global layer3.i

Global layer1_img.i
Global layer2_img.i
Global layer3_img.i

Global sx.i, sy.i

Global selMode.w = 0 ;(0 = Pinsel / 1 = normale Linie / 2 = Strich-Punkt-Linie)

Global isLine.b = #False

Global big.i = 6

Global DrawColor = RGB(0,255,0)

Global font = LoadFont(#PB_Any, "Comic Sans MS", 24, #PB_Font_Bold)

Procedure.b MouseFrame(win, *mRet.MPos, iw, ih, mx, my, mw, mh)
  Protected mxx, myy
  *mRet\x = 0 : *mRet\y = 0
  mxx = WindowMouseX(win) : myy = WindowMouseY(win)
  If (mxx > mx And mxx < (mw+mx)) And (myy > my And myy < (mh+my))
    *mRet\x = iw / mw * (mxx-mx)
    *mRet\y = ih / mh * (myy-my)
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Normal_Line(x1.d, y1.d, x2.d, y2.d, thickness.i, color.i)
  Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
  Protected I, DeltaX.i, DeltaY.i
  If Length = 0
    Circle(X1, Y1, thickness/2, color)
  Else
    For I = 0 To Length
      DeltaX = (X2-X1)*I/Length
      DeltaY = (Y2-Y1)*I/Length
      Circle(X1+DeltaX, Y1+DeltaY, thickness/2, color)
    Next
  EndIf
EndProcedure

Procedure DashDot_Line(x1.d, y1.d, x2.d, y2.d, thickness.i, color.i)
  Protected dx.d, dy.d, length.d, i.i, x.d, y.d
  
  dx = Abs(x2 - x1)
  dy = Abs(y2 - y1)
  
  If(dx>dy)
    length = dx
  Else
    length = dy
  EndIf
  
  dx = (x2-x1) / length
  dy = (y2-y1) / length
  
  x = x1 + 0.5 * Sign(dx)
  y = y1 + 0.5 * Sign(dy)
  
  i = 0   
  
  While(i <= length)
    x=x+dx
    y=y+dy
    
    If i % 30 = 15
      Circle(x, y, thickness/2, color)
    ElseIf Not (i % 30 > 5 And i % 30 < 25)
      Circle(x, y, thickness/2, color)
    EndIf
    
    i+1
  Wend
EndProcedure

Procedure.l MouseWheelDelta()
  Define wz.l
  
  wz = ((EventwParam() >> 16) & $FFFF)
  ProcedureReturn -(wz/100)
EndProcedure


OpenWindow(0, 0, 0, 420, 500, "Trick 17 (mit GPU-Power)", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 10, 90, 400, 400)

layer1_img = CreateImage(#PB_Any, 400, 400, 32, #PB_Image_Transparent)
layer2_img = CreateImage(#PB_Any, 400, 400, 32, #PB_Image_Transparent)
layer3_img = CreateImage(#PB_Any, 400, 400, 32, #PB_Image_Transparent)

layer1 = CreateSprite(#PB_Any, 400, 400, #PB_Sprite_AlphaBlending)
layer2 = CreateSprite(#PB_Any, 400, 400, #PB_Sprite_AlphaBlending)

StartDrawing(ImageOutput(layer1_img)) ;Hintergrund-Ebene
DrawingMode(#PB_2DDrawing_AllChannels)
DrawingFont(FontID(font))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(20, 20, "Layer 1", RGB(0,0,255))
StopDrawing()

StartDrawing(ImageOutput(layer2_img)) ;Zeichen-Ebene
DrawingFont(FontID(font))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(45, 45, "Layer 2", RGB(255,0,0))
StopDrawing()

StartDrawing(SpriteOutput(layer1))
DrawImage(ImageID(layer1_img), 0, 0)
StopDrawing()

StartDrawing(SpriteOutput(layer2))
DrawImage(ImageID(layer2_img), 0, 0)
StopDrawing()

TransparentSpriteColor(layer1, RGB(0,0,0))
TransparentSpriteColor(layer2, RGB(0,0,0))

ButtonGadget(1, 10, 10, 150, 70, "Load BG-Image")
TextGadget(2, 170, 10, 300, 50, "LSTRG + ( LCLK = Zeichnen / RCLK = Löschen )"+#CRLF$+"MCLK = Farbwahl / MWHEEL = Werkzeugwahl"+#CRLF$+"LSTRG + MWHEEL = Zoom")
TextGadget(3, 170, 65, 300, 20, "aktuelles Werkzeug: Pinsel / Größe: "+Str(big))

DisplayTransparentSprite(layer1, 0, 0)
DisplayTransparentSprite(layer2, 0, 0)

Repeat
  event = WindowEvent()
  
  IsOver = MouseFrame(0, @CMouse, 400, 400, 10, 90, 400, 400)
  
  If IsOver = #True
    If GetKeyState_(#VK_LCONTROL) > 1 And GetKeyState_(#VK_RBUTTON) > 1
      TransparentSpriteColor(layer1, RGB(-1,-1,-1))
      TransparentSpriteColor(layer2, RGB(-1,-1,-1))
      
      TransparentSpriteColor(layer2, RGB(0,0,0))
      
      StartDrawing(ImageOutput(layer2_img))
      Circle(CMouse\x, CMouse\y, 20, RGB(0,0,0))
      StopDrawing()
      
      StartDrawing(SpriteOutput(layer2))
      DrawImage(ImageID(layer2_img), 0, 0)
      StopDrawing()
      
      TransparentSpriteColor(layer1, RGB(0,0,0))
      TransparentSpriteColor(layer2, RGB(0,0,0))
      
    ElseIf GetKeyState_(#VK_LCONTROL) > 1 And GetKeyState_(#VK_LBUTTON) > 1
      If selMode = 0
        TransparentSpriteColor(layer1, RGB(-1,-1,-1))
        TransparentSpriteColor(layer2, RGB(-1,-1,-1))
        
        StartDrawing(ImageOutput(layer2_img))
        Circle(CMouse\x, CMouse\y, big/2, DrawColor)
        StopDrawing()
        
        StartDrawing(SpriteOutput(layer2))
        DrawImage(ImageID(layer2_img), 0, 0)
        StopDrawing()
        
        TransparentSpriteColor(layer1, RGB(0,0,0))
        TransparentSpriteColor(layer2, RGB(0,0,0))
        
      ElseIf selMode = 1 Or selMode = 2
        If isLine = #False
          sx = CMouse\x
          sy = CMouse\y
          
          StartDrawing(ImageOutput(layer3_img))
          DrawImage(ImageID(layer2_img), 0, 0)
          StopDrawing()
          
          isLine = #True
        EndIf
        
        TransparentSpriteColor(layer1, RGB(-1,-1,-1))
        TransparentSpriteColor(layer2, RGB(-1,-1,-1))
        
        TransparentSpriteColor(layer2, RGB(0,0,0))
        
        StartDrawing(ImageOutput(layer2_img))
        DrawImage(ImageID(layer3_img), 0, 0)
        If selMode = 1
          Normal_Line(sx, sy, CMouse\x, CMouse\y, big, DrawColor)
        ElseIf selMode = 2
          DashDot_Line(sx, sy, CMouse\x, CMouse\y, big, DrawColor)
        EndIf
        StopDrawing()
        
        StartDrawing(SpriteOutput(layer2))
        DrawImage(ImageID(layer2_img), 0, 0)
        StopDrawing()
        
        TransparentSpriteColor(layer1, RGB(0,0,0))
        TransparentSpriteColor(layer2, RGB(0,0,0))
        
      EndIf
      
    ElseIf GetKeyState_(#VK_MBUTTON) > 1
      DrawColor = ColorRequester()
      If DrawColor = RGB(0,0,0)
        DrawColor = RGB(1,1,1)
      EndIf
      
    EndIf
  EndIf
  
  If event = #WM_MOUSEWHEEL
    If IsOver = #True
      If GetKeyState_(#VK_LCONTROL) > 1
        If MouseWheelDelta() > -100
          big + 1
          If big >= 20
            big = 20
          EndIf
        ElseIf MouseWheelDelta() < -100
          big - 1
          If big <= 0
            big = 0
          EndIf
        EndIf
      Else
        If MouseWheelDelta() > -100
          selMode + 1
          If selMode >= 2
            selMode = 2
          EndIf
        ElseIf MouseWheelDelta() < -100
          selMode - 1
          If selMode <= 0
            selMode = 0
          EndIf
        EndIf
      EndIf
      If selMode = 0
        SetGadgetText(3, "aktuelles Werkzeug: Pinsel / Größe: "+Str(big))
      ElseIf selMode = 1
        SetGadgetText(3, "aktuelles Werkzeug: normale Linie / Größe: "+Str(big))
      ElseIf selMode = 2
        SetGadgetText(3, "aktuelles Werkzeug: Strich-Punkt-Linie / Größe: "+Str(big))
      EndIf
    EndIf
  EndIf
  
  If event = #WM_LBUTTONUP
    If isLine = #True
      TransparentSpriteColor(layer1, RGB(-1,-1,-1))
      TransparentSpriteColor(layer2, RGB(-1,-1,-1))
      
      StartDrawing(SpriteOutput(layer2))
      If selMode = 1
        Normal_Line(sx, sy, CMouse\x, CMouse\y, big, DrawColor)
      ElseIf selMode = 2
        DashDot_Line(sx, sy, CMouse\x, CMouse\y, big, DrawColor)
      EndIf
      StopDrawing()
      TransparentSpriteColor(layer1, RGB(0,0,0))
      TransparentSpriteColor(layer2, RGB(0,0,0))
      isLine = #False
    Else
      isLine = #False
    EndIf
  EndIf
  
  If EventGadget() = 1 ;Lade Hintergrundbild
    bgimg = OpenFileRequester("Bitte ein Bild auswählen.", "", "*.jpg;*.JPG;*.jpeg;*.png;*.bmp", 0)
    If bgimg <> ""
      LoadImage(0, bgimg)
      If IsImage(0)
        TransparentSpriteColor(layer1, RGB(-1,-1,-1))
        TransparentSpriteColor(layer2, RGB(-1,-1,-1))
        TransparentSpriteColor(layer2, RGB(0,0,0))
        ResizeImage(0, SpriteWidth(layer1), SpriteHeight(layer1)) 
        StartDrawing(SpriteOutput(layer1))
        DrawImage(ImageID(0), 0, 0)
        StopDrawing()
      EndIf
    EndIf
  EndIf
  
  DisplayTransparentSprite(layer1, 0, 0)
  DisplayTransparentSprite(layer2, 0, 0)
  
  FlipBuffers()
  
  ;Delay(20)
Until event = #PB_Event_CloseWindow

End
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Strich Punkt Strich Linie

Beitrag von Velindos »

Hallo!

Danke ccode_new, Danke mk-soft für die Beispiele und Anregung!

Habe mal die Sache mit einen Schritt zurück Radierer gelöst! Sprich, letztes Image wieder rein!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten