Autor |
Beitrag |
Gothicware
Beiträge: 77
Win 98, Win 2000, Win XP, BeOs-R5, Zeta 1.0(war nicht gut, also verkauft), KnoppiX, VM-Ware
D4 Client/Server, Turbo Basic, QBasic, Atari-Basic
|
Verfasst: Do 29.09.05 01:30
Hier nun die, wie ich finde, eindeutig verbesserte Version von meiner alten ImagePlus Unit. Da die Unit mittlerweile fast 2000 Zeilen Umfasst, und auch ich es eingesehen habe das die Leute sich nicht Tod scrollen wollen, poste ich nur denn Kopf, und die Uni gibts als Download.
Die Benutzung ist recht Simpel. Plaziert die VCL auf eure Form, und laded ein Bitmap(oder konvertiert eine Grafik zu einem Bitmap). Dann stehen euch diverse Filter und Effekte zur verfügung. Die Vorsilbe "do" gibt an, das es sich um einen Filter handelt, die Vorsilbe "make" gibt an, das etwas neu erstellt wird. Zur Zeit wird bei make noch ein Vorhandenes Bitmap benötigt, ablösung kommt aber noch.
Intern arbeitet die Unit auf 32bit Ebene, sichert aber vor jeder Änderung das PixelFormat und stellt es sofort nach dem Filter wieder her. Der Code wurde so sauber wie ich nur konnte geschrieben, und alles ist ein wenig alphabetisch georndet. Also wer daran noch was auszusetzen hat, der soll mir die Unit doch Optimieren. ;-P
So und nun Viel Spass!
Der Unit Kopf:
(mit zusätzlicher Erklärung)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111:
| unit GW_ImagePlus; . . TDirection = (drLeft, drTop, drRight, drBottom, drLeftTop, drTopRight, drRightBottom, drBottomLeft); TOrientation = (orLeft, orTop, orRight, orBottom); THSL = record H,S,L: Double; end; TRGB = record R,G,B: Byte; end; TMatrix3x3 = array [0..8] of Integer; TMatrix5x5 = array [0..24] of Integer; TPercent = $00..$64;
. . procedure doAntiAlias; procedure doBrightness (AmountR, AmountG, AmountB: Integer); procedure doColorFilter (Color: TColor); procedure doColoring (Color: TColor; Percent: TPercent); procedure doColorNoise (Amount: Integer); procedure doColorPushCosinus (AmountR, AmountG, AmountB: Integer); procedure doColorPushSinus (AmountR, AmountG, AmountB: Integer); procedure doContrast (AmountR, AmountG, AmountB: Integer); procedure doEmboss (Color: TColor); procedure doFlip (FlipH, FlipV: Boolean); procedure doGradientColors (FromColor: TColor; ToColors: array of TColor); procedure doGrayScale; procedure doGridOpaque (Color: TColor); procedure doHighMap (Amount: Integer); procedure doInvert; procedure doLowMap (Amount: Integer); procedure doMatrix3x3 (Matrix: TMatrix3x3; Divider: Integer); procedure doMatrix5x5 (Matrix: TMatrix5x5; Divider: Integer); procedure doMaxColoring (Color: TColor); procedure doMinColoring (Color: TColor); procedure doMonoNoise (Amount: Integer); procedure doMosaic (HSize, VSize: Integer); procedure doPosterize (Amount: Integer); procedure doSemiOpaque (Color: TColor); procedure doSepia (Amount: Integer); procedure doSepiaDark (Amount: Integer); procedure doSepiaLight (Amount: Integer); procedure doSoftWaves (AmountH, AmountV, WavesH, WavesV: Integer); procedure doSolorize (Amount: Integer); procedure doSplitBlur (Amount: Integer); procedure doSpray (Amount: Integer); procedure doTwist (Amount: Integer); procedure doWaves (AmountH, AmountV, WavesH, WavesV: Integer); procedure makeGradientRect (Rect: TRect; FromColor: TColor; ToColors: array of TColor; Orientation: TOrientation); procedure makeMandelOrJulia (xl, xu, yl, yu: Extended; iterations: Integer; M2J: Double; FromColor: TColor; ToColors: array of TColor); procedure makePascalTriangle (FGColor, BGColor: TColor); end;
procedure Register;
function BGRToRGB(Color: TColor): TColor; function GetGradientColor(FromColor, ToColor: TColor; Step, Steps: Integer): TColor; function HSL(H, S, L: Double): TColor; function IntToByte(i: Integer): Byte; procedure ExplodeHSL(Color: TColor; var H, S, L: Double); procedure ExplodeRGB(Color: TColor; var R, G, B: Byte); |
History:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Unit GW_ImagePlus.pas History ------------------------------ # 03.10.2005 fix Flip Bug + 08.10.2005 add doBlendDraw # 09.10.2005 speed up Max/Min function + 09.10.2005 add createEmptyBitmap + 09.10.2005 add doTrace # 10.10.2005 edit doTrace with Colorchannel support # 10.10.2005 make the hard decision to put the library under the Trems of the GNU Lesser General Public License |
Das ist aber noch nicht das Ende! Ich arbeite fleissig weier, und würde mich über Hilfe sehr freuen.
Nette Grüsse, Gothicware, Inc.
Einloggen, um Attachments anzusehen!
_________________ Programmierer sind Verbrecher!
Eine Initiative zum Schutz des Kapitals.
Zuletzt bearbeitet von Gothicware am Mo 10.10.05 19:00, insgesamt 1-mal bearbeitet
|
|
Martin1966
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 30.09.05 13:37
Hab nur mal kurz reingeschaut.
Warum übergibst Du immer das Bitmap als Variablenparameter? Also zum Beispiel hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure _GrayScale(var src: TBitmap); var i, gray: Integer; p: PInteger; begin src.PixelFormat := pf32bit; p := src.Scanline[Pred(src.Height)]; for i := 1 to src.Width * src.Height do begin gray := IntToByte( Round((getRvalue(p^) + getGvalue(p^) + getBvalue(p^)) / 3)); p^ := rgb(gray, gray, gray); Inc(p); end; end; |
Das ist nämlich nicht notwendig.
Werde bei Gelegenheit mal die Komponente installieren.
Lg Martin
|
|
Martin1966
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Fr 30.09.05 15:00
Hallo!
Ich hab deine Komponete mal getestet. Sieht alles sehr gut aus! TOP!!!
Ich hab mal ein bissel Zeit in eine Demo-Anwendung gesteckt und damit Ihr Euch nicht alle selbst eine Demo-Anwendung basteln müsst packe ich meine mal in den Anhang... zusammen mit einem Screenshot.
Lg Martin
Einloggen, um Attachments anzusehen!
|
|
Gothicware
Beiträge: 77
Win 98, Win 2000, Win XP, BeOs-R5, Zeta 1.0(war nicht gut, also verkauft), KnoppiX, VM-Ware
D4 Client/Server, Turbo Basic, QBasic, Atari-Basic
|
Verfasst: Fr 30.09.05 16:14
Also das mit dem "var" vor "src: TBitmap" ist nur zur Sicherheit, damit auch wirklich ins Bitmap geschrieben werden kann. Fals jemand auf die Idee kommen sollte statt einem Bitmap, eine funktion die ein Bitmap zurück liefert zu setzen.
Und danke für euer Lob! *freu*
@Martin1966: Echt Danke, ich bin bis jetzt noch nicht dazu gekommen ein einigemassen vernüftiges Demo-Prog zu schreiben. *asche auf mein haupt*
Gruss Gothicware, Inc.
_________________ Programmierer sind Verbrecher!
Eine Initiative zum Schutz des Kapitals.
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Fr 30.09.05 17:16
Martin1966 hat folgendes geschrieben: | Ich hab mal ein bissel Zeit in eine Demo-Anwendung gesteckt |
Und unser schönes Weihnachtslogo für die Demo missbraucht...
|
|
Muffin
Beiträge: 99
WinXP Pro SP2
D7 Personal
|
Verfasst: So 02.10.05 11:58
Für Software empfiehlt CreativeCommons die GNU GPL Lizenz beziehungsweise für Softwarebibliotheken die GNU LGPL Lizenz. Die ist sowas wie ein Quasistandard für Software Lizenzen. Das ist eigentlich nur wichtig, weil Copyleft Lizenzen untereinander leider inkompatibel sind.
Die normalen CreativeCommons Lizenzen sind mehr so für künstlerische Arbeiten gedacht: Texte im Sinne von Literatur. Ich hab das gestern selber erst bemerkt und daraufhin meine Software Lizenzen umgestellt.
Mehr Informationen zu dem Thema gibt es in den Wikipedia Artikeln:
de.wikipedia.org/wik...neral_Public_License
de.wikipedia.org/wiki/Creative_Commons
|
|
Gothicware
Beiträge: 77
Win 98, Win 2000, Win XP, BeOs-R5, Zeta 1.0(war nicht gut, also verkauft), KnoppiX, VM-Ware
D4 Client/Server, Turbo Basic, QBasic, Atari-Basic
|
Verfasst: Mi 05.10.05 02:27
Das die Lizenz nicht optimal ist weiss ich, aber ich möchte mein Code auch nicht unter die absolute Freiheit (Frei wie Freiheit und nicht wie Freibier stellen.
Werd vielleicht mal meine eigene Lizenz schreiben die mir erlaubt Leute auszuschliessen. Denn mein Code soll niemanden die Freiheit geben andere in ihrer Freiheit einzuschränken. Deswegen: Free use for non racialist and unexploiting Sofware!, also Microdoof dürfte da mein Code zb.: nicht benutzen, auch wenn sie denn nicht haben wollen. Hab schon vor Urzeiten mal ne Anfrage an die Open-Source Gemeinde zum Thema gemacht. Die meinten bloss, das wenn ich jemand ausschliesse es keine Open-Source mehr ist, egal ob ich Nazis oder Aliens ausschliesse. Das ist ist für mich ein ein wenig eingeschränkt (die Meinung) weswegen ich damit nicht glücklich bin.
Naja, aber trozdem Danke für den Hinweis. ("Und es ist doch eine Art Kunstwerk!")
Gruss GW
_________________ Programmierer sind Verbrecher!
Eine Initiative zum Schutz des Kapitals.
|
|
Gothicware
Beiträge: 77
Win 98, Win 2000, Win XP, BeOs-R5, Zeta 1.0(war nicht gut, also verkauft), KnoppiX, VM-Ware
D4 Client/Server, Turbo Basic, QBasic, Atari-Basic
|
Verfasst: Mo 10.10.05 19:04
Nach langem hin und her, einigen Codezeilen, einige Biere hab ich mich nun doch entschlossen das ganze unter GNU Lesser General Public License zustellen.
Zum einen, weil es für euch das Lizensrecht vereinfacht, und zum anderen weil ich
jetzt auch andere Units und Teile von Units die unter LGPL stehn improtieren kann.
Alles andere findet ihr in der History.txt in GW_ImagePlus.zip.
Viel Spass,
Gothicware, Inc.
_________________ Programmierer sind Verbrecher!
Eine Initiative zum Schutz des Kapitals.
|
|
|