Avatar billede eht Nybegynder
31. maj 2004 - 15:47 Der er 4 kommentarer og
1 løsning

Tilføj skygge til billede.

Jeg har brug for at kunne tilføje en skyggeeffekt til billeder i mit program.
Det er en ofte brugt effekt hvor billedet er tilføjet en blød skygge.
Jeg er evt. også interesseret i andre måder at tilføje rammer til billeder.

//Erik
Avatar billede kreller1 Nybegynder
31. maj 2004 - 15:49 #1
Hvad er dit program?
Avatar billede eht Nybegynder
31. maj 2004 - 19:34 #2
Mit program hedder Mediamixer og er et program til at lave multimediepræsentationer, specialundervisningsmaterialer mm.

Kan hentes på www.mixware.dk
Avatar billede kreller1 Nybegynder
06. juni 2004 - 21:04 #3
Hmmm oki
altså der findes jo en htmlkode der kan lave en lille skygge til billedet
Dog kan det også laves i photoshop som kan hentes på www.adobe.com (trial version)
Avatar billede eht Nybegynder
06. juni 2004 - 23:08 #4
Med udgangspunkt i denne procedure fandt jeg selv ud af at tegne en skygge:

procedure DrawGradient(ACanvas: TCanvas; Rect: TRect; Horicontal: Boolean; Colors: array of TColor);
type
  RGBArray = array[0..2] of Byte;
var
  x, y, z, stelle, mx, bis, faColorsh, mass: Integer;
  Faktor: double;
  A: RGBArray;
  B: array of RGBArray;
  merkw: integer;
  merks: TPenStyle;
  merkp: TColor;
begin
  mx := High(Colors);
  if mx > 0 then
  begin
    if Horicontal then
      mass := Rect.Right - Rect.Left
    else
      mass := Rect.Bottom - Rect.Top;
    SetLength(b, mx + 1);
    for x := 0 to mx do
    begin
      Colors[x] := ColorToRGB(Colors[x]);
      b[x][0] := GetRValue(Colors[x]);
      b[x][1] := GetGValue(Colors[x]);
      b[x][2] := GetBValue(Colors[x]);
    end;
    merkw := ACanvas.Pen.Width;
    merks := ACanvas.Pen.Style;
    merkp := ACanvas.Pen.Color;
    ACanvas.Pen.Width := 1;
    ACanvas.Pen.Style := psSolid;
    faColorsh := Round(mass / mx);
    for y := 0 to mx - 1 do
    begin
      if y = mx - 1 then
        bis := mass - y * faColorsh - 1
      else
        bis := faColorsh;
      for x := 0 to bis do
      begin
        Stelle := x + y * faColorsh;
        faktor := x / bis;
        for z := 0 to 3 do
          a[z] := Trunc(b[y][z] + ((b[y + 1][z] - b[y][z]) * Faktor));
        ACanvas.Pen.Color := RGB(a[0], a[1], a[2]);
        if Horicontal then
        begin
          ACanvas.MoveTo(Rect.Left + Stelle, Rect.Top);
          ACanvas.LineTo(Rect.Left + Stelle, Rect.Bottom);
        end
        else
        begin
          ACanvas.MoveTo(Rect.Left, Rect.Top + Stelle);
          ACanvas.LineTo(Rect.Right, Rect.Top + Stelle);
        end;
      end;
    end;
    b := nil;
    ACanvas.Pen.Width := merkw;
    ACanvas.Pen.Style := merks;
    ACanvas.Pen.Color := merkp;
  end
  else
    // Please specify at least two colors
    raise EMathError.Create('Vælg mindst 2 farver');
end;

Interesserede kan downloade et lille demo - projekt her:

www.mixware.dk/shadow.zip

Det kan muligvis gøres med en lidt enklere kode. Forslag til forenklinger/forbedringer modtages gerne.

//eht
Avatar billede eht Nybegynder
28. oktober 2011 - 12:36 #5
Lukker. Jeg svarede selv. Se kode herover.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester