Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zwei übereinander liegende Bilddateien trennen !!! (https://www.delphipraxis.net/188384-zwei-uebereinander-liegende-bilddateien-trennen.html)

Uwe Raabe 26. Feb 2016 17:42

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Zitat:

Zitat von Mavarik (Beitrag 1331484)
Ansonsten 5 Min...

Für die Programmierung - nicht für den Vergleich, oder?

33Olli33 26. Feb 2016 17:43

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Da muss beim hochladen das eine Bild wohl ein paar Pixel verloren haben.
Beide sind 800 x 605 pixel auf meinem Laptop.
Über Paint kann ich doch bestimmen, welche Farbe innerhalb des QR-Codes verwendet wird.
Gibt es die Möglichkeit, alle betreffenden Farben in z.B. pink umzuändern?
Sowie suchen und ersetzen bei Word?

Mavarik 26. Feb 2016 17:51

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Uwe Raabe (Beitrag 1331485)
Zitat:

Zitat von Mavarik (Beitrag 1331484)
Ansonsten 5 Min...

Für die Programmierung - nicht für den Vergleich, oder?

Sehr witzig...

Bitte mal beide Bilder als BMP zum zippen. (Ein Bilderupload macht daraus immer jpg's)

33Olli33 26. Feb 2016 18:11

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Der macht beim einstellen der beiden Bilder aus BMP jetzt JPG. Will also nur JPG runterladen.
Das funktioniert nicht.

Mavarik 26. Feb 2016 18:11

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Zitat:

Zitat von 33Olli33 (Beitrag 1331490)
Der macht beim einstellen der beiden Bilder aus BMP jetzt JPG. Will also nur JPG runterladen.
Das funktioniert nicht.

s.o. Zippen

33Olli33 26. Feb 2016 18:29

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Sorry, da bin ich Nerd. Was bedeutet BMP zum zippen? Habe die beiden Bilder als .bmp-Datei gespeichert.
Und wie gehts getzt weiter?

Mavarik 26. Feb 2016 18:32

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Zitat:

Zitat von 33Olli33 (Beitrag 1331493)
Sorry, da bin ich Nerd. Was bedeutet BMP zum zippen? Habe die beiden Bilder als .bmp-Datei gespeichert.
Und wie gehts getzt weiter?

Rechte Maustaste in den Ordner,

Datei/neu/Zip-komprimierter Ordner

Beide Bilder per Drag and Drop in den Zipordner rein ziehen und den Zip-File hier hochladen...

Harry Stahl 26. Feb 2016 19:48

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Interessante Aufgabe.

Deine Bilder sind allerdings nicht wirklich identisch überlagert, sondern sind in den Ausmaßen unterschiedlich (auch sind die Pixel leicht verschoben).

Zum Testen daher anliegend Dein Originalbild und ein Neues Bild, bestehend aus dem Originalbild mit einem QR-Code hinterlegt (aus meiner Terminverwaltung einfach einen Termin-QR-Code erstellt), leicht transparent.

Mit der nachfolgenden Funktion kann man den QR-Code da raus extrahieren:

Delphi-Quellcode:
type
  TRGBALine = array[word] of TRGBQuad;
  PRGBALine = ^TRGBALine;
 
  tBuff3Char = array [0..2] of AnsiChar;
  TBufTripleCharArray = array [0..32768] of TBuff3Char;
  pBufTripleCharArray = ^TBufTripleCharArray; // Pointer auf TRGBTripleArray


function GetNewPicFromDifferences (OrgPic, NewPic, BDif: TBitmap): Boolean;
var
  x, z, Y: Integer; RGBAOrg, RGBANew, RGBADif: pRGBALine;
  LineOrg, LineNew, LineDif : pBufTripleCharArray;
begin
  Result := FALSE;

  if OrgPic.PixelFormat = pf32Bit then begin

    RGBAOrg := OrgPic.Scanline[OrgPic.Height-1];
    RGBANew := NewPic.Scanline[OrgPic.Height-1];
    RGBADif := BDif.Scanline[OrgPic.Height-1];

    z := OrgPic.Width * OrgPic.Height;

    for x := 0 to z-1 do begin
      if Integer (RGBAOrg^[x]) <> Integer (RGBANew^[x]) then begin
        Result := True;
        RGBADif^[x].rgbBlue := 0;
        RGBADif^[x].rgbred := 0;
        RGBADif^[x].rgbgreen := 0;
        RGBADif^[x].rgbReserved := 255;
      end;
    end;
  end;

  if OrgPic.PixelFormat = pf24Bit then begin
    for y := 0 to OrgPic.Height - 1 do begin
      LineOrg := OrgPic.ScanLine[y];
      LineNew := NewPic.ScanLine[y];
      LineDif := BDif.ScanLine[y];

      for x := 0 to OrgPic.Width - 1 do begin
        if LineOrg[x] <> LineNew[x] then begin
          result:= True;
          //LineDif[x] := LineNew[x];

          LineDif[x][0] := AnsiChar (0);
          LineDif[x][1] := AnsiChar (0);
          LineDif[x][2] := AnsiChar (0);
        end;
      end;
    end;
  end;
end;
Wobei ich die 32-Bit-Variante nicht getestet habe.

Die Funktion setzt voraus, dass alle Bitmaps die gleiche Größe und das gleiche Pixelformat haben, musst Du also vorher abprüfen. In Orgpic muss das Originalbild geladen werden, in NewPic das, welches das Originalbild plus den überlagerten QR-code hat. In BDif erhältst Du den extrahierten QR-Code. Mein iPhone konnte den extrahierten QR-Code einlesen und richtig auswerten.

Aber die Funktion funktioniert nur, wenn Original-Bild und neues Bild sich wirklich nur durch den hinterlegten QR-Code unterscheiden. Wenn im neuen Bild alle Pixel verschoben sind (was bei Deinem Demo-Bild der Fall ist), funktioniert die Variante hier nicht.

33Olli33 26. Feb 2016 19:52

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Bitte um Entschuldigung, es war Stromausfall.

33Olli33 26. Feb 2016 19:54

AW: Zwei übereinander liegende Bilddateien trennen !!!
 
Habe auch ein Iphone5. Mit welchem App hast Du das auslesen können? Meine können das nicht lesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz