Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Gleiches Bild geladen, unterschiedliche Pixel? (https://www.delphipraxis.net/165676-gleiches-bild-geladen-unterschiedliche-pixel.html)

Aljoscha 11. Jan 2012 03:32

Gleiches Bild geladen, unterschiedliche Pixel?
 
Guten Abend/Morgen ;-)
Ich habe folgendes Problem, ich möchte 2 Bilder laden und deren RGB Code an einer bestimmten Position ausgeben welche ich durch Edits definiere.
Wenn ich nun aber 2 mal exakt das gleiche Bild lade erhalte ich an den meisten Pixeln unterschiedliche RGB Codes.
Wie kann das sein beim gleichen Bild?
Ich hoffe ihr versteht was ich meine.

Code:
procedure TForm1.FormCreate(Sender: TObject);
var
temp: TPicture;
begin
temp:=TPicture.Create;
temp.LoadFromFile('.\fb1.jpg');

bmp1:= TBitmap.Create;
bmp1.Width := temp.Width;
bmp1.Height := temp.Height;
bmp1.Canvas.Draw(0, 0, temp.Graphic);

Image1.Picture:=temp;

temp.Free;
temp:=TPicture.Create;
temp.LoadFromFile('.\fb1.jpg');

bmp2:= TBitmap.Create;
bmp2.Width := temp.Width;
bmp2.Height := temp.Height;
bmp2.Canvas.Draw(0, 0, temp.Graphic);

Image2.Picture:=temp;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  RGB1 : TColor;
  RGB2 : TColor;
begin
  xZeiger := StrToInt(edit1.text);
  yZeiger := StrToInt(edit2.text);
  RGB1 := bmp1.Canvas.Pixels[xZeiger, yZeiger];
  RGB2 := bmp2.Canvas.Pixels[xZeiger, yZeiger];

  label1.Caption:=IntToStr(GetGValue(RGB1));
  label2.Caption:=IntToStr(GetGValue(RGB1));
  label3.Caption:=IntToStr(GetBValue(RGB1));

  label4.Caption:=IntToStr(GetRValue(RGB2));
  label5.Caption:=IntToStr(GetGValue(RGB2));
  label6.Caption:=IntToStr(GetBValue(RGB2));
end;

Aljoscha 11. Jan 2012 03:55

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
Ich habe den Fehler gefunden...
label1.Caption:=IntToStr(GetGValue(RGB1));
label2.Caption:=IntToStr(GetGValue(RGB1));
label3.Caption:=IntToStr(GetBValue(RGB1));

label4.Caption:=IntToStr(GetRValue(RGB2));
label5.Caption:=IntToStr(GetGValue(RGB2));
label6.Caption:=IntToStr(GetBValue(RGB2));
GetRValue wäre natürlich richtig gewesen.
Es wird wirklich Zeit fürs Bett :-D

DeddyH 11. Jan 2012 07:11

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
DRY ;)

Aphton 11. Jan 2012 14:38

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
Nur ne kleine Anmerkung:
Delphi-Quellcode:
Image1.Picture:=temp; // #1

temp.Free; // #2
temp:=TPicture.Create;
Das hier sieht sehr suspekt aus.
Du kopierst bei #1 eine Instanz und nicht den Inhalt der Instanz. Wird der Inhalt der Instanz gelöscht (#2), so ist die Instanz nutzlos und die Verwendung derer wird zu Problemen führen.
Kopiere lieber den Inhalt per Image1.Picture.Assign() (sofern Assign vorhanden).

DeddyH 11. Jan 2012 14:44

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
Ist in dem Fall nicht nötig, da TImage das schon von alleine tut.
Zitat:

Delphi-Quellcode:
procedure TImage.SetPicture(Value: TPicture);
begin
  FPicture.Assign(Value);
end;

Allerdings würde ein Assign die Lesbarkeit/Nachvollziehbarkeit erhöhen.

Aphton 11. Jan 2012 14:46

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
Ah.
Habe jetzt nicht extra Delphi deswegen gestartet, sorry =P

DeddyH 11. Jan 2012 14:47

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
Ich auch nicht, mit PSPad geht es schneller :lol:

Aljoscha 11. Jan 2012 20:30

AW: Gleiches Bild geladen, unterschiedliche Pixel?
 
Danke für eure Hinweise ^^
Ich weiß der Code ist eine Katastrophe, sollte eigentlich nur ein schnelles POC werden für einen Freund mit dem ich diskutiert hatte, allerdings hatte ich unterschätzt wie sich Müdigkeit auf die Konzentration auswirkt :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 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