Brauche Hilfe bei Projekt mit Bitmaps und Textout()



  • Hi zusammen ich bins wieder, ich bräuchte dringend helfen und wollte vl.t fragen ob mir einer helfen kann, denn ich habe mehrere Probleme, die ich leider rel. schnell lösen muss.
    Wer mir helfen kann sagt bitte bescheid ich kann den ganzen Auellcode und so schicken (aber versuche erstma meine Problem aufzulisten).

    Also: Ich möchte eine Programm erstellen, dass alle Bilder (jpg,bmp ect.) in einem bestimmten ordner nacheinander läd einen halbdurchsichtbaren text auf das Bild schreibt (auch mit transparenten hintergrund) und es wieder speichert.

    Meine Probleme sind:
    1. Die halbtransparente schrift und der Hintergrund
    2. Transparenz sollte stuffenbar eingestellt werden können.
    3. Ich kann mit TextOut keine jpgs bearbeiten (warum?) und wie schafffe ich das.

    So das war es hauptsächlich, aber diese Schrift macht mir viele probleme und komme damit garnicht klar.

    Ich würde mich riesig freuen wenn mir einer von euch helfen könnte und ich verstehe wenn ich zu hohe ansprüche (bezogen auf eure zeit) gestellt habe, aber mir ist das sehr wichtig.
    bye



  • Hallo Maxmann,

    aber sicher kann auch Dir irgendwie geholfen werden. Ich hoffe Dir ist noch zu helfen 😉 - ach, ich liebe Wortspiele.

    1. kopiere Dein (jpeg- ) Bild in ein Bitmap!!!
    auch bei GIF.
    2. erzeuge ein zweites TBitmap mit Groesse wie der Text braucht
    DADRIN schreibst Du den Text, NICHT im Originalbild!
    3. Diese (Text-) Bild kopierst Du PIXELWEISE - mit ScanLine - in das
    komplette Bitmap- Bild.
    Dabei kannst Du beliebig MISCHEN - Farbwerte von Bild und Farbwerte von
    Text- Bild in beliebigem Verhältnis.
    4. Das beschriftete Bitmap kopierst Du in Dein Original (jpeg)
    5. Das kannst Du Speichern. In jedem Dir verfügbarem Format.

    Für 3. kann ich Dir eine Routine mailen, die ein Bitmap als Wasserzeichen in ein anderes macht. Stufenlos steuerbar.



  • Vielen dank. Es wäre sehr nett wenn du mir die Routine senden könntest und mit dem Pixelweise kopieren, finde ich das was in der Borland-hilfe?



  • Boolean TForm::WaterMark(int Percent, double SizePercent)
    { int X,Y;
      Boolean Ready=false;
      double Zoom;
      TRect R;
      Boolean OnlyBright=Percent<0;
      Graphics::TBitmap *Src=new Graphics::TBitmap();
      Src->PixelFormat=pf24bit;
      try
      {
        Src->LoadFromResourceName((int)HInstance,"LOGO");
        Src->PixelFormat=pf24bit;
        R=Rect(0,0,Src->Width,Src->Height);
        Zoom=min(((double)Pic->Bitmap->Width / Src->Width),((double)Pic->Bitmap->Height / Src->Height)) * SizePercent;
        if (Zoom>1)
        { Src->Width*=Zoom;
          Src->Height*=Zoom;
          Src->Canvas->CopyRect(Rect(0,0,Src->Width,Src->Height),Src->Canvas,R);
        }
    
        PRGBTriple DstLine, SrcLine;
        for (Y=0;Y<Src->Height;Y++)
        {
          if (((Y + (Pic->Bitmap->Height - Src->Height) / 2)>0) &&
              ((Y + (Pic->Bitmap->Height - Src->Height) / 2)<Pic->Bitmap->Height))
          {
            SrcLine=(PRGBTriple)Src->ScanLine[Y];
            DstLine=(PRGBTriple)Pic->Bitmap->ScanLine[Y + (Pic->Bitmap->Height - Src->Height) / 2];
            for (X=0;X<Src->Width;X++)
            {
              if (((X + (Pic->Bitmap->Width - Src->Width) / 2)>0) &&
                  ((X + (Pic->Bitmap->Width - Src->Width) / 2)<Pic->Bitmap->Width))
              {
                if ((SrcLine[X].rgbtRed + SrcLine[X].rgbtGreen + SrcLine[X].rgbtBlue)>0)
                {
                  if (Percent>=0)
                  {
                    DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtRed=(SrcLine[X].rgbtRed * Percent) / 100 + (DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtRed * (100 - Percent)) / 100;
                    DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtGreen=(SrcLine[X].rgbtGreen * Percent) / 100 + (DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtGreen * (100 - Percent)) / 100;
                    DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtBlue=(SrcLine[X].rgbtBlue * Percent) / 100 + (DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtBlue * (100 - Percent)) / 100;
                  }
                  else
                  {
                    DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtRed=(DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtRed * (100 + Percent)) / 100;
                    DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtGreen=(DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtGreen * (100 + Percent)) / 100;
                    DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtBlue=(DstLine[X + (Pic->Bitmap->Width - Src->Width) / 2].rgbtBlue * (100 + Percent)) / 100;
                  }
                }
              }
            }
          }
        }
        Ready=true;
      }
      catch(...)
      {
      }
      delete Src;
      return Ready;
    }
    

    Pic ist das zu bearbeitende Zielbild in einem TPicture Member von Form
    Src ist das Bitmap für das Logo

    Das Logo ist als Resource im Programm
    Percent ist die Stärke des Effektes
    SizePercent skaliert das Logo zum Zielbild

    Der Returnwert sagt dem Huptmodul, ob das Wasserzeichen eingefügt werden konnte.



  • Sorry mir sind noch 2 Fragen aufgekommen.
    1.Wie schleuse ich das Logo als resource ein und wie benenn ich es richtig?
    2. Ich bekomme immer eine Fehlermeldung:"[C++ Error] Trans.cpp(93): E2316 'TForm1::WaterMark(int,double)' is not a member of 'TForm1'"

    und folgender auschnitt wird markiert:

    (1.Zeilen deines Codes)

    Boolean TForm1::WaterMark(int Percent, double SizePercent)
    {int X,Y; <- Zeile wird rot markiert
      Boolean Ready=false;
      double Zoom;
    

    Wäre sehr nett wenn du mir das noch sagen könnets ich verstehe es irendwie nicht.
    Danke trotzdem für deinen tollen Source.



  • 1. Scuhfunktion benutzen! Z.B.
    http://c-plusplus.net/forum/viewtopic-var-t-is-118096-and-highlight-is-*resource*.html

    2. Du musst die Funktion in Unit1.h als Member von Form1 deklarieren.



  • Danke, nächtes mal benutze ich erst die Suche oder siehe bei google. Aber ichhabe noch eine Frage die ich so nicht finden konnte, mit welclem Befehl soll ich die Funktion deklariern?
    danke schonma



  • welclem Befehl soll ich die Funktion deklariern?

    Mit deiner Tastatur und deiner Hand

    class TMain : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    .....
    private:
    Boolean WaterMark(int Percent, double SizePercent);
    public:		// Anwender-Deklarationen
    	__fastcall TMain(TComponent* Owner);
    };
    


  • Alles klar danke, sorry aber bin ziemlich neu in C++ und hab noch nicht so die Standards drauf (hab vorher immer mit Vb6 und.Net programiert dan kennt man soetwas überhaupt nicht)
    bye



  • Sorry ich hab noch ne kleine Frage. Hoffentlich nerv ich euch net so. Ich finde kein TPicture in der toolbar und mit einem Timage geht es nicht. Wie kann ich eines erstellen?
    bye



  • Maxmann schrieb:

    Ich finde kein TPicture in der toolbar

    Dann sieh doch mal in der Hilfe nach.



  • Habe ich schon da stehen nur die Funktionen und Properties.
    bye



  • Dann sieh dir die einzelnen Methoden und Eigenschaften an, studiere die dort gezeigten Beispiele und streng deinen Kopf ein mal ganz klein wenig an.



  • Maxmann schrieb:

    ...Timage geht es nicht...

    Wiso nicht? ast Du Dir mal TImage in der Hilfe angesehen? Nein? DANN MACH DAS MAL!!!

    In jedem TImage ist ein TPicture enthalten, und das hat ein TBitmap...

    Und die Tips der anderen NICHT vergessen. 😉



  • Danke frü den Tipp setze mich damit morgen mal intensiv auseinander.bye



  • So nach meiner Suche habe nun etwas gefunden, was die Lösung seien sollte jedoch verstehe ich es nicht.

    Specifies the image that appears on the image control.
    
    __property Graphics::TPicture* Picture = {read=FPicture, write=SetPicture};
    
    Description
    
    Use Picture to specify the image for the TImage component. Picture is a reference to a TPicture object. Use properties and methods of TPicture to specify a bitmap, drawing, or user-defined graphic to be displayed by the image control.
    
    Setting Picture at design time brings up the Picture Editor, which can be used to specify the file that contains the image.
    

    Könntet ihr mir vlt. sagen wofür die ganzen Variablen da oben im Source stehn bzw. wie ich das auf mich zuschneide?
    Wär echt nett
    thx



  • Man kann sich das Leben aber auch schwer machen:

    Nimm ein TToolBar Objekt in dein Formular auf

    Dann mal an irgendeiner Stelle ToolBar1-> eingeben; da wird was angezeigt. Boaaah Mensch da steht Images. Nun ToolBar1->Images-> eingeben. Weitere Methoden stehen zur Verfügung. Was die Methoden bedeuten steht dann in der Hilfe.

    Das gleiche geht mit TImage ->Picture ->Bitmap->LoadFromFile

    Ich weiss jetzt nicht so recht was du brauchst, da ich nicht so genau weiss, was du machen willst. Die Daten in der Zeile zeigen übrigens an wie die Eigenschaft implementiert ist. Eine Lesezugriff gibt die private Variable FPicture der Klasse zurück, ein Scheibzugriff ruft die Methode SetPicture der Klasse auf



  • Mein Problem ist, dsss mein Compiler sagt Bitmap wäre kein Member von meinem TImage.
    So ich habe alles getan was ich konnte aber die Fehlermeldung trott immernoch ein.
    Ich habe al alle aufgelistet.

    Build
      [C++ Error] Trans.cpp(98): E2268 Call to undefined function 'min'
      [C++ Error] Trans.cpp(98): E2316 'Bitmap' is not a member of 'TImage'
     //Diese Fehlermedlung kommt noch 22 weitere mal aber wollte nicht spamen.
      [C++ Warning] Trans.cpp(145): W8004 'OnlyBright' is assigned a value that is never used
    

    Hoffe ihr könnt mir sagen was ich falsch mache.



  • Was mich ärgert ist, wenn man etwas postet und es wird nicht gelesen 😡

    Hoffe ihr könnt mir sagen was ich falsch mache.

    Du liest die Beiträge nicht



  • Christian211 schrieb:

    Das gleiche geht mit TImage ->Picture ->Bitmap->LoadFromFile

    Hallo Maxmann, Bitmap ist auch kein Member von TImage, aber schau Dir das oben nochmal ganz genau an. Zu wem gehört Bitmap direkt?
    Und DER dann ist Member von TImage !


Anmelden zum Antworten