Bildausschnitt im Bild suchen?



  • Nochmals Entschuldigung für das Thread-Hijacking, also von mir aus kanns jetzt gerne mit dem Originalthema weitergehen,



  • Danke euch für die antworten.

    audacia schrieb:

    DocShoe schrieb:

    Warum programmierst du dann C++? Wenn du das in Delphi programmiert hast, dann kennst du ja sicherlich auch den Algorithmus, den du dabei benutzt hast, was hält dich davon ab, diesen dann auch in C++ umzusetzen? So schwierig ist das nun wirklich nicht...

    Überdies ist es vollkommen überflüssig. Erstelle ein Delphi-Unit, mit obiger Funktion, füge die Unit deinem C++Builder-Projekt hinzu, und schon kannst du die Funktion auch von C++ aus benutzen.

    Ich habe das jetzt so gemacht und die Unit2 mit eingebunden, nun bekomme ich diese fehlermeldung:

    [C++ Fehler] Unit1.cpp(82): E2268 Aufruf der undefinierten Funktion 'CheckBitmap'
    

    Danke schonmal.

    MfG



  • bruce85 schrieb:

    nun bekomme ich diese fehlermeldung:

    [C++ Fehler] Unit1.cpp(82): E2268 Aufruf der undefinierten Funktion 'CheckBitmap'
    

    Na in den Header rein damit (mit der Deklaration)...



  • Ja, das hatte ich ja erst deklariert und dann bekam ich das hier:

    [Linker Fehler] Unresolved external 'TForm1::CheckBitmap(Graphics::TBitmap *, Graphics::TBitmap *)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\NEUER ORDNER\UNIT1.OBJ
    

    Ich habs in Header Datei von Unit1 so deklariert:

    public:		// Anwender-Deklarationen
    	int CheckBitmap(Graphics::TBitmap *tempBMP,Graphics::TBitmap *tempBMP2);
    

    Hab ich irgendwas falsch gemacht?

    MfG



  • Deine Funktion gibt doch einen bool zurück, keinen int. ( Wenn dus nicht geändert hast)
    Du musst in deinem Fall die Unit2.cpp zum Projekt hinzufügen.



  • bruce85 schrieb:

    Hab ich irgendwas falsch gemacht?

    Ja. Du sollst es nicht selbst deklarieren, sondern den Header einbinden, den der Delphi-Compiler dir generiert.



  • Ja, ich hab ja die Unit2.Pas dem Projekt hinzugefügt, das war das erste was ich gemacht habe, aber er sagt mir das diese Funktion dann undefiniert ist, obwohl ich diese Unit auch im Hauptformular(Quelltext) includiert habe:

    #include "Unit1.h"
    #include "Unit2.hpp"
    

    Irgendwas mache ich falsch. 🙄

    MfG



  • Wie genau sieht denn die Delphi-Unit aus?



  • audacia schrieb:

    Wie genau sieht denn die Delphi-Unit aus?

    unit Unit2;
    
    interface
    
    uses windows, SysUtils, Graphics;
    
    implementation
    
    function CheckBitmap(const Main: TBitmap; const Check: TBitmap): Boolean;
    var 
      p1: PByteArray;
      p2: PByteArray; 
      x: Integer; 
      y: Integer; 
      i: Integer; 
      pfm: Integer; //Pixelformatmodificator 
    const 
      PixelFormatValues : array[TPixelformat] of Integer = (0, 0, 0, 8, 0, 16, 24, 32, 0); 
    begin 
      Result := false; 
      Assert(Main.PixelFormat in [pf8Bit, pf16Bit, pf24Bit, pf32Bit]); 
      Assert(Check.PixelFormat in [pf8Bit, pf16Bit, pf24Bit, pf32Bit]); 
      Assert(Main.PixelFormat = Check.PixelFormat); 
      pfm := PixelFormatValues[Main.PixelFormat] div 8; 
      p2 := Check.ScanLine[0]; 
      for y := 0 to Main.Height-1 do 
        begin 
        p1 := Main.ScanLine[y]; 
        for x:= 0 to Main.Width-1 do 
          begin 
          if CompareMem(p1, p2, pfm) then 
            for i:=0 to Check.Height-1 do 
              if ((x + Check.Width) <= Main.Width) and 
                 ((y + Check.Height) <= Main.Height) then 
                begin 
                p1 := Main.ScanLine[y+i]; 
                Inc(PByte(p1), x * pfm); 
                p2 := Check.ScanLine[i]; 
                if not CompareMem(p1, p2, Check.Width * pfm) then 
                  Break 
                else 
                  if i = Check.Height-1 then 
                    begin 
                    Result := true; 
                    Exit; 
                    end; 
                end; 
          Inc(PByte(p1), pfm); 
          end; 
        end; 
    end;
    
    end.
    

    Die Unit2 von Delphi habe ich dem Projekt in C++ Builder hinzugefügt:
    http://62.75.204.158/upload/getimg.php?img=JLwXyeGPk.PNG

    Und hier der Quellcode von meiner Hauptformular:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.hpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      CheckBitmap(Image1->Picture->Bitmap,Image2->Picture->Bitmap);
    }
    //---------------------------------------------------------------------------
    

    Danke schonmal.

    MfG



  • Eventuell magst du nocheinmal nachschauen, wozu noch gleich die interface -Sektion diente.


Anmelden zum Antworten