Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bildbearbeitung: Linien verstärken, gibt's sowas? (https://www.delphipraxis.net/140958-bildbearbeitung-linien-verstaerken-gibts-sowas.html)

Matze 29. Sep 2009 18:12


Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Hallo,

ich habe eine Grafik, die viele bunte Linien enthält, die sich schneiden und beliebige Formen haben können. Leider sind die Linien nur einen Pixel breit und wenn ich das ausdrucke, kann man nur ahnen, dass da eine Linie sein könnte.

Gibt es die Möglichkeit diese Linien mit einem Tool zu verdicken?

Grüße, Matze

turboPASCAL 29. Sep 2009 19:14

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Villeicht das Teil Vektorisieren ?

An sonsten bleibt nicht viel übrig, zB. "Resize".

Matze 29. Sep 2009 19:25

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Resize? Das Bild ist groß genug. ;)

Hm, dann muss ich mir was anderes überlegen, wie ich das ausdrucken könnte ...

himitsu 29. Sep 2009 19:30

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Gibt es eine Einheitliche Hintergrundfarbe?

Wenn ja, dann entweder jedes Pixel, welches nicht dem Hintergrund entspricht, in ein neues Bild übertragen und dort als etwas größeren Kreis zeichen.

Wenn es dabei auch rchteckig sein darf, ginge auch einfach
Delphi-Quellcode:
BildNew.Width := Bild.Width + B;
BildNew.Height := Bild.Height + B;
For x := 0 to B - 1 do
  For y := 0 to B - 1 do
    BildNew.DrawTransparent(Bild, x, y);
B wäre der Faktor, um welchen die Pixel vergrößert würden.
du kannst natürlich X und Y so beeinflußen, daß es einen Kreis einfügt :angel2:


Einziges Problem sind Farbübergänge, welche eigentlich bei den Schnittpunkten von Linien entstehen sollten ... hier ist es ja mehr so, daß es mehr kantig überlappende Kreuzungen ergibt.

Matze 29. Sep 2009 19:37

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja es gibt eine einheitliche Hintergrundfarbe. Ich könnte schon versuchen, selbst etwas zu basteln, wenn es nicht anders geht.

Edit [21:18]: ich habe nun was gebastelt.

turboPASCAL 29. Sep 2009 20:26

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Passt doch. ;)

PS.: der Name "linienfettierer" ist :thumb:

Matze 29. Sep 2009 20:33

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Schöner wäre es natürlich, wenn ich die Farben nacheinander übermalen würde. Dann würden diese Farbverkuddelungen nicht passieren und sich die Linien sauber überlagern.
Aber das ist dann doch etwas zu aufwändig. ;)

DP-Maintenance 29. Sep 2009 20:41

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Klatsch und Tratsch" nach "Multimedia" verschoben.
Mittlerweile eher Multimedia mit K&T-Anteil. *g*

himitsu 29. Sep 2009 21:24

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure LinienFettierer(Image: TBitmap; Background: TColor; Size: Integer);
var
  x, y, x2, y2, x3, y3, R, G, B, P: Integer;
  C: TColor;
  Temp: TBitmap;
  Mask: Array of Array of Boolean;
begin
  SetLength(Mask, Size, Size);
  for x := 0 to Size - 1 do
    for y := 0 to Size - 1 do
      Mask[x, y] := True;//(x - Size div 2)
  Temp := TBitmap.Create;
  try
    Temp.Width := Image.Width + Size - 1;
    Temp.Height := Image.Height + Size - 1;
    for x := 0 to Temp.Width - 1 do
      for y := 0 to Temp.Height - 1 do
      begin
        R := 0; G := 0; B := 0; P := 0;
        for x2 := 0 to Size - 1 do
        begin
          x3 := x - Size div 2 + x2;
          if (x3 >= 0) and (x3 < Image.Width) then
            for y2 := 0 to Size - 1 do
            begin
              y3 := y - Size div 2 + y2;
              if (y3 >= 0) and (y3 < Image.Height) and Mask[x2, y2] then
              begin
                C := Image.Canvas.Pixels[x3, y3];
                if C <> Background then
                begin
                  Inc(R, GetRValue(C));
                  Inc(G, GetGValue(C));
                  Inc(B, GetBValue(C));
                  Inc(P);
                end;
              end;
            end;
        end;
        if P <> 0 then
          Temp.Canvas.Pixels[x, y] := RGB(R div P, G div P, B div P)
        else
          Temp.Canvas.Pixels[x, y] := Background;
      end;
    Image.Width := Temp.Width;
    Image.Height := Temp.Height;
    Image.Canvas.Draw(0, 0, Temp);
  finally
    Temp.Free;
  end;
end;

Matze 29. Sep 2009 21:28

Re: Bildbearbeitung: Linien verstärken, gibt's sowas?
 
:shock: Sehr übersichtlich. :mrgreen:
Da lohnt sich vermutlich auch, das mit Delphi-Referenz durchsuchenScanLine (tolle, neue OH-Tags) zu lösen.

Vielen Dank, das sehe ich mir morgen mal genauer an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz