Einzelnen Beitrag anzeigen

Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#9

Re: TImage: Bild laden, Auswahlrahmen zeichnen,Farben vermis

  Alt 13. Okt 2008, 12:23
Zitat von S - tefano:
Auf dem TImage malen: Genau so hab ichs aber gemacht Ich hatte ja das Problem, dass ich nichts transparentes über das Image legen kann und/oder ich nicht aus dem Image lesen kann (was ich aber muss wenn ich auf ner überliegenden Komponente die Farben mischen will).
dann ändere erst dieses!!
ein TImage ist nicht zum Zeichnen geeignet, du stößt früher oder später auf Probleme.eine mögliche Realisierung ist in meinem Beispielprogramm ja schon ziemlich umfangreich vorhanden.um mehere dateitypen zu unterstützen bastelst du halt eine Lade-Methode, die die datei in das TBitmap-format umwandelt (und Typ merken zum späteren Speichern).
Zitat von S - tefano:
Gut, jetzt hab ich durch das Stretch-Kopieren ja ein normales Image mit normaler Bitmap aus der ich lesen kann, theoretisch könnte ich noch ne Paintbox drüberlegen und darauf zeichnen. Darauf werd ich zurückgreifen wenn mir das Rahmenzeichnen auf dem TImage bei Mausverschiebung zu lange dauert.
2 komponenten übereinander zu legen ist genauso unsauber...shau dir doch einfach mal die Demo an, da ist doch fast alles drin...
Zitat von S - tefano:
Die Farben mischen ist eigentlich ganz einfach. Ich hab mir vorher in nem Grafikprogramm die Farbe ausgesucht, die im Inneren der Box sein soll. Für einen Durchschein-Effekt muss man dann die Farbe des Boxpixels mit der Farbe des an der Stelle liegenden Bildpixels verrechnen. Das geht einfach per Durchschnitt:

Delphi-Quellcode:
mline[i].B := round((mline[i].B * 1.25 + 0 * 0.75) / 2);
mline[i].G := round((mline[i].G * 1.25 + 255 * 0.75) / 2);
mline[i].R := round((mline[i].R * 1.25 + 76 * 0.75) / 2);
In diesem Ausschnitt ist der Durchschnitt dazu noch gewichtet. Also so, dass die bildeigenen Anteile noch ein bisschen stärker durchs Grün durchscheinen. Im Beispielbild war es noch ohne Faktoren, also so:

mline[i].B := round((mline[i].B + 0) / 2); //der gewünschte Grünton hat keine Rotanteile Also ganz einfach: Bildfarbe plus Boxfarbe durch zwei
ich geh jetzt mal davon aus, dass du das mittels scanline machst jedoch bin ich noch am rätseln, was deine Konstanten da bedeuten. Farbwert, gewichtung etc.dein Kommentar z.b. verwirrt mich gerade...dort steht was von grün und rot, verwendest da aber nur den blauwert

Gruß Frank
  Mit Zitat antworten Zitat