Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Random Grauwert für Image/Canvas (https://www.delphipraxis.net/166991-random-grauwert-fuer-image-canvas.html)

MisterKnister 8. Mär 2012 15:45

Random Grauwert für Image/Canvas
 
Nachdem mir letztes mal gut und schnell geholfen wurde,
und ich mal wieder nicht weiterkomme muss ich leider wieder eine Anfrage starten:

Ich möchte dass die Pixel per Zufall auf einen Grauwert gesetzt werden (also 0 bis 255).
Allerdings handelt es sich um eine Bitmap und deswegen funktioniert es mit random(255) leider nicht.

Meine Billigvariante überzeugt mich leider nicht, und google will nicht mein Freund sein.
Wäre super wenn ihr mir helfen könntet. Schonmal vielen Dank!

Habe "Umrechnungsformeln gefunden" aber die sind irgendwie immer verschieden und ich wüsste nicht wie ich per random alle möglichen Farben ansprechen kann und diese in einen Grauwert umrechnen könnte.

Biiligvariante:
Code:
procedure TForm1.Smooth1Click(Sender: TObject);
var
i, j : Integer;
color : Integer;
const
Rdm: array[0..2] of TColor = (clBlack, clGray, clWhite);

begin
  randomize;

 for i:= 0 to xmax do
   for j := 0 to ymax do
     Image2.Canvas.Pixels[i, j]:= Rdm[Random(Length(Rdm))];
end;

Bummi 8. Mär 2012 16:13

AW: Random Grauwert für Image/Canvas
 
Delphi-Quellcode:
Function RandomGray:TColor;
var
 byte:Integer;
begin
  byte := random(256);
  Result := RGB(byte,byte,byte);
end;

freeway 8. Mär 2012 16:20

AW: Random Grauwert für Image/Canvas
 
ersetz die Zeile vor end; mit
Delphi-Quellcode:
Image2.Canvas.Pixels[i, j]:= RGB(Random(255),Random(255),Random(255));

Bernhard Geyer 8. Mär 2012 16:22

AW: Random Grauwert für Image/Canvas
 
Zitat:

Zitat von freeway (Beitrag 1155434)
ersetz die Zeile vor end; mit
Delphi-Quellcode:
Image2.Canvas.Pixels[i, j]:= RGB(Random(255),Random(255),Random(255));

So richtig grau wird die Fläche damit aber dann nicht ...
Eher sehr bund - und in Farbe :-)

Bummi hat schon das richtige

himitsu 8. Mär 2012 16:30

AW: Random Grauwert für Image/Canvas
 
Delphi-Quellcode:
Image2.Canvas.Pixels[i, j]:= RGB(Random(255+1),Random(255+1),Random(255+1));
//ähhhh
Image2.Canvas.Pixels[i, j]:= RGB(Random(256),Random(256),Random(256));
//entspricht
Image2.Canvas.Pixels[i, j]:= Random($FFFFFF+1);
PS: es gibt 256 (0-255) und nicht nur 255 Stufen (0-254).


Und das Delphi-Referenz durchsuchenRandomize nicht jedesmal aufrufen. :warn:

MisterKnister 8. Mär 2012 18:42

AW: Random Grauwert für Image/Canvas
 
@ Bummi Vielen Dank, läuft astrein!

Die Billiglösung sieht komischerweise nicht so viel schlechter aus als die "perfekte" Lösung, schade :(
Aber liegt halt am Auge und der "Farbmatsche" bei den kleinen Pixeln.

@freeway Die Lösung war leider, wie auch "Bernhard Geyer" bemerkt hat, nicht so ganz das Wahre.

@himitsu Danke, hab das randomize in Tform verlagert, damit es beim Start einmal aufgerufen wird.
Sollte dann ja passen?
Mit 256 ist mir klar, habe nur wegen des random Befehls 255 genommen (da die 0 ja mitzählt)
und da es nicht im Code war die +1 weggelassen.


@All Problem gelöst -> siehe Bummi Lösung, Danke!

himitsu 8. Mär 2012 19:16

AW: Random Grauwert für Image/Canvas
 
Random(x) erstellt ja eine Zahl im Bereich
Delphi-Quellcode:
0 <= rnd < x
, also
Delphi-Quellcode:
(Zufallszahl >= 0) and (Zufallszahl < x)
.
Random(10) = 0 bis 9

Solange man ein VCL-Programm erstellt, könnte man in neueren Delphis das Randomize auch ganz weglassen.
http://www.delphipraxis.net/158670-randomize-o-o.html


Nja, kommt drauf an, was du erreichen willst.

Ruhigere Farbübergänge könnte man erreichen, wenn man benachbarte Pixelfarben einbezieht.

- entweder man verteilt Hundert bis paar Tausend Farbpunkte auf dem Feld und verbindet diese Punkte mit entsprechenden Farbverläufen

- oder man geht von einem Punkt (mit völlig zufälliger Farbe) aus, geht dann pixelweise davon weg und verschiebt zufällig den Farbwert.
Aber immer nur um kleine Schritte, do daß dann ebenfalls ein sanfter Farbverlauf entsteht.

- usw.

Zusätzlich könnte man noch ein Farbspektrum vorgeben.
Vorher per Zufall eine Grundfarbe bestimmen (z.B. bläulich) und dann Pixelfarben nur in dieser Richtung zulassen.

Medium 8. Mär 2012 21:16

AW: Random Grauwert für Image/Canvas
 
Oder Bei Google suchenPerlin Noise verwenden, dass sich in "Feinkörnigkeit" (Skalierung) und "Unruhe" (Oktaven) parametrieren lässt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.

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