Einzelnen Beitrag anzeigen

padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Digilabel Komponente mit coolem Effekt

  Alt 12. Okt 2006, 07:26
Guten Morgen,

also noch mal zu diesem Thema.

Mit folgendem Code, habe ich das was ich ursprünglich wollte auch hinbekommen:

Delphi-Quellcode:
  procedure Antialiasing(const DC: TCanvas; const Rectangle: TRect; wiederhol: integer);

  type
    TRGBTripleArray = array[0..32768] of TRGBTriple;
    // 32768 = maximale Anzahl der Pixel in der Breite eines Bildes (also eine "ScanLine")
    pRGBTripleArray = ^TRGBTripleArray; // Pointer auf TRGBTripleArray

  var
    cx, cy: Smallint;
    r, g, b: Byte;
    Row1: pRGBTripleArray;
    Row2: pRGBTripleArray;
    Row3: pRGBTripleArray;
    TEMP: TBitmap;
    CurRect: TRect;

    i: shortint;
  begin
    TEMP := TBitmap.Create;
    try

      for i := 0 to wiederhol do
      begin
        with TEMP do begin
          Width := Rectangle.Right - Rectangle.Left;
          Height := Rectangle.Bottom - Rectangle.Top;
          CurRect := Rect(0, 0, Width, Height);
          PixelFormat := pf24Bit;
          Canvas.CopyRect(CurRect, DC, Rectangle);
          with Canvas do begin
            for cy := 1 to (Height - 2) do begin
              Row1 := ScanLine[cy - 1];
              Row2 := ScanLine[cy];
              Row3 := ScanLine[cy + 1];

              for cx := 1 to (Width - 2) do begin
                r := (Row1[cx - 1].rgbtRed+Row1[cx].rgbtRed+
                Row1[cx + 1].rgbtRed+
                Row2[cx - 1].rgbtRed+
                Row2[cx + 1].rgbtRed+
                Row2[cx - 1].rgbtRed+
                Row3[cx].rgbtRed+
                Row3[cx + 1].rgbtRed+
                Row3[cx].rgbtRed) div 9;

                g := (Row1[cx - 1].rgbtGreen+
                Row1[cx].rgbtGreen+
                Row1[cx + 1].rgbtGreen+
                Row2[cx - 1].rgbtGreen+
                Row2[cx + 1].rgbtGreen+
                Row2[cx - 1].rgbtGreen+
                Row3[cx].rgbtGreen+
                Row3[cx + 1].rgbtGreen+
                Row3[cx].rgbtGreen) div 9;

                b := (Row1[cx - 1].rgbtBlue+
                Row1[cx].rgbtBlue+
                Row1[cx + 1].rgbtBlue+
                Row2[cx - 1].rgbtBlue+
                Row2[cx + 1].rgbtBlue+
                Row2[cx - 1].rgbtBlue+
                Row3[cx].rgbtBlue+
                Row3[cx + 1].rgbtBlue+
                Row3[cx].rgbtBlue) div 9;
                Row2[cx].rgbtBlue := b;
                Row2[cx].rgbtGreen := g;
                Row2[cx].rgbtRed := r;
              end;
            end;
          end;
          DC.CopyRect(Rectangle, Canvas, CurRect);
        end;
      end;
    finally
      TEMP.Free;
    end;
  end;
Der Aufruf dazu:

    Antialiasing(Form1.canvas, Digilabel.BoundsRect, 1); wobei Digilabel natürlich meine Anzeige Komponente ist.

Nun habe ich das ja quasi in meinem Projekt umgesetzt, das ist aber doof, ordentlicher wäre ja,
das die Komponente selbst die Eigenschaft schon mitbringt.
Ich habe die Eigenschaft mal "smooth" genannt.
Wird ein Wert für smooth größer 0 angegeben, so soll die Eigenschaft ziehen.

So sieht das nun in der Komponente aus:

//dto. wie oben allerdings am Aufruf haperts:

    Antialiasing(Form1.canvas, self.BoundsRect, 1); denn hier habe ich ja nun keine Form1.
Habe es also so versucht, aber ohne Erfolg:
    Antialiasing(self.canvas, self.BoundsRect, 1);
Kann mir jemand sagen, wie ich das in Griff bekomme.

So ein Verzweiflungsversuch habe ich auchschon gestartet:

  Antialiasing(Parent.Brush.Create.Bitmap.Canvas, Digilabel.BoundsRect, 1);

Hüüüüüüülfeeee!!!




Edit:

das Problem ist übrigens nicht, dass was abstürzt, oder es eine Exception gäbe,
nein, es funktioniert halt nicht mit
Antialiasing(self.canvas, self.BoundsRect, 1);
  Mit Zitat antworten Zitat