PNG benutzen



  • audacia schrieb:

    Dann instantiiere man die Komponenten im Code

    Wie meinst du das?!

    audacia schrieb:

    oder man erwerbe eine Vollversion.

    Ich bin ne arme Sau.



  • Hallo

    Im Quellcode direkt Instanzen erstellen

    TPNG* png = new TPNG();
    ...
    delete png;
    

    bis bald
    akari



  • Und wie mach ich das wenn der DelphiCode nicht verwendet werden kann?!



  • Kann ich auch die TImage Componente aus der Testversion vom RAD Studio in den Turbo C++ Explorer reinbekommen? Die kann ja PNGs..



  • No-One schrieb:

    Und wie mach ich das wenn der DelphiCode nicht verwendet werden kann?!

    Das kann er.

    No-One schrieb:

    Kann ich auch die TImage Componente aus der Testversion vom RAD Studio in den Turbo C++ Explorer reinbekommen?

    Das wäre nicht nur technisch etwas außerhalb deines Machbarkeitsradius, sondern noch dazu illegal.



  • Hi,

    in der Free-Download-Version des Turbo C++ 2006 kannst du keine Dritt-Komponenten und keine IDE-Addins installieren.
    Insofern kannst du pngdelphi wohl beiseite legen.

    No-One schrieb:

    Kann ich auch die TImage Componente aus der Testversion vom RAD Studio in den Turbo C++ Explorer reinbekommen? Die kann ja PNGs..

    .

    Das TImage ist zwar keine Drittkomponente, trotzdem würd ich den Gedanken schnell vergessen...
    Zum Einlesen und Darstellen einer PNG-Datei gibts auch noch andere Wege...

    mfg
    kpeter



  • kpeter schrieb:

    in der Free-Download-Version des Turbo C++ 2006 kannst du keine Dritt-Komponenten und keine IDE-Addins installieren.

    Es ist aber durchaus möglich, 3rd-Party-Komponenten zu benutzen - einfach zum Projekt hinzufügen und im Code instantiieren.



  • audacia schrieb:

    Es ist aber durchaus möglich, 3rd-Party-Komponenten zu benutzen - einfach zum Projekt hinzufügen und im Code instantiieren.

    Ja.

    Aber im vorliegende Fall mit der pngdelphi-Kompo und den *.obj-Dateien, die etwas an sich haben, was dem Turbo missfällt 😉 ,
    kommt eben nur diese lapidare Message(s.o.).

    mfg
    kpeter



  • Das würde ich nicht über 3rd Party Komponenten machen sondern mich einfach mal mit GDI+ beschäftigen.



  • Ich habe PngDelphi eben mal mit Turbo C++ Explorer ausprobiert, und es funktioniert auf Anhieb.

    GDI+ wäre natürlich auch eine Option.



  • audacia schrieb:

    Ich habe PngDelphi eben mal mit Turbo C++ Explorer ausprobiert, und es funktioniert auf Anhieb.

    Mit welcher Version ?



  • Die oben verlinkte.



  • Könntest d umir vllt. sagen wie ich das Teil verwenden muss ? 🙂



  • Könnte jemand so liebenswürdig sein und einem vollDAU sagen wie das funktioeren könnte oder wie ichs anders hinbekomm?



  • Hi,

    Wenn ich mich nicht irre, war eine Installationsanleitung im Paket (PngDelphi.chm - Installing the component).

    mfg
    kpeter



  • Schon aber da steht nur wie ich es als Komponente in der IDE installiere aber diesen Weg kann ich im Turbo C++ ja nicht gehn..



  • No-One schrieb:

    Schon aber da steht nur wie ich es als Komponente in der IDE installiere aber diesen Weg kann ich im Turbo C++ ja nicht gehn..

    Den anderen Weg muss jemand anders zeigen; frag öfters mal nach 😃

    Nimm w.o. vorgeschlagen die GDI+. Hier das simpelste, Code Einbinden in die Paint-Methode.
    Hab hier als Anzeige-DC ein TPanel genommen.

    Gdiplus::Bitmap *pBitmap;
       pBitmap = Gdiplus::Bitmap::FromFile(L"pngtest.png");
    
       if( pBitmap ) {
          HDC hdc = GetDC(Panel1->Handle);
          Gdiplus::Graphics graphics(hdc);
          graphics.DrawImage(pBitmap, Gdiplus::PointF(0.0f, 0.0f));
       }
       delete pBitmap;
    

    Die Gdiplus.lib dem Projekt hinzufügen. Dazu noch das GDI+ Startup:

    //---------------------------------------------------------------------------
    #define STRICT  // erforderlich wegen Mehrdeutigkeiten
    
    #include <vcl.h>
    #pragma hdrstop
    #include <gdiplus.h>
    
    #include "main_png.h"
    using namespace Gdiplus;
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
       Gdiplus::GdiplusStartupInput startupInput;
       Gdiplus::GdiplusStartup(&token, &startupInput, NULL);
    }
    //---------------------------------------------------------------------------
    
    _fastcall TForm1::~TForm1(void)
    {
       Gdiplus::GdiplusShutdown(token);
    }
    

    Mit der libpng hast du eine weitere Möglichkeit, s. hier http://www.libpng.org/pub/png/libpng.html

    mfg
    kpeter



  • Na immerhin geht das! 😉
    Vielen lieben Dank! Werd wohl vorerst damit arbeiten.

    MFG



  • Kann mir jemand sagen warum bei der GDI+ Variante an manchen Pcs die Transparenz nicht geht? Das PNG wird viereckig und der eigentliche transparente Teil Weiß..



  • No-One schrieb:

    Das PNG wird viereckig...

    quadratisch ? 😕

    Probier mal die Funktion bei den "manchen Pcs" aus:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       Gdiplus::Graphics graphics(Image1->Canvas->Handle); //Handle to the device context
       //Load the image from a file
       Gdiplus::Image image(L"example01.gif");
    
       // Create an ImageAttributes object and set its color matrix.
       Gdiplus::ImageAttributes imageAtt;
       Gdiplus::ColorMatrix cm = 
       {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
        0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
        0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
        0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
    
       cm.m[3][3]+=0.01f; //transparency
    
       imageAtt.SetColorMatrix(&cm, Gdiplus::ColorMatrixFlagsDefault,
    	Gdiplus::ColorAdjustTypeBitmap);
    
       graphics.DrawImage(&image,
                       Gdiplus::Rect(0, 0, image.GetWidth(), image.GetHeight()),
                       0,
                       0,
                       image.GetWidth(),
                       image.GetHeight(),
                       Gdiplus::UnitPixel,
    		   &imageAtt);
    }
    

Anmelden zum Antworten