TImage im Vordergrund bei einer Farbe transparent machen
-
Hallo,
folgendes: Es gibt einen Hintergrund der aus TImages besteht und ein TImage das darüber liegt, ich wollte nun Fragen ob es möglich ist das eine bestimmte Farbe in dem TImage, welches im Vordergrund ist, transparent zu machen, so das man an Stellen mit dieser Farbe die TImages im Hintergrund sieht. Ich kenn nur die Möglichkeit bei der Form eine Farbe als "Transparenzfarbe" zu setzen, dann sieht man an diesen Stellen aber ja den Desktop oder was eben hinter der Form liegt..Im FAQ hab ich dazu nichts gesehn...
MFG
-
PlagueAngel schrieb:
Im FAQ hab ich dazu nichts gesehn...
aber vielleicht bringt ja die Suchfunktion was, z.B.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-233935-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-%2Atransparenz%2A.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-79574-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-%2Atransparenz%2A.html
-
Danke, hat ich vergessen...
Aber das Funktioniert auch nur bei bmps bei jpgs verschwindet das ganze Bild... wieso?
-
Hi,
BCB-Hilfe schrieb:
Hinweis:
Transparent wirkt sich nur dann aus, wenn in der Eigenschaft Picture ein TBitmap-Object enthalten istIn deinem Image ist eine JPG-Grafik, damit gehts also nicht direkt.
Holen wir also etwas weiter aus :void __fastcall TForm1::Button1Click(TObject *Sender) { String FileName = "6.jpg"; // Grafik einlesen/dekomprimieren TJPEGImage* jpimg = new TJPEGImage(); jpimg->CompressionQuality = 90; jpimg->Grayscale = false; jpimg->Performance = jpBestQuality; jpimg->ProgressiveDisplay = false; jpimg->ProgressiveEncoding = false; jpimg->Scale = jsFullSize; jpimg->Smoothing = true; jpimg->PixelFormat = TJPEGPixelFormat::jf24Bit; jpimg->LoadFromFile(FileName); // ZwischenBitmap Graphics::TBitmap* pBmp = new Graphics::TBitmap(); pBmp->SetSize(200, 200); pBmp->Assign(jpimg); Image2->Picture->Assign(pBmp); Image2->Picture->Bitmap->TransparentColor = Image2->Canvas->Pixels[0][0]; //aufräumen delete jpimg; delete pBmp; }
Transparente Farbe wechseln:
void __fastcall TForm1::Image2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Image2->Transparent = false; Image2->Picture->Bitmap->TransparentColor = Image2->Canvas->Pixels[X][Y]; Image2->Transparent = true; }
Eventuell Fehlerbehandlung einbauen. Was ich festgestellt habe, (wahrscheinlich) ändern sich durch die Komprimierung die Farbwerte
gering. Also was mal ein klares Rot mit RGB(255, 0, 0) war, ist im BMP ein RGB(254, 0, 0).
Aber damit kann man leben...edit: Was mir zu letzten einfällt, man könnte auch mit ScanLine pixelweise einlesen, dann hat man 1:1...
mfg
kpeter
-
Ok, Danke, es funktioniert erstmal, wenn auch (wie schon von dir genannt) teilweise nicht ganz sauber, aber werd das mit ScanLine dann noch ausprobieren.
-
Hallo kpeter,
Schönes Beispiel. Von den JPEG Optionen hab ich noch nichts gelesen, wären aber interessant. In der lokalen Hilfe des BCB2009 ist noch nicht einmal der Datentyp TJEPGImage erwähnt. Kann das sein?
Rudi
-
rudiM schrieb:
Kann das sein?
Irgendwie kam mal das BDS 2006 Turbo C++ auf meine Maschine, die Doku dort ist recht ausführlich.
mfg
kpeter