![]() |
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; |
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; |
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));
|
AW: Random Grauwert für Image/Canvas
Zitat:
Eher sehr ![]() Bummi hat schon das richtige |
AW: Random Grauwert für Image/Canvas
Delphi-Quellcode:
PS: es gibt 256 (0-255) und nicht nur 255 Stufen (0-254).
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); Und das ![]() |
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! |
AW: Random Grauwert für Image/Canvas
Random(x) erstellt ja eine Zahl im Bereich
Delphi-Quellcode:
, also
0 <= rnd < x
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. ![]() 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. |
AW: Random Grauwert für Image/Canvas
Oder
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz