Bilder nebeneinander
-
Hi!
wie kann ich in eine TBitmap das geladene bild nebeneinnader reihen (tile)?
Wie mans mitn Hintergrundbild aufn desktop machn kann
(Bildanzeige->Nebeneinander)?thx
scops
-
Bitte etwas genauer erläutern, was für Bilder du wo genau anzeigen willst.
-
angenommen ich habe ein bild... 48x48 pixel und eine fläche mit min 300x200 pixel die sich aber in der größe verändern kann. nun möchte ich das bild als hintergrundbild der fläche kacheln.
ok?
cya
scops
-
achja;
die fläche kann sowohl ein Panel als auch eine form seincya
scops
-
1. Lade Dein Bild in ein Bitmap!
2. Rechne Flachenbreite / Bitmap- Breite
3. Rechne Flachenhoehe / Bitmap- HoeheZwei Schleifen schachteln (wie oft nebeneinander / Wie oft Uebereinander.
-- in Schleife mit Zeichenflaeche->Draw(....) an richtige Position zeichnen!Voila!
PS: Mist, zu langsam.
Zeichenflaeche == Form->Canvas
[ Dieser Beitrag wurde am 13.03.2003 um 13:04 Uhr von DerAltenburger editiert. ]
[ Dieser Beitrag wurde am 13.03.2003 um 13:06 Uhr von DerAltenburger editiert. ]
-
öhm das mitn berechnen is klar... nur das mit an die position zeichen... ehm könntest du mir mitn bisl code auf die sprünge helfen...?
[ Dieser Beitrag wurde am 13.03.2003 um 13:10 Uhr von scops editiert. ]
-
Sicher doch:
Das Bild ist in TBitmap BM geladen!!!
int Nx,Ny; Nx=Form1->ClientWidth / BM->Width; Ny=Form1->ClientHeight / BM->Height; for (int x=0;x<Nx;x++) { for (int y=0;y<Ny;y++) { Form1->Canvas->Draw(x * BM->Width,y * BM->Height,BM); } }
[ Dieser Beitrag wurde am 13.03.2003 um 13:16 Uhr von DerAltenburger editiert. ]
-
wenn ich das über deinen code schreib... naja dann hab i kein bitmap im fenster....:
Graphics::TBitmap *BM = new Graphics::TBitmap;
BM->LoadFromFile("BM.bmp");???
[ Dieser Beitrag wurde am 13.03.2003 um 13:24 Uhr von scops editiert. ]
-
Deine zwei Zeilen muessen VOR Bedrechnung Nx, Ny stehen!
Existiert eine datei "BM.bmp" im akt. Ordner???
Du musst einen gueltigen dateinamen angeben! :p
Nach der Schleie :
delet BM; // nicht vergessen!!!
[ Dieser Beitrag wurde am 13.03.2003 um 13:28 Uhr von DerAltenburger editiert. ]
-
jep BM.bmp gibts (sonst streikts ja beim exe aufruf)
der code:int Nx,Ny; Graphics::TBitmap *BM = new Graphics::TBitmap; BM->LoadFromFile("BM.bmp"); Nx=Form1->ClientWidth / BM->Width; Ny=Form1->ClientHeight / BM->Height; for (int x=0;x<Nx;x++) { for (int y=0;y<Ny;y++) { Form1->Canvas->Draw(x * BM->Width,y * BM->Height,BM); } } delete BM;
-
Wo rufst Du das ganze auf???
Das Laden sollte in OnCreate der Form
Das Deleten in OnDestroyDer Rest sollte in OnPaint Deiner Form!!!
BM muss 'ne Variable der Form sein (privat)
[ Dieser Beitrag wurde am 13.03.2003 um 13:37 Uhr von DerAltenburger editiert. ]
-
ah ok *G* klar... war alles da drin:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
oki danke dir :))) ...
kann i das ganze au als background von nem popupmenü machn?
-
Ich glaub' nicht.
So geht's nur mit Objekten, die Dich an Canvas 'ranlassen (bzw. OnPaint). Macht aber PopupMenue nicht?
-
oki danke dir... hast mir sehr geholfen
-
ehm sorry aber hab das ganze mitn panel probiert...
geht nichtder meint zugriff nicht möglich?!
bzw. da gibts keine Canvas[ Dieser Beitrag wurde am 13.03.2003 um 14:02 Uhr von scops editiert. ]
-
Anm.: Das Laden von Files klappt erst im OnShow zuverlässig. Vor allem, wenn auf Doppelklick ein File geöffnet werden soll.
Das Panel kann das Bild nicht aufnehmen? - Hab damit noch nicht gearbeitet. Versuch mal, ob die Operation im OnPaint der Form gelingt. In der Form selbst klappt es in dem Ereignis auf jeden Fall.
<edit>Ich meide das OnCreate (obwohl es oft in den Beispielen genutzt wird) und verwende lieber den Constructor. Ist vielleicht Ansichtssache.</edit>
-
Gibt es, ist aber etwas versteckt.
Schau mal inner Hilfe unter B *junixnachmach*
.
-
Die Action geht auch via PopuMenuItem. Verweis in dessen Click-Ereignis auf FormPaint(Sender).
Pack die Routine dort rein oder verweis auf eine weitere Function. Damit nicht bei jedem OnPaint-Ereignis neu gekachelt wird, setz eine Bedingung:
if (Sender == [PopupMenuItem.Name])