canvas->Pixels[][] ignoriert Stretch=true eines anderen Images
-
hi!
Ich habe <noch> ein Problem:
Ich experimentiere grade mit Grafikfunktionen. Z.B. versuche ich ein beliebieges Bitmap so umzuändern, dass es so aussieht als sei z.B. eine Blaue transparente Folie drübergelegt.
Jetzt möchte ich eine Art transparentes Menü erstellen, dass über ein Bitmap gelegt, transparent wirkt. Dazu verwende ich folgenden Code:for (int i=0;i<BGImage->Width;i++) { for (int m=0;m<BGImage->Height;m++) { TransImage1->Canvas->Pixels[i][m]=BGImage->Canvas->Pixels[i+Left-BGImage->Left][m+Top-BGImage->Top]+density; if (BGImage->Canvas->Pixels[i+Left-BGImage->Left][m+Top-BGImage->Top]+density>0x00FFFFFF){ TransImage1->Canvas->Pixels[i][m]=0x00FFFFFF;}; } }BGImage ist dabei das untergelegte Bitmap und TransImage ist das übergelegte Menü. Density bestimmt hierbei die farbliche Veränderung der Transparenz.
Das Problem dabei ist: Wenn ich beim BGImage stretch auf true stelle, dann wird das von der Eigenschaft Pixels des BGImage ignoriert, sprich, er ersetzt zwar weiterhin die Pixel des TransImage-Menüs, aber er tut so, als wenn BGImage nicht gestretcht wäre. D.h., das Bild von TransImage passt nicht mehr auf das Hintergrundbild von BGImage.
Kennt jemand vielleicht eine Möglichkeit, wie ich die Eigenschaft Pixels dazu bringe, auf das Stretch-attribute zu reagieren??
Was kann ich sonst noch verbessern?mfg
chris90
-
Hi!
Das einzige was mir spontan einfallen würde: Lass die Eigenschaft Stretch fallen und verwende stattdessen die Funktion
void __fastcall TCanvas::StretchDraw(const TRect &Rect, TGraphic* Graphic);
Damit kannst du dir dann dein Bild vergrößert zeichnen und damit dann über die Eigenschaften Pixels zugreifen...
tschüss
Robert
-
Ich denke, Du solltest bei TransImage1 stretch setzen!
-
vielen dank, eure antworten haben mir beide geholfen.
macht weiter so!!mfg,
chris90