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.PNGUnd 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.