Autor Beitrag
JungerIslaender
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 06.03.09 20:02 
Ich möchte ein bild in mein Programm laden und dann analysieren. Folgendes soll gemacht werden:

Bilder bestehen aus pixeln und das programm soll ein raster anlegen, wobei ein quadrat im raster für ein pixel steht. Und das raster dann in eine text datei umgewandelt werden(Reihe1: Blau blau gelb...). Dabei soll noch die Rastergröße veränderbar sein sodass die farbe die in einem raster überwiegt genommen wird.

Leider weiß ich nicht wie ich das angehen soll.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.03.09 20:59 
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 06.03.09 23:04 
Hab es jetzt mit image1.Canvas.Pixels[i,j] gelöst. Das liefert mir nun werte wie:$007B7D63 wie kann ich die nun vereinfachen und in ein wort umwandeln wie Hellrot hellblau usw.? oder generell gucken was für eine farbe das ist.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.03.09 23:09 
user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Hab es jetzt mit image1.Canvas.Pixels[i,j] gelöst.
Das ist im Gegensatz zu Scanline zwar extrem viel langsamer (Tretroller vs. Spaceshuttle so ca. :mrgreen:), aber wenn das egal ist...

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Das liefert mir nun werte wie:$007B7D63 wie kann ich die nun vereinfachen und in ein wort umwandeln wie Hellrot hellblau usw.? oder generell gucken was für eine farbe das ist.
Naja, wenn du Scanline benutzt hättest, hättest du direkt die drei Farbwerte für rot, grün und blau, hier musst du die eben noch herausholen.

Ich glaube da gibt es GetRValue, GetBValue und GetGValue, außerdem sind das ja jeweils eins der letzten 3 Bytes, du könntest es also auch mit shr und and z.B. selbst herausholen.
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 06.03.09 23:28 
Scanline haz mir keine korrekten werte geliefert, wenn du mir sagst wie es geht dann mach ich es auch so.
Wenn ich dann die RGB werte hätte, hab ich aber immer noch nicht was ich brauch. Hätte letztendlich gerne sowas:
Pixel1,1 rot
Pixel1,2 blau
Pixel1,3 gelb
Pixel1,4 hellrot
In rgb umwandeln wäre einfach:
ausblenden Delphi-Quelltext
1:
ColorToRGB()					

denn image1.Canvas.Pixels[i,j] liefert den wert color
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.03.09 23:40 
Es gibt z.B. ColorToStr, aber das kennt nicht so viele Farben. Zudem kennt es nur die Delphikonstantennamen.

Alles weitergehende müsstest du selbst anhand einer Liste von Farben und deren Kriterien programmieren. Ich kenne jedenfalls keine eingebauten weitergehenden Möglichkeiten. ;-)
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 06.03.09 23:43 
OK Vielenn Dank(das mitColor to string hab ich schon^^, deshalb die werte)
>M@steR<
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: Sa 07.03.09 02:24 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:10, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 08:57 
user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Scanline haz mir keine korrekten werte geliefert, wenn du mir sagst wie es geht dann mach ich es auch so.
Wie in dem verlinkten Beispiel eben: :nixweiss:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm2.Button1Click(Sender: TObject);
type
  PixArray = array[1..3of Byte;
var
  p: ^PixArray;
  x, y: Integer;
begin
  Image1.Picture.Bitmap.PixelFormat := pf24bit;
  for y := 0 to Image1.Picture.Bitmap.Height - 1 do
  begin
    p := Image1.Picture.Bitmap.ScanLine[y];
    for x := 0 to Image1.Picture.Bitmap.Width - 1 do
    begin
      ShowMessage('Rot: ' +  IntToStr(p^[3]));
      ShowMessage('Grün: ' +  IntToStr(p^[2]));
      ShowMessage('Blau: ' +  IntToStr(p^[1]));
      Inc(p);
    end;
  end;
end;
Eigentlich sollte das so passen, ausprobiert habe ich es jetzt nicht.


Zuletzt bearbeitet von jaenicke am Sa 07.03.09 15:08, insgesamt 1-mal bearbeitet
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Sa 07.03.09 14:51 
Vielleicht beantwortet das deine frage:
www.youtube.com/watch?v=y-laSYHqlQA

Edit: genauso wie du das geschrieben hast hab ich es auch gemacht, werd es jetzt nochmal testen, hoffe ich hatte irgendwo einen fehler^^.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1337
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Sa 07.03.09 15:01 
Aber dabei muss man beachten das das PixelFormat des Bitmaps 24 Bit hat. Sonst bekommt man ja nur Müll raus.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 15:09 
Stimmt, ich habe das ergänzt, das hatte ich vergessen, dass das ja auch mal anders sein kann. (Ich habs eh immer in dem Format.)
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Sa 07.03.09 15:09 
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Aber dabei muss man beachten das das PixelFormat des Bitmaps 24 Bit hat. Sonst bekommt man ja nur Müll raus.

Das versteh ich jetzt nicht.

Außerdem hat irgendjemand ne idee wie ich ausz.B.
Rot: 132
Grün: 146
Blau: 140
so etas wie Blau, Hellblau oder so hinkrieg. Denn ich weiß nichtmal was das jetzt für ne farbe wäre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 15:13 
Die Umstellung des PixelFormats habe ich oben ergänzt.

Da die drei Werte relativ nahe beieinander liegen, ist es eine Farbe im Graubereich, hier mitteldunkel ca. würde ich sagen. ;-)

Du musst solche Kriterien dir überlegen für die Farben, die du in der Liste anzeigen willst. Zum Beispiel: Wenn ein Wert mehr als doppelt so hoch ist wie die beiden anderen, dann ist es die Farbe, dazu dann die Helligkeit.
Diese kannst du ja ausrechnen aus den drei Werten.
>M@steR<
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: Sa 07.03.09 19:31 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:10, insgesamt 2-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 19:41 
user profile icon>M@steR< hat folgendes geschrieben Zum zitierten Posting springen:
dazu mss man aber viel Langeweile haben :lol:
Das ist auch kein großer Unterschied zu deinem Vorgehen, wenn du genauso viele Farben auflistest. :nixweiss:

Die Frage wird mittlerweile in einem neuen Thema behandelt:
www.delphi-forum.de/viewtopic.php?t=90679
>M@steR<
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: Sa 07.03.09 19:58 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:10, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 20:02 
Ach das, ja, da hast du Recht, aber was gibts da nicht alles verrücktes. ;-)
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Di 10.03.09 14:55 
Danke, dass mit dem einscannen werde ich auch noch testen^^
Danke!