Einzelnen Beitrag anzeigen

Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#8

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

  Alt 13. Okt 2008, 12:04
Jo, das wird da gezeigt, ich habs nur erwähnt weil ich mich noch nicht drum gekümmert hab. StretchBlt, joah, in meinem Fall eignet sich die Jcl-Version glaub ich besser.
Die hat halt den Vorteil dass man ihr ein TGraphic gibt, und die Ausgabe aber auf einem TBitmap stattfindet. Ich hatte ja das Problem, dass ich bei nicht-Bitmaps die ich lade, keinen vernünftigen Zugriff auf das TImage habe. Auf diese Weise kann ich das Graphic des Images auslesen, egal welches Format es ist, und bekomme eine Ausgabe mit der man arbeiten kann (und ich kann mir beim Stretchen den Filter aussuchen ).
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). 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.

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
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat