PBPaint 1.0 Beta

Anwendungen, Tools, Userlibs und anderes nützliches.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

@c4s
Hab das gleich mal implementiert, danke fuer die Idee - darauf bin ich gar nich gekommen, das so zu loesen - ich mach immer alles viel zu kompliziert :lol:
Nur ganz perfekt ist es auch noch nicht... versuch ma die Maus ganz schnell hin und her zu bewegen... kleine Luecken schleichen sich immernoch ein :(
Hab die neue Version gleich mal geupdatetet, Link gibts im ersten Beitrag des Threads.


@Xaby
Daran hab ich auch schon gedacht - ein kleines Malfeld fuer den Stempel. Kann man das Transparenz-Problem denn nicht ohne Sprites einfacher loesen? Das ganze ist mir dann doch etwas zu hoch... :mrgreen:
Die Benutzung des WindowedScreens scheint mir in meinem Fall fast unmoeglich zu sein - aus diversen Gruenden.
Ich will ja beispielsweise dem Benutzer ermoeglichen das Malfeld dynamisch zu jeder Zeit in den Groessen zu aendern (wie in Paint)... Ausserdem stellt sich da noch die Frage, wie bring ich einen Screen in ein ScrollAreaGadget?
Sicher wuerde mir die Benutzung von Sprites sehr viele neue Moeglichkeiten bringen - eigentlich wollte ich von Anfang an Sprites nutzen - nur ... wieso muss man dazu unbedingt einen Screen oeffnen? :(
Bild + Bild

Bild
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

ich finde dein Programm vom Ansatz her sehr gut,
aber ich würde die Oberfläche noch etwas besser strukturieren, das sieht
im Moment noch etwas schrullig aus.

Die Toolpalette verschwindet beim Schließen des Fensters und wird erst nach
dem Bewegen der Maus wieder angezeigt.

Ansonsten gut! :allright:
Win11 x64 | PB 6.20
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

@Dare Devil

Du hast schon Recht, Sprites haben den Vorteil, dass sie schnell sind und
du viel mit machen kannst, aber halt den Nachteil, dass sie einen Screen
benötigen. Den Screen benötigt die Grafikkarte.

Sprites werden über OpenGL, DirectX und damit direkter an die Grafikkarte
geschickt. Bei den 2D-Drawing-Befehlen in einem Image oder Window
erledigt dein Programm, also der Prozessor und Windows diese Zeichenbefehle,
damit ist es wesentlich langsamer und deshalb muss es auch getrennt
betrachtet werden.

Transparenz, wenn es durchscheinend sein soll, kannste nicht anders
realisieren. Das ist halt die Mathematik, die da hinter steckt.

Du kannst hächstens komplett durchsichtige Pixel anders realisieren.

Das würdest du machen, in dem du dir eine Farbe aussuchst, die
du nicht mit überträgst und diese stellst du dann einfach nicht da.

Beispiel:
IF PinpettenFarbwert <> RGB(255,255,0)
ZeichnePixel ...
EndIF
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Einen Screen kannste übrigens auch in der Größe verändern.

Ich würde das auch nicht unbedingt mit reinnehmen, dass man
ständig die Größe des Bildes ändern kann, wie oft kommt das schon vor,
dass man das wirklich machen muss?

Die meisten Programme erlauben es, noch die Bildgröße mit verschiedenen
Rändern an den 4 Seiten unterschiedlich anzufügen.

Sagen wir, du hast ein Bild: 400 x 300 und willst es auf 500 x 350 machen.
Dann kannste zum Beispiel sagen,

dein neues Bild soll links um 50 Pixel erweitert werden, rechts um 50 Pixel
und oben um 50 Pixel.

Die Umsetzung im Programm wäre dann, dass du ein neues Image
erzeugst, was 500 x 350 groß ist und wo du dann bei den
Koordinaten 50,50 das alte Bild reinkopierst.

Das alte Bild kannst du nun ebenfalls in der Größe ändern und das
neue Bild komplett drauf kopieren, und das neue Bild wieder frei geben.

So haste ein altes Bild mit Rand, und es wurde um die Anzahl an Pixeln
erweitert, die der Nutzer wollte und deine Malfunktionen kannst du genauso
weiter auf dieses Bild anwenden wie vorher.

Was das Scrollen angeht, machste einen Trick, du Scrollst nicht
den Screen, sondern den Inhalt des Screens. Du stellst also das
Bild an einer anderen Stelle da. Die Scrollbalken können dann genauso
Gadgets bleiben.

Code: Alles auswählen

; Folker Linstedt aka xaby
 ; 2008-01-18
 
  If InitSprite() = 0 
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 340, 370, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)      
  
    ScrollBarGadget(0,WindowWidth(0)-30,10,20,WindowHeight(0)-100,0,300,10,#PB_ScrollBar_Vertical)
    ScrollBarGadget(1,10,WindowHeight(0)-50,WindowWidth(0)-70,20,0,300,10)    
    SpinGadget(2,GadgetWidth(1)+GadgetX(1)+10,GadgetY(1),40,20,1,8,#PB_Spin_Numeric)
    
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(320)
      StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
    EndIf
    
    If OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 1, 40, 70)  ; wir benötigen nicht die exakte Bildschirmbreite/-höhe, da diese automatisch angepasst werden...
      InitSprite3D()
    Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
      End
    EndIf
  EndIf
  
  
    CreateSprite(0,512,512,#PB_Sprite_Texture)
    StartDrawing(SpriteOutput(0))
        LineXY(0,0,400,200,RGB(200,100,50))
        Circle(60,70,30,RGB(0,255,0))
        Circle(260,350,100,RGB(0,100,250))
    StopDrawing()  
     
    CreateSprite3D(0,0)
  
    Z=1
  
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    Repeat
      Event = WindowEvent()
      
      If Event = #PB_Event_CloseWindow
        End 
      EndIf
      
      If Event = #PB_Event_SizeWindow
        ResizeGadget(0,WindowWidth(0)-30,10,20,WindowHeight(0)-100)
        ResizeGadget(1,10,WindowHeight(0)-50,WindowWidth(0)-70,20)
        ResizeGadget(2,GadgetWidth(1)+GadgetX(1)+10,GadgetY(1),40,20)
      EndIf
      
      
      
    Until Event = 0           
     
    ClearScreen(RGB(255,255,255))  
    ZoomSprite3D(0,SpriteWidth(0)*GetGadgetState(2),SpriteHeight(0)*GetGadgetState(2))
    Start3D()
      DisplaySprite3D(0,10-GetGadgetState(1)*GetGadgetState(2),10-GetGadgetState(0)*GetGadgetState(2))
    Stop3D()
     
    Delay(1)
    
    
    FlipBuffers()
  ForEver

Mal zum Rumspielen. Erstellt kein neues großes Bild,
aber hat zwei Zoom-Funktionen mit integriert.

:allright:
Kinder an die Macht http://scratch.mit.edu/
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

@Xaby
Wow genial!
Mal sehn, ob ich das schaffe in mein Programm zu integrieren.
Dankeschoen. :)
Andesdaf hat geschrieben:Die Toolpalette verschwindet beim Schließen des Fensters und wird erst nach
dem Bewegen der Maus wieder angezeigt.
haeh? :?
Bild + Bild

Bild
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

> haeh?
Ja ok, ich habe mich schlecht ausgedrückt.

Nach dem Schließen eines anderen Fensters wird die Toolpalette sozusagen
übermalt oder verschwindet. Erst wenn ich die Maus bewege, kommt sie wieder
zum Vorschein.
Win11 x64 | PB 6.20
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Andesdaf hat geschrieben:> haeh?
Ja ok, ich habe mich schlecht ausgedrückt.

Nach dem Schließen eines anderen Fensters wird die Toolpalette sozusagen
übermalt oder verschwindet. Erst wenn ich die Maus bewege, kommt sie wieder
zum Vorschein.
Hm,
danke fuer den Bugreport.

Bei mir tritt dieser Fehler komischerweise nicht auf, daher ist das Debugging recht schwer... darf ich fragen welche Windows-Version du nutzt?

Und was genau verschwindet? Nur diese Tools oder auch die Tool-Eigenschaften (dicke aendern) und die Farben?
Bild + Bild

Bild
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

habs auf WinXP getestet. Bin jetzt grad auf Vista, da tritt der Bug nicht auf.
Müsste ich später noch mal probieren.
Win11 x64 | PB 6.20
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

habs jetzt nochmals auf WinXP getestet. Folgendes:
- PBPaint maximiert
- Zeichenbereich vergrößert
- Irgendwas gemalt
- Extended Tool Options geöffnet
=> Toolleiste links verschwindet.
Win11 x64 | PB 6.20
LCD
Beiträge: 107
Registriert: 23.01.2008 13:13
Wohnort: Wien

Beitrag von LCD »

Gefällt mir schon recht gut. Hier mal ein screenshot von meinem Painter:
Bild
Wobei die Fenstergröße bei mir noch nicht verstellbar ist.
PB 4.61Beta1 32/64Bit. AMD FX6100, 8 GB RAM, ATI Radeon 5750, Win7 64 (64 bit ist mist weil 16-Bit Programme wie MakeTZX nicht mehr darauf funktionieren).
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Andesdaf hat geschrieben:habs jetzt nochmals auf WinXP getestet. Folgendes:
- PBPaint maximiert
- Zeichenbereich vergrößert
- Irgendwas gemalt
- Extended Tool Options geöffnet
=> Toolleiste links verschwindet.
Danke, Fehler gefunden und bereinigt :D
Neuer Link im ersten Post.


@LCD
Nunja, dagegen kann ich nich mithalten ...
Das ganze Projekt wird eh noch ueberarbeitet... Mehr Funktionen eingebauen usw.
BTW: Wie machst du das, wenn ich fragen darf? Nutzt du den Screen oder machst dus mit Image-Objekten?
Bild + Bild

Bild
Antworten