Hi,
erst mal Danke für die Eindrücke zu der Unit...
Zitat: |
der einzigste Kommentar im ganzen quelltext, und er ist auch niche mal von Dir . Und die eigentliche Klassendeklaration hält sich nicht an das übliche, für mich wäre es übersichtlicher, |
Hmmm ok. Vielleicht. Aber ich finde in diesem Fall keinne "Ecke" im Code die nicht auf den ersten Blick zumindest von der Gliederung her unübersichtlich wäre ?! Sämtliche geschachtelten IFs und FORs sind entsprechend eingerückt....
Das mit den Namen und Namenspräfixen ist aber etwas gegen das ich mich hartnäkig sträube.. Ich möchte sie so benennen wie ich will.
Dabei versuche ich aber sinnvolle namen zu finden...
Zitat: |
Auch ein wenig störend finde ich die Prozedurnamen
für OpenSource sollte man sich vielleicht doch ein wenig Mühe geben und die Namen in einer Sprache halten. |
Das mit der zweisprachigkeit hat folgende Ursachen:
Ich versuche zwar bei den Deklarationen grob in einer Sprache zu bleiben und wechsele die Sprache nur wenn der Name denn ich im Sinn habe in der anderen Sprache zu umständlich wäre... Z.B. habeich mir schon überlegt die Prozedur
justtransform(); als
nurtransformieren();, oder
setpixelmap auch
erstellepixelkarte zu nennen... Ich weiss das ist gegen jeden Standart und Konvention und wäre Delphi eine Religion würde ich sofort exkommuniziert
In der Regel sind es die englischen Bezeichnungen die kürzer sind, was mit der Informationseffizienz der englischen Sprache an sichzusammenhängt....
.. aber es ist ja auch so das man, wenn man einen Gedanken fasst dazu im Kopf unbewusst Worte formuliert. Und mein "Problem" ist das mein Englisch Level soweit ist das es für mich keinen Unterschied mehr zu meiner Muttersprache Deutsch gibt...(Ich denke oder träume z.b. auf teilweise auf englisch) Ich miche die Sprachen beim Programmieren, bei Notitzen, etc, ohne es zu merken ..
Aber an dieser Stelle möchte ich den Styleguide mal hinterfragen:
Situation früher : Be*?!#ssenes Basic wo jede Stringvariable garantiert ein "$" vorangestellt haben muss.
Bezeichner dürfer zwar auch mal länger sein, aber es werden nur die ersten zwei zeichen interpretiert (C-128).
(Ergibt interessante Debugging Erlebnisse bei verwendung zweier fast identischer Variablennamen in einer Schleifenkonstruktion bei
der eine die Loop Variable ist
Dann kamen : Hochsprachen (Ich zähle Basic nicht zu den Hochsprachen). Und alles war auf einmal voll geil....
Endgültig (fast) freie Wahl von Bezeichnernamen.
Keine Probleme mehr mit ähnlichen Namen...und und und...
Warum soll man sich jetzt wieder selbst was auferlegen.. ?! Sofern die Variable im Deklarationsteil kommentiert wird (welchen Wert sie enthält und wozu dieser verwendet wird), sollte es doch kein Unterschied machen, ob ein spezieller Bezeichnername mit F oder ohne F beginnt ???? oder ???
Zitat: |
Ausprobiert habe ich es nicht, aber ich denke, das codemäßig einige große Fehler drin sind: |
Also zumeindest keine "Fehler" im Sinne von Funktionalität.
Die Unit funktioniert schon fehlerfrei.. Sie transformiert Bilder.....
Wenn du mit "Fehler" allerdings "umständlich" meinst, dann könnte was dran sein. Aber gehen zut sie so wie sie is....
Zitat: |
astronomischer Speicherbedarf von 800*600*80Bytes |
Nicht nur Microsoft kann resourcenfressendenCode produzieren.. Das ist der "Bill Gates Flavour"..
Nee mal ernsthaft:
Was genau meinst du mit "Zwischenschritt" ?
Ich nehme das Bild.. rechne aus welcher Subpixel "es am weitesten hat" (Differenz zwwischen Start und ziel).. Der "Weg" ist die gesamtlänge der Transformation. Daran wird die Speed für jeden Wert festgelegt, sodass alle Pixel zur sleben Zeit "ankommen".....
Das wird dann in ein Frame gezeichnet und dargestellt.....
Das was so lange dauert ist eben das rausknobeln der einzelnen Speedparameter für sie Subpixel.....
Zitat: |
Hier sehe ich nicht durch, was du tust. Startmap.free , hier hast du Dusel, das keine Exception kommt. Liegt vielleicht daran, das deine Startmap erstmal Nil ist und beim Free destroy nur aufgerufen wird, wenn das objekt <>Nil ist. Ansonsten ist hier keine Bitmap erstellt wurden und was nicht da ist, kannst du auch nicht freigeben und das free führt zur exception. |
Hmm also eigentlich löst ein free ohne Objekt zum freen kaum eine Exception aus, da eben, wie du sagst, auf NIL geprüft wird.. Das ist bei mir stets der Fall... Steht sogar in Delphi Büchern die ich hab. Im Zusammenhang mit Destroy wird dort gesagt :"Rufen sie Destroy nie direkt auf, sondern verwenden sie grundsätzlich free, da dieses destroy aufruft, vorher jedoch prüft ob das Objekt existiert. Ein direkter Aufruf von Destroy fürt in diesem Fall zu einer Exception"....
Zitat: |
Viel schlimmer ist es noch bei frame:=Tbitmap.create; hier fehlt das free ja völlig. Mit jedem aufruf von setpixelmap wird dein speicherbedarf schön steigen. |
Nein, eigentlich nicht... es steht genau eine Zeile davor.......
Es passiert dabei folgendes (sollte zumindest......:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TTransImage.setstartmap(bildname:string); begin startmap.Free; startmap := TBitmap.Create; startmap.LoadFromFile(bildname); end; |
Das Ergebnis: Bei jedem Aufruf vom Setstartmap wird die aktuelle srtartmap freigegeben und eine neue erstellt.....
DAs sollte doch recht leicht nachzuvollziehen sein, oder ?
Zitat: |
Mit canvas.pixels arbeite ich nicht. Bei Verwendung der scanlines – eigenschaft siehst du beim Lesen/Schreiben der einzelnen Pixel bei unterschiedlicher Bildgröße mit Sicherheit eine AV. Wenn die Bildgrößen unterschiedlich sind, hat für mich das Weitermachen eh nicht sinnvoll |
Deswegen arbeite ich ja mit dem Canvas.......
nicht sinnvoll ?Naja, versuch doch einfach mal das transformen von verschieden grossen Bildern. Die Klasse erlubt es. Es ist ja nur ein Warnhinweis.....
Es macht schon Sinn..Die Bilder sind zentriert und überstehende Bereiche des Grösseren transformen in den Hintergrund, aus dem Hintergrund.....
In meiner Version ist die transformation noch linksbündig (bei Transformation von gross auf kleiner) nur der endframe wird zentriert ausgegeben.
Aber sooo sinnlos isses echt nicht. Auch vorstellbar.:
Ein kleines Bild (z.b. Logo) wird in ein grösseres an einer bestimmten Stelle "eingefaded" ohne das dazu zwei Komponenten übereinander gebappt werden müssen...
DAs ganze ist auch inzwischen ausführlich dokumentiert. Habe aber immernoch keinen geeigneten Webspace Provider gefunden.. Jeder hat irgendwie nen anderen Haken...
Werde mich aber bemühen das ganze (inkl. Demoprogramm) bald wieder online zustellen....
Catweasel
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.