AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Image und ImageList vergleichen

Ein Thema von Ironmaster · begonnen am 16. Jun 2006 · letzter Beitrag vom 18. Jun 2006
Antwort Antwort
Ironmaster

Registriert seit: 19. Mai 2006
70 Beiträge
 
Delphi 7 Personal
 
#1

Image und ImageList vergleichen

  Alt 16. Jun 2006, 20:50
Hallo

Ich versuche ein Image, was ich zuvor aus ImageList1 geholt habe, mit dem gleichen Picture aus der ImageList1 zu vergleichen.

Mein Versuch:

Delphi-Quellcode:
if Image1.Picture.Bitmap = ImageList1.GetBitmap(0,Image1.Picture.Bitmap)
then Geg1.Caption := 'Hallo';
Leider funktioniert dies nicht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Image und ImageList vergleichen

  Alt 16. Jun 2006, 20:57
Ich würde die Bilder durch setzten des .Tag eindeutig zuordenbar machen.
Markus Kinzler
  Mit Zitat antworten Zitat
GetUserName

Registriert seit: 29. Apr 2006
11 Beiträge
 
#3

Re: Image und ImageList vergleichen

  Alt 16. Jun 2006, 20:58
Es ist ganz einfach, du musst im ersten Parameter die Zeillennummer in der das Bild ist auswählen!

if Grafik.Picture.Bitmap = ImgList.GetBitmap({Hier die Zeilennummer},Grafik.Picture.Bitmap) then TxtFeld.Caption := 'Hallo';
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Image und ImageList vergleichen

  Alt 17. Jun 2006, 03:36
ich glaube nicht, dass das ein "richtiger" Bitmap-Vergleich ist, da du nur 2 Referenzen vergleichst...

ich hatte mir für diesen zweck mal folge funktion geschrieben...

Delphi-Quellcode:
function CompareBitmaps(Bmp1,Bmp2:TBitmap):boolean;
type
  PRGBTripleArray = ^TRGBTripleArray;
  TRGBTripleArray = array[0..32767] of TRGBTriple;
var srcRow, DestRow: PRGBTripleArray;
    x,y:integer;
    different:boolean;
begin
  different:=false;
  if (bmp1.width=bmp2.width) and (bmp1.height=bmp2.height) then
  begin
    y:=0;
    while (y < bmp1.Height) and (different=false) do
    begin
      SrcRow := Bmp1.Scanline[y];
      DestRow := Bmp2.Scanline[y];
      x:=0;
      while (x < Bmp1.Width) and (different=false) do
      begin
        if not ((SrcRow[x].rgbtRed=DestRow[x].rgbtRed) and
           (SrcRow[x].rgbtGreen=DestRow[x].rgbtGreen) and
           (SrcRow[x].rgbtBlue=DestRow[x].rgbtBlue)) then different:=true;
        inc(x);
      end;
      inc(y);
    end;
  end else different:=true;
  Result:=not different;
end;
Gruß Frank
  Mit Zitat antworten Zitat
Ironmaster

Registriert seit: 19. Mai 2006
70 Beiträge
 
Delphi 7 Personal
 
#5

Re: Image und ImageList vergleichen

  Alt 18. Jun 2006, 22:46
hat jemand noch eine andere lösung? die gegebenen funktionieren entweder nicht (Antwort 1 und 2) oder ich will sie nicht nutzen, weil ich sie nicht verstehe (Antwort 3).

Geg1 ist übrigens eine GroupBox.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Image und ImageList vergleichen

  Alt 18. Jun 2006, 22:49
Warum soll das mit dem .Tag nicht funktionieren? Du Mußst nur beim herausholen des Bildes z.B. den Index des Bildes in den .Tag des TImage schreiben. das ist auf jeden Fall weniger aufwendig, als die beiden Bilder anhand des Inhalts zu vergleichen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Image und ImageList vergleichen

  Alt 18. Jun 2006, 22:55
Wie wärs damit:

Delphi-Quellcode:
function BitmapsEqual(bmp1, bmp2: TBitmap): Boolean;
var I, J: Integer;
begin
  if (bmp1 = nil) xor (bmp2 = nil) then
    Result:=True
  else
    Result:=False;
  if (bmp1 = nil) or (bmp2 = nil) then exit;

  if (bmp1.width <> bmp2.width) or (bmp1.height <> bmp2.height) then begin
    Result:=False;
    exit;
   end;

  Result:=False;

  for I:=0 to bmp1.width-1 do
    for J:=0 to bmp1.height-1 do
      if bmp1.canvas.pixels[I, J] <> bmp2.canvas.pixels[I, J] then exit;
  Result:=True;
end;
(Ungetestet)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: Image und ImageList vergleichen

  Alt 18. Jun 2006, 23:14
meine Funktion macht eigentlich das gleiche wie der schleifenteil von 3_of_8, nur dass Canvas.Pixels seeeeehhhr lahm ist, deswegen per scanline.
Scanline arbeitet (wie der Name schon sagt) zeilenweise...er liest das Bitmap zeile für zeile ein und schreib den inhalt dieser Zeile in ein mehrdimensionales array (einmal für bitmap1 (srcRow) und einmal für bitmap2 (destrow)).
dieses array wird pixel für pixel durchlaufen und mit dem anderen array an gleicher position verglichen (jeder Farbkanal einzeln).

mal bisschen Pseudocode zum verständnis (array, was scanline ausspuckt):
Delphi-Quellcode:
const
  rgbtRed=0;
  rgbtGreen=1;
  rgbtBlue=2;
type
  TPixel=array[rgbtRed..rgbtBlue] of byte; //die 3 Farbwerte pro Pixel
  TLine=array of TPixel; //alle Pixel einer zeile (SrcRow,DestRow in der Funktion)
Hoffe es ist jetzt bisschen verständlicher geworden...
ansonsten mal die OH befragen oder wenn das nicht hilf hier

Gruß Frank
  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 08:50 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