Autor Beitrag
Xadron
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102

XP
C++, D7, HTML
BeitragVerfasst: Fr 10.10.08 20:04 
Ich wollte von einem bestimmten Pixel der X und Y Coordinate die Helligkeit sowie den Blau, Grün und Rotanteil in eine bestimmte integer wie z.b. H, G, B, R, schreiben lassen. Dabei soll für das Maximum 255 bzw für das minimum 0 darin stehen.
Soetwas habe ich noch nie gemacht. Hat jemand einen guten Tipp, bzw ein Codefetzen, der das machen kann?

Danke für eure Hilfe

_________________
|x-32:88x+39-3|+3:21=47-4x
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 10.10.08 20:18 
Arbeitest du mit TCanvas? Dort gibt es zwei Möglichkeiten: Canvas.Pixels und Canvas.ScanLine. Die erste erkläre ich kurz, für die zweite schaust du bitte in der Delphi-Hilfe nach. Sie ist zwar etwas komplizierter, aber auch sehr viel performanter.

Canvas.Pixels:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var PixelColor: TColor; R, G, B, H: Byte;
begin
  PixelColor := Canvas.Pixels[X, Y];

  // TColor: $00RRGGBB
  R := (PixelColor and $00FF0000div $10000;
  G := (PixelColor and $0000FF00div $100;
  B := (PixelColor and $000000FF);

  // Helligkeit: Durchschnitt der einzelnen Werte
  H := (R + G + B) div 3;
end;


Edit:: Ich bin beim Kopieren und Umschreiben mit der Delphi-Hilfe durcheinandergekommen, und da ist wohl etwas schief gelaufen. Wie user profile iconJakob_Ullmann ganz richtig bemerkt, sind die Rot- und Blauwerte in Delphi genau andersherum.

Moderiert von user profile iconNarses: Delphi-Tag repariert


Zuletzt bearbeitet von Yogu am Fr 10.10.08 21:54, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 10.10.08 20:19 
Moin!

Schau mal hier, damit solltst du weiter kommen. ;)


@user profile iconYogu:
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  // TColor: $00RRGGBB
  R := (PixelColor and $00FF0000div $10000;
  G := (PixelColor and $0000FF00div $100;
  B := (PixelColor and $000000FF);
Ich würde die Werte erst mit SHR schieben und dann mit $FF maskieren, ist IMHO sicher besser (und performanter bei sehr vielen Operationen), als das mit einer Division zu machen. :idea:

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
// Helligkeit: Durchschnitt der einzelnen Werte
  H := (R + G + B) div 3;
end;
Die Helligkeit der Grundfarben ist nicht gleich gewichtet, schau mal in den gelinkten Thread. :les: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 10.10.08 20:36 
In Delphi ist das nicht $00RRGGBB, sondern $00BBGGRR. :wink:
Xadron Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102

XP
C++, D7, HTML
BeitragVerfasst: Fr 10.10.08 22:36 
Das ist eig. genau das was ich gesucht habe. danke

_________________
|x-32:88x+39-3|+3:21=47-4x