AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Random Grauwert für Image/Canvas
Thema durchsuchen
Ansicht
Themen-Optionen

Random Grauwert für Image/Canvas

Ein Thema von MisterKnister · begonnen am 8. Mär 2012 · letzter Beitrag vom 8. Mär 2012
Antwort Antwort
MisterKnister

Registriert seit: 21. Feb 2012
7 Beiträge
 
#1

Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 16:45
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;
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 17:13
Delphi-Quellcode:
Function RandomGray:TColor;
var
 byte:Integer;
begin
  byte := random(256);
  Result := RGB(byte,byte,byte);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#3

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 17:20
ersetz die Zeile vor end; mit
Image2.Canvas.Pixels[i, j]:= RGB(Random(255),Random(255),Random(255));
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 17:22
ersetz die Zeile vor end; mit
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 17:30
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Mär 2012 um 17:35 Uhr)
  Mit Zitat antworten Zitat
MisterKnister

Registriert seit: 21. Feb 2012
7 Beiträge
 
#6

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 19:42
@ 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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 20:16
Random(x) erstellt ja eine Zahl im Bereich 0 <= rnd < x , also (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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Random Grauwert für Image/Canvas

  Alt 8. Mär 2012, 22:16
Oder Bei Google suchenPerlin Noise verwenden, dass sich in "Feinkörnigkeit" (Skalierung) und "Unruhe" (Oktaven) parametrieren lässt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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