Entwickler-Ecke

Open Source Projekte - Benjis kleines Zeichenprogramm


benni316 - So 30.06.13 12:38
Titel: Benjis kleines Zeichenprogramm
Mein erstes größeres Projekt, programmiert mit Delphi 7.
Es handelt sich um ein einfaches Zeichenprogramm wie Paint, und beherrscht auch die meisten üblichen Funktionen (Zeichnen mit der Maus, Rechtecke aufziehen, Bereiche einfarbig füllen, eine Pipette, Textausgabe, Bitmaps öffnen und speichern) und noch zusätzlich zwei Möglichkeiten, um ein zufälliges Bild mit Linien und Rechtecken erzeugen zu lassen.

Dafür habe ich auf dem Hauptfenster folgende Komponenten verwendet: Eine Paintbox, ein MainMenu und Dialoge für Öffnen, Speichern und Farbauswahl.
Insgesamt gibt es 6 Formulare, 5 davon werden verwendet, mit der 6ten werde ich vielleicht noch etwas machen.

Begonnen habe ich damit im März, da ich mich für meine Informatik-Matura mit einfachen 2D-Grafiken in Delphi beschäftigt habe, und mein dadurch angeeignetes Wissen über Canvas in einem Programm verwenden wollte. Das Programm wurde immer wieder von mir auf Fehler getestet, und seit März immer wieder ein bisschen bearbeitet, in letzter Zeit wieder etwas mehr, und nun ist es so weit fortgeschritten, dass ich es hier hochladen kann.

Wenn ihr noch ein paar Ideen habt, was ich noch hinzufügen oder verbessern könnte, teilt sie mir mit, deswegen hab ich es ja auch hier hochgeladen ;)

Die finale Version gibts über meinen Mediafire-Ordner (exe und Quellcode):
http://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm

oder im Anhang.


Crossposts in anderen Foren:
http://www.delphipraxis.net/175584-benji%B4s-kleines-zeichenprogramm-3.html#post1220831
http://forum.delphi-treff.de/index.php?page=Thread&threadID=58947


IhopeonlyReader - So 30.06.13 13:47

Vorerst freue ich mich über Übungsprojekte :)
Hier mal ein paar Fragen/ Bemerkungen
1. Deine Pipette übernimmt leider nicht die farbe, sondern "klaut" sie und füllt das Feld schwarz :( (hast es mit dem "Sprüher" verwechselt?
2. Warum funktionieren gestrichelte Linien nicht mit einer "breiten" Linie? du könntest z.B. Canvas.pen.width auf die stiftbreite setzen oder die Linien mehrfach dazu ziehen (parallel, bei schräge leicht versetzt, dennoch parallel)


benni316 - So 30.06.13 14:14

Danke für deine Bemerkungen, dass man das mit den strichlierten Linien so lösen könnte (weil mit die Eigenschaft canvas pen.style ja nur mit pen.width 1 funktioniert) , hab ich gar nicht bedacht, mal sehen, ob ich da was zusammenbringe ;)
Zur Pipette: Die Pipette selbst füllt gar nichts, sie übernimmt nur die Farbe von deiner Cursorposition. Du hast vielleicht gleichzeitig Füllen aktiviert?! Wobei ich das einfach unmöglich machen könnte, damit sowas nicht passiert ;)


FinnO - So 30.06.13 14:50

Moin,

und herzlich willkommen in der Entwickler-Ecke! :welcome:

Sehr cooles Programm! :) Besonders die Funktion, ein computergeneriertes Bild zu erstellen sieht sehr gut aus! Leider hat jedoch bei mir die Sache mit den gestrichelten Linien gar nicht funktioniert, auch nicht, wenn ich bei Strichdicke 1 eingegeben habe.

Viel Spaß bei uns!


benni316 - So 30.06.13 15:03

Danke für die schönen Willkommensgrüße :D
Ich habe für die strichlierten Linien die Eigenschaft canvas.pen.style auf psdash gesetzt, komischerweise geht das bei mir aber auch nur, wenn ich die Maus sehr schnell bewege O.o
Dass das mit den pen-styles mit einer Breite größer als 1 nicht geht, scheint übrigens eine Windows-Limitierung zu sein, wobei ich dazu nur einen Foreneintrag von 2003 finde, vielleicht geht das ja schon mit einer neueren Delphi-Version, weiß das jemand genaueres?


benni316 - So 30.06.13 18:51

So, neue Version :)
Es ist jetzt möglich, Polygone zu zeichnen, dazu muss man zuerst die Anzahl der Punkte angeben, die Länge des Arrays wird bestimmt, und man wird auf eine extra Form mit Paintbox umgeleitet, um die Punkte festzulegen, man klickt auf einen Punkt und er wird festgelegt, an der Stelle steht dann die Nummer des Punktes.
Ich werde dass demnächst noch überarbeiten, ein Ziel ist es, die Paintbox in der Form, in der man die Punkte fürs Polygon festlegt, mit demselben Inhalt zu füllen, der auf Form1 gezeichnet wurde.
Mit:
Zitat:

bmp.Canvas.copyrect(bounds(0,0,form1.PaintBox1.Width,form1.PaintBox1.Height),form1.PaintBox1.Canvas,form1.PaintBox1.ClientRect);
form7.PaintBox1.Canvas.Draw(0,0,bmp);

im OnClick des Buttons, der Form7 aufruft, funktioniert es leider nicht (bmp ist eine globale Variable vom Typ TBitmap).

Und das mit den pen-styles werd ich eher so lassen, mögliche Lösungen aus dem Internet sind mir zu kompliziert ;)


benni316 - So 30.06.13 21:47

Wieder neue Version, es gibt ein paar Änderungen bei der Oberfläche, man kann nun auch über die Polygon-Form Linienfarbe und Breite festlegen.


Delete - Di 02.07.13 20:36

- Nachträglich durch die Entwickler-Ecke gelöscht -


benni316 - Di 02.07.13 20:59

Die Seite war bis vor ein paar Stunden down, aber inzwischen hat sich einiges getan.
Neue Versionen von exe und Code gibts ab sofort in meinem Mediafire-Ordner:
http://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm

Das mit den Polygonen hab ich aufgrund dieser AccessViolation-Meldungen geändert, man gibt nun keine Punkteanzahl mehr an, sondern die Länge des Arrays wird auf 100 begrenzt, was absolut ausreichen sollte, allerdings gibt es nun ein anderes Problem mit den Polygonen: Irgendwie wird der Punkt (0,0) immer in das Array eingefügt und somit ist er auch im Polygon enthalten, obwohl man nie dorthin geklickt hat, das sollte der einzige Bug zurzeit sein.
Sonstige Neuerungen:
Besser formatierter Code
Zum Zeichnen wird nun ein TImage benutzt, statt einer Paintbox
Die Mausbewegungen werden nun wirklich punktgenau erfasst, da nun die lokale Muasposition hergenommen wird
Noch ein paar Kleinigkeiten, die mir entfallen sind ;)


FinnO - Di 02.07.13 21:12

user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:

Zum Zeichnen wird nun ein TImage benutzt, statt einer Paintbox


Das ist eher ein Schritt zurück, als einer in die Richtige Richtung ;)


benni316 - Di 02.07.13 21:30

Der Nachteil an der Paintbox ist, dass man das Fenster nicht verkleinern/vergrößern darf, sonst ist die ganze Zeichnung weg, was beim TImage nicht der Fall ist.
ICh hab schon mal wo gelesen, für Sachen wie Spiele, wo dauernd etwas neu gezeichnet wird (wie auch hier) soll man die Paintbox nehmen, allerdings gibt es dann die bereits erwähnten Nachteile.
Was wären denn Vorteile der Paintbox gegenüber dem Image? Würd mich brennend interessieren ;)


benni316 - Mi 03.07.13 13:36

Update:
Das Programm sollte nun komplett Bug-frei sein (alles funktioniert wie es soll, aber es ist leider immer noch möglich, es an einigen Stellen gezielt abstürzen zu lassen, werd mich heute noch darum kümmern ;)) hat ab sofort eine Versionsnummer (1.0) sowie eine Dateibeschreibung (sieht man unter den Eigenschaften oder wenn man mit dem Cursor drauf bleibt).
Weiters verwende ich nun den OpenPicture- bzw. SavePicture-Dialog, man kann Dateien nun als JPG, BMP, ICO, EMF und WMF speichern und auch solche Dateitypen öffnen (hätte ich gleich von Anfang an machen sollen, aber besser spät als nie :D)


Wenn ihr dennoch Bugs findet, bitte hier reinschreiben!
Falls jemand Vorschläge für neue Features hat, teilt sie mir mit!

Aktuelle ToDo-List:
Durch User hervorgerufene Abstürze verhindern
Die Computergeneriertes-Bild-Funktion leicht verändern
Funktion hinzufügen, um ein Bild in Graustufen umzuwandeln
Namen verändern
(evtl Toolbar statt MainMenu verwenden)


benni316 - Mi 03.07.13 21:56

Neue Version (1.1.2 Beta), hier der Changelog:

Die Funktion "Computergeneriertes Bild erstellen" wurde überarbeitet, damit die Rechtecke nicht immer im Vordergrund sind
JPEG öffnen wird unterstützt, man kann sie aber nicht bearbeiten (geht nur für Bitmaps) ich werde versuchen, eine Funktion zur Umwandlung einzubauen
Stiftbreite wird nun über eine Scrollbar festgelegt, in einer Paintbox daneben sieht man, wie dick eine Linie dann ist
Wenn man ein Bild einmal gespeichert hat, wird man beim Beenden des Programms nicht mehr gefragt, ob man es speichern möchte


benni316 - Mi 03.07.13 22:52

Mir ist grad aufgefallen, dass ich die halb fertig überarbeitete TextForm im aktuellen Code/exe drin habe, wird gleich gefixt ;)


benni316 - Mi 03.07.13 23:30

Neue Version, Text-Ausgabe wurde komplett überarbeitet ;)


benni316 - Do 04.07.13 16:29

Neues Update (Version 1.3)

Changelog:
Man kann JPEGs öffnen, bearbeiten, und in verschiedenen Formaten speichern (GIF und PNG ausgeschlossen, da diese standardmäßig nicht unterstützt werden, wird aber noch kommen, ich muss nur eine passende Unit im Netz finden und in mein Projekt einbinden ;))
Einige Exceptions wurden hinzugefügt
Die wechselnde Stiftfarbe kann nun abgestellt werden (hätte man früher eigentlich auch können sollen, aber hat nicht funktioniert)
Beim Schliessen des Programms über Datei-->Schließen wird man nicht mehr zweimal gefragt, ob man die Datei vorher speichern möchte

Bekannte Bugs:
Wenn man das Öffnen eines JPEGs abbricht, gibts eine Access Violation, obwohl ich ein Try-Except eingebaut habe, und dieses auch ausgeführt wird


Marc. - Do 04.07.13 20:10

user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn man das Öffnen eines JPEGs abbricht, gibts eine Access Violation, obwohl ich ein Try-Except eingebaut habe, und dieses auch ausgeführt wird
Execute hat nicht umsonst einen Rückgabe-Wert:

Delphi-Quelltext
1:
if OpenDialog1.Execute then                    

Damit wird auch dann das Try-Except obsolet. :-)

Du wirst übrigens merken, dass der Quelltext Deines Programmes immer und immer schwieriger wird zu warten.

Ich würde Dir daher empfehlen den Quelltext wenigstens zu formatieren. Da Du bereits relativ viel Source-Code zusammengetragen hast, eignet sich ein Tool, das Dir hier die Arbeit abnimmt. Z.B. das Plugin [http://www.dummzeuch.de/delphi/gexperts/english.html] von user profile icondummzeuch. :idea:


benni316 - Do 04.07.13 21:25

Ich verwende bereits Einrückungen, hast du vllt die Version hier aus dem Forum gedownloadet?
Die ist nämlich alles andere als aktuell, neue Versionen, sowie die meisten älteren Versionen gibts immer hier: http://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm ;)
Der Quellcode ist im 7z-Archiv.

EDIT: Das Plugin wer dich mir trotzdem holen, scheint sehr nützlich zu sein ;)


Marc. - Do 04.07.13 22:43

user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:
Ich verwende bereits Einrückungen, hast du vllt die Version hier aus dem Forum gedownloadet?
Ja, ich hatte mir die angehängte Version aus Deinem ersten Beitrag angesehen.

Nunja, Du hast zwar ein paar Zeilen eingerückt, nach System sieht das aber nicht aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
for h:=0 to random(15do
  with paintbox1.canvas do
    brush.color:=random($FFFFFF);
    paintbox1.Canvas.Rectangle(random(pw),random(ph),random(pw) div random(rnd),random(ph) div random(rnd));
end;

Liest sich auf dem ersten Blick für mich beispielsweise, als gehöre Zeile 4 mit zur Schleife. :idea:
Da ist noch sehr viel verbesserungsbedarf. Zum Teil hast Du es aber auch schon richtig gemacht. (Z.B. Zeile 330-339, Unit1) :zustimm:

Zu dem Code-Snippet oben: Du tust Dir mit dem with-do Konstrukt keinen Gefallen. Und gerade hier macht das doch bei einer Zeile keinerlei Sinn. :)


benni316 - Do 04.07.13 23:05

Ich glaub, da wollte ich sowieso ein "begin" hinschreiben, aber habs dann doch nicht getan?! :D
Hab das jetzt geändert, nun siehts so aus:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for h:=0 to random(15do
  with paintbox1.canvas do
    begin
      brush.color:=random($FFFFFF);
      Rectangle(random(pw),random(ph),random(pw) div random(rnd),random(ph) div random(rnd));
    end;


Wobei ich diese Funktion sowieso überarbeiten will, damit die Rechtecke nicht immer im Vordergrund sind, aber wie genau ich das regle, überleg ich mir Morgen ;)


bis11 - Fr 05.07.13 09:05

Crosspost in der Delphi-Praxis [http://www.delphipraxis.net/175584-benji%B4s-kleines-zeichenprogramm.html]
Crosspost im Delphi-Treff [http://forum.delphi-treff.de/index.php?page=Thread&threadID=58947]


benni316 - Fr 05.07.13 14:30

Bei Fragen muss ich ja laut den Regeln verlinken, aber muss ich das hier auch?
Ist ja eigentlich keine Frage, und dank des Mediafire-Uploads ist in allen Foren immer der gleiche Versionsstand.


benni316 - Fr 05.07.13 17:56

So, nun wird überall auf die jeweils anderen Threads verlinkt.

Und es gibt eine neue Version(1.4)!
Changelog:
Neue Funktion: Bild in Graustufen umwandeln (dauert ein paar Sekunden, ich habe versucht, den Fortschritt über eine Progressbar darzustellen, bin aber gescheitert)
Die Funktion "Computergeneriertes Bild erstellen" wurde überarbeitet
Keine Access-Violations mehr beim Öffnen einer JPG-Datei
Wenn ein JPG geladen wird, wird nun der Dateipfad in der Form-Caption angezeigt (passiert bei allen anderen Bildtypen schon länger, hab einfach vergessen, es auch hier einzubauen)

Download von exe und Code gibts wie immer hier:
http://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm


Mathematiker - Fr 05.07.13 18:02

Hallo,
user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:
Ist ja eigentlich keine Frage, und dank des Mediafire-Uploads ist in allen Foren immer der gleiche Versionsstand.

Kann schon sein. Das ändert aber nichts daran, dass natürlich die Antworten und Hinweise in den einzelnen Foren unterschiedlich sind.
Und ich finde es sehr nervend, wenn man in drei verschiedenen Foren "parallel" lesen soll.

Beste Grüße
Mathematiker


benni316 - So 07.07.13 20:01

So, die finale Version 2.0 ist da!
Dies wird die endgültige Version bleiben, außer irgendjemand findet irgendwelche gravierenden Bugs ;)

Changelog:
Alle Units haben sprechende Namen
Die Funktion "Computergenerierte Linien erstellen" kann nun konfiguriert werden
Neue Funktion - Bilder invertieren
Ein paar kleinere Bugfixes
Nicht benutzte Variablen und Codefragmente wurden entfernt

Download von Exe und Quellcode (diesmal nur mit pas, dfm und dpr) gibts wie immer hier: http://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm


Marc. - So 07.07.13 21:10

user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:
Dies wird die endgültige Version bleiben, außer irgendjemand findet irgendwelche gravierenden Bugs ;)
Leider ja.

* Beim Laden eines JPEG-Bildes wird ist dieses nach links aus der Zeichenfläche verschoben, sodass nur noch etwa 100px der rechten Hälfte sichtbar sind.
* Beim Malen auf diesem JPEG flackert's
* Beim Resizen des Fensters wird die Zeichenfläche übermalt
* Beim klick auf Datei->Neu bleibt das geladene Jpeg auf der Zeichenfläche, ist aber nun komplett weiß. Es lässt sich nur auf diesem Jpeg malen.
+ Toll wäre ein "Zeichenstift", statt dem normalen Maus-Cursor
- Beim betätigen des Abbrechen-Dialogs erscheint die Meldung "Öffnen abgebrochen". Ich weiß aber, dass ich abgebrochen habe.
+ Bei wechselender Stiftfarbe wäre es cool, wenn sich diese nicht nur diskret, sondern auch graduell ändern würde

Mehr hab ich auf dem kurzen Blick nicht gesehen. :)


Delete - So 07.07.13 21:35

- Nachträglich durch die Entwickler-Ecke gelöscht -


benni316 - So 07.07.13 22:04

Das mit dem jpg-laden passiert bei mir nicht
Flackern? Bei mir nicht, vllt liegts an deinem PC?!
das mit dem resizen sollte eigentlich nicht passieren, und es passiert bei mir auch nicht, egal ob ich minimiere/maximiere/von Hand vergrößere
Wenn ich auf Datei-Neu klicke, wird die gesamte Zeichenfläche weiß übermalt, dann das JPG geladen, bist du sicher, dass du die aktuelle Version (2.0) hast? Gibts hier: http://www.mediafire.com/index.php#gsyhi84vsfwd4
Das mit dem Cursor habe ich mir auch schon überlegt, aber dann wieder vergessen, ich muss nur sehen, wo ich so einen Cursor her bekomme ;)
Graduelles Wechseln?! Gute Idee!
Das mit der Textformatierung werd ich ausbessern, und das mit dem JPEG ist so, weil es ja konvertiert werden muss, um bearbeitet werden zu können, ich müsste prüfen, ob jpg oder jpeg im Dateinamen drin ist, hab ich auch schon probiert, aber nicht zusammengebracht, ich werd mich nochmal drum kümmern ;)
Das mit dem Bild invertieren ist komisch, vllt regel ich das über ein extra TCanvas-Objekt

Ach ja, wegen dem abgrebrochen: Ist eine Exception, weils sonst ne Fehlermeldung gibt, aber ich hab schon ne Idee, wie ich das machen könnte ;)


Marc. - So 07.07.13 22:20

user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:
Das mit dem jpg-laden passiert bei mir nicht
Flackern? Bei mir nicht, vllt liegts an deinem PC?!
das mit dem resizen sollte eigentlich nicht passieren, und es passiert bei mir auch nicht, egal ob ich minimiere/maximiere/von Hand vergrößere
Wenn ich auf Datei-Neu klicke, wird die gesamte Zeichenfläche weiß übermalt, dann das JPG geladen, bist du sicher, dass du die aktuelle Version (2.0) hast?

Ich hatte Deinen Quelltext (2.0) unter D2009 kompiliert. Wenn ich Deine schon kompilierte Exe ausführe, treten die Fehler nicht auf. :nixweiss:

user profile iconbenni316 hat folgendes geschrieben Zum zitierten Posting springen:
Ach ja, wegen dem abgrebrochen: Ist eine Exception, weils sonst ne Fehlermeldung gibt, aber ich hab schon ne Idee, wie ich das machen könnte ;)
Ja, dazu hatte ich ja auch schon einmal etwas geschrieben [http://www.entwickler-ecke.de/viewtopic.php?p=677942#677942]. ;)

Schön wär's noch, wenn es nun einen Scrollbalken für übergroße Bilder gäbe. :idea:


benni316 - So 07.07.13 22:36

Ich hab halt Delphi 7 verwendet, da gibts vllt iwelche Unterschiede, hab selbst keine Ahnung.
Scrollbalken wäre nützlich, kommt auf die todo-list ;)


Mathematiker - So 07.07.13 23:33

Hallo,
ich muss jetzt auch einmal meinen Senf dazugeben.

1. Der Download bei mediafire dürfte wohl nicht mit den EE-Regeln konform sein, da die Quellen/Exe eigentlich im 1.Eintrag hier in der EE erscheinen sollen. Um Dein Programm zu testen, muss man dieses Mediafire aufrufen und wird natürlich erst einmal mit Werbung zugetextet. :evil:

2. Mit dem Programm kann man zwar ganz ordentlich zeichnen, wählt man aber mehrere Dinge aus, sollte man auch sehen, was man ausgewählt hat.
Zum Beispiel hatte ich den Modus "Polygon ausfüllen" und nach einigen Zeichenoperationen wurde ein weiteres Polygon ausgefüllt, eigentlich unbeabsichtigt. Daraufhin habe ich den Menüpunkt "Rückgängig" gesucht, aber nicht gefunden.

3. U.a. deklarierst und erzeugst Du die Variable tempbmp, löschst sie aber am Ende nicht wieder. Sie wird zwar nicht gebraucht und das Speicherleck ist winzig, aber dennoch da.

4. Im Speicher-Dialog werden neben Bitmap auch Vektorgrafiken angegeben. Das funktioniert aber nicht.
Das als Bitmap gespeicherte Bild hat keine automatische Dateiendung bmp.

5. Dein Info-Dialog enthält 6(!) Timer für das Ein- und Ausblenden der Buchstaben. Das geht doch wohl mit einem.

6. "Bild invertieren" und in "Graustufen umwandeln" dauert auf meinem schnellen Rechner sehr lange. Statt Pixels bietet sich hier scanline zur Beschleunigung an.

Ich höre erst einmal auf zu meckern.

Beste Grüße
Mathematiker


Marc. - Mo 08.07.13 00:11

Das ist nun OT:

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Um Dein Programm zu testen, muss man dieses Mediafire aufrufen und wird natürlich erst einmal mit Werbung zugetextet. :evil:
Ich muss jetzt auch einmal meinen Senf dazugeben.

Du benutzt keinen Werbeblocker? Wie hälst Du das bloß aus? :shock:
Ich empfehle Dir doch dringend zumindest die FF- und Chrome-Addons
Damit werden nicht nur die vom eigentlichen Inhalt ablenkenden und nervenden Werbebanner oder Flashanimationen unterbunden, sondern auch die Ladezeiten von Websiten beschleunigt, da nun der ganze Werbekram wegfällt. :zustimm:
Darüberhinaus verhinderst Du u.U. auch das Einfangen von Malware, durch von Drittseiten eingebundene verseuchte Skripte . :idea: So waren vor kurzem auch Spiegel Online [http://www.spiegel.de/netzwelt/web/viren-werbung-auf-internetseiten-a-892841.html] resp. deren Leser betroffen.

Beste Grüße


benni316 - Mo 08.07.13 18:19

Dank Adblocker bekomme ich bei Mediafire keine Werbung, und ich habs dort hochgeladen, weil ich eben nicht bei jedem Update in drei Foren alles neu hochladen muss.
Damit man weiß, was man gerade ausgewählt hat, werde ich verschiedene Cursors verwenden, hätte ich schon länger machen sollen.
tempbmp ist nun gelöscht, da sie eh unnötig ist
Ich kann ein Bild als wmf oder emf speichern und danach mit meinem Programm und auch mit Paint öffnen (vllt aber auch nur, weil es eigentlich bmps mit falscher Endung sind?!).
Ich kenne diese Dateiformate gar nicht (und besitze auch keine"richtigen" wmf/emf-Dateien), die waren standardmäßig im OpenPictureDialog angegeben, ich sollte mich mal informieren.
Das mit dem Info-Dialog seh ich mir vielleicht mal an, hat aber niedrige Priorität.
Das mit dem Invertieren geht schnell (2-3 Sekunden), man muss nur etwas zeichnen, damit es angezeigt wird (Bug, ich kümmer mich drum)
Scanline werde ich mir mal ansehen, aber zumindest die Graustufen-Umwandlungs-Funktion beim Delphi-Treff sah sehr kompliziert aus.


Mathematiker - Mo 08.07.13 18:30

Hallo,
die Graustufenbildung ist kein Problem.
U.a. funktioniert folgende Methode:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure Graustufen(Bitmap:TBitmap);
var i,j  :  INTEGER;
    Row  :  ^TRGBTriple;
    grau : byte;
begin
    for j := 0 to Bitmap.Height-1 do
    begin
      row := Bitmap.Scanline[j];
      for i := 0 to Bitmap.Width-1 do
      begin
        grau := (row^.rgbtred * 77 + row^.rgbtgreen * 151 + row^.rgbtblue * 28div 256;
        row^.rgbtred   := grau;
        row^.rgbtBlue  := grau;
        row^.rgbtgreen := grau;
        inc(row);
      end;
    end;
end;

und wandelt selbst riesengroße Bitmaps in Bruchteilen einer Sekunde um.

Beste Grüße
Mathematiker


benni316 - Mo 08.07.13 18:49

Danke, das sieht recht einfach aus :D
Übrigens: Das mit dem Invertieren läuft auch ohne Scanline nun in einem Bruchteil einer Sekunde, indem ich den Inhalt der Zeichenfläche in eine TBitmap-Variable lade,diese invertiere, und danach auf das Image zeichne.
Als nächstes kümmere ich mich um die Cursors, am besten wären die aus Paint, die muss man doch irgendwo her bekommen, aber auf der MSDN-Seite steht nichts vom Farbeimer..


benni316 - Mo 08.07.13 21:30

Für den Stift verwende ich nun einen Cursor aus dme Internet, für das Aufziehen von Rechtecken den Windows-Cursor crcross.
Kann man die Cursor aus Paint (z.B. Farbeimer) irgendwo herunterladen?
Durch Googeln hab ich nichts gefunden, und sie selbst aus einem Screenshot zu extrahieren ist mir zuviel Aufwand, weil ich den Cursor erst transparent machen müsste, und mit Grafikbearbeitung kenn ich mich nicht so gut aus.

EDIT: hab ein Programm gefunden, nennt sich "IconsExtract".
Damit ist es möglich, Icons und Cursors aus exe-Dateien zu extrahieren, und es funktioniert einwandfrei!


benni316 - Mi 10.07.13 15:06

Noch ein letztes Update:
Version 2.1:
Die "Wechselnde Stiftfarbe"-Funktion kann nun konfiguriert werden
Es werdne nun verschiedene Cursors verwendet, damit man auch sieht, was man gerade tut:
1 Cursor ist Windows-Standard, einer stammt von hier: http://ulrichhanke.de/00/CursorSammlung.html und zwei wurden aus Paint extrahiert
Das Invertieren eines Bildes geht nun deutlich schneller
Kleinere Bugfixes


Delete - Mi 10.07.13 23:15

- Nachträglich durch die Entwickler-Ecke gelöscht -


benni316 - Mo 15.07.13 17:47

Radiergummi ist kein Problem, aber woher krieg ich einen solchen Cursor?
Man findet über Google nichts gescheites und aus Paint kann ich den Cursor komischerweise nicht extrahieren, er scheint nicht in der exe entahlten zu sein..


benni316 - Mo 15.07.13 22:37

So, ein wirklich letztes Update, ich werde mich von nun an anderen Projekten zuwenden.
Da es aus dem Anhnang eh niemand herunterlädt, hab ichs nur bei Mediafire aktualisiert.
Das ganze ist nun etwas größer, weil mit XE3 kompiliert.
Radiert wird mit der rechten Maustaste, der Cursor bleibt dabei derselbe.

Download-Link:
http://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm


Delete - Di 16.07.13 19:51

- Nachträglich durch die Entwickler-Ecke gelöscht -


benni316 - Di 16.07.13 22:13

Ja, es gibt viele Cursor Icons.
Nur nicht Radiergummi-Cursors...ich hab schon probiert, aus einem Screenshot den Cursor auszuschneiden, dann als ico zu speichern und in cur umbennenen (da es eigentlich dasselbe ist) aber beim Erstellen der res-Datei aus der .rc tritt dann ein Fehler auf.
Vielleicht werd ich das dann halt direkt über Delphi machen ;)


benni316 - So 09.03.14 23:56

So, ich hab mir wieder mal den Quelltext von diesem Programm durchgeschaut und bekam wieder Lust, was zu machen. Vielleicht werd ich in nächster Zeit irgendwann wieder ein Update raushauen, daher würde ich mich über weitere Vorschläge für neue Features freuen ;)
Und heute gibt es auch schonmal ein Update, mit mehreren, kleineren Änderungen (vor allem Ausbesserungen von Schlampigkeitsfehlern^^):


Das Programm merkt sich nun die vorherige Stiftfarbe bei Aktionen, die diese ändern (z.B. Polygon, Rechteck, Computergeneriertes Bild,..)
Das Programm hat nun ein Icon, (erstellt von Umar123, gefunden via iconfinder.com). Das liegt vor allem daran, dass ich das ursprüngliche Icon (Delphi-Standard) iwann gelöscht habe, und Delphi beim öffnen der Projektoptionen jedes Mal gemeckert hat, es kann die Datei nicht finden^^)
Eine temporäre Datei, die bei einer Funktion erstellt wird, ist nun wirklich nur temporär, wird also beim Beenden des Programms wieder gelöscht :D
Der "Wollen Sie die Datei speichern"-Dialog tritt nur auf, wenn die Datei in ihrer jetzigen Form nicht gespeichert wurde (bisher war es so: wenn die Datei einmal gespeichert wurde, und dann weiter verändert, wurde man beim Beenden nicht zum Speichern aufgefordert
Sonstige kleine Fixes


Download wie immer in meinem Mediafire-Folder: https://www.mediafire.com/#gsyhi84vsfwd4


benni316 - Do 13.03.14 00:30

Version 2.2.0 ist da!

Changelog:
Man kann nun auch Bilder in den Formaten JPEG, PNG und GIF öffnen, bearbeiten und speichern, der extra Menüpunkt entfällt. Verwendet habe ich dazu TJPEGImage, TPNGImage und TGifImage, die, um Bearbeiten zu ermöglichen, intern zu TBitmap umgewandelt werden. Diese 3 Klassen gibt es allerdings erst seit Delphi 2009, mit älteren Delphi-Versionen lässt sich der Code daher nicht kompilieren!
Dadurch wurde der Menüpunkt "JPEG öffnen" überlüssing und wurde entfernt
Das Programm merkt sich nun auch die Stiftbreite, nicht nur die Stiftfarbe
Zufällige generierte Rechtecke haben jetzt eine zufällige Linienbreite
Die Breite des Radiergummis kann man nun extra einstellen
Bei den Computergenerierten Farbigen Linien wurde die höchstmögliche Linienanzahl begrenzt (auf 7 Stellen, höchstmögliche Anzahl daher 9.999.999), außerdem gibts ab 50.000 Linien eine Warnung, dass höhere Werte dazu führen können, dass das Programm nicht mehr reagiert (1 Million Linien dauern bei mir ca 2 Minuten, während der Berechnung reagiert das Programm nicht, mit mehreren Programmen im Hintergrund dauerts noch länger)
Diverse Code-Verinfachungen

Download wie immer hier:
https://www.mediafire.com/folder/gsyhi84vsfwd4/Zeichenprogramm

Mir zurzeit bekannte Bugs:
Wenn man ein Bild aus einer Datei lädt, passt sich das Fenster der Größe des Bildes an, sodass das Bild die ganze Zeichenfläche füllt. Aber sobald man das Fenster verschieben will, oder einfach nur auf die Leiste ganz oben klickt, vergrößert es sich komischerweise, aber es maximiert sich auch nicht.

Sonstige Bugs bitte hier reinschreiben :)


jaenicke - Do 13.03.14 11:23

Ich habe mir den Quelltext nicht angeschaut, aber wenn du TPicture benutzt, gehen diese und alle weiteren registrierten Dateierweiterungen automatisch.