PNG benutzen
-
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); }
-
kpeter schrieb:
No-One schrieb:
Das PNG wird viereckig...
quadratisch ?
ja
Also wenn man ein Kreis hatte dann ist da eben ein Kreis auf einem Weißen Quadrat, weil er das nicht Transparent macht
Ich probier dein Code jetzt mal aus
-
Hmm das ändert nichts macht nur eben das Bild selber transparenter..
also mal mit einem Testpng.. so solls aussehn:
http://img185.imageshack.us/img185/6862/sosolls.png
und so siehts auf manchen pcs aus:
http://img7.imageshack.us/img7/7791/gehtnix1.jpg
-
Liegts vllt auch nicht am PNG sondern an der Form die ic hRosa gemacht hab und dann Rosa als TransparentColor genommen hab und die Form so transparent gemacht hab, den wie mir grad auffälit geht das Bild eigentlich nicht bis zum Button...
-
Ok es leigt definitiv am PNG wenn ich das Bild 2mal hintereinander verschoben auf die Form mach dann ist das untere von dme weusen Quadrat des oberen bedeckt, wleches genausogroß ist wie das TImage.
-
Ok so wies aussieht umgeh ich das Problem indem ich Visual C++ verwende
-
(Ok Microsoft Forms Anwendungen sind auch blöd)
Könnte vllt. jemand so unglaublic hnett sein und mir ein Beispielcode geben wie ich mit libpng ein PNG in ein TImage lade?
Und wie bekomm ich eine *.lib Datei die Broland annimmt? Wenn ich die, die ich in dem Ordner von pnglib ( den ich da rutnergeladne hab) hab, nehm brignt der Linker einen Fehler wengen OMF konvertierung oder was auc himmer, wenn ich die dll versuch mit coff2omf.exe zu konvertierne brignt der Linker viele Fehler wegen externen Verweisne also passt die lib nichtmehr, muss ich die irgendwie anders konvertieren oder sosntwas machen?wär nett wenn jemand antwortne würde...
-
Hi,
im Archiv lpng1240.zip befindet sich ein Ordner cbuilder5 mit dem Projekt libpng.
Das will die zlib.lib, die du besorgen/erstellen musst oder hast.
Nach Erstellen des Projektes hast du die libpng.lib sowie die DLL dazu. Das realisiere zuerst.Dann reden wir über mit libpng ein PNG in ein TImage.
mfg
kpeter
-
Das "Projekt" hab ich auch schon gesehn aber ich hab ja mal wieder nur "Turbo C++ Explorer 2006"(in der kostenlosen Version) Und der sagt das es eine Projektdatei ist und öffnet sie auch, jedoch nur als Textdatei und nicht als Projekt.
-
Lässt sich mit dem Turbo C++ Explorer 2006 erstellen.