AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild verschieben - Komponente belassen

Bild verschieben - Komponente belassen

Ein Thema von Flo.Hoe · begonnen am 26. Mär 2007 · letzter Beitrag vom 26. Mär 2007
Antwort Antwort
Flo.Hoe

Registriert seit: 28. Sep 2006
Ort: Berlin
73 Beiträge
 
Turbo C++
 
#1

Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 15:05
Wie ist es möglich, die Position einer Bitmap auf einem Image zu verändern, ohne aber die Komponente selbst zu verschieben?
Florian
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 15:09
Ja, natürlich ist das möglich.


Nur nicht so auf die Schnelle.

Den Bildteil den du verschieben willst musst du in ein temp. Bitmap kopieren.
Dann kannst du diesen an einer Pos. deiner Wahl auf das Hauptbitmap kopieren.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Flo.Hoe

Registriert seit: 28. Sep 2006
Ort: Berlin
73 Beiträge
 
Turbo C++
 
#3

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 15:48
Das wäre dann wohl folgendes:

Delphi-Quellcode:
procedure TForm1.verschieben;
var BildTemp: TBitmap;
begin
i:=i+1;
BildTemp:=image1.Picture.Bitmap;

//image1.Picture.Bitmap wird gelöscht
//BildTemp wird auf Position (i,0) gesetzt
end;
Aber wie erlange ich Zugriff auf die Position?
Florian
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 16:04
Einfach neu reinzeichnen:
Image1.CopyRect(Rect(x,y,x+BildTemp.Width,y+BildTemp.Heigth),BildTemp.Canvas,BildTemp.Canvas.ClipRect); Gruß, Hanno
Hanno Günther
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 16:15
Zitat von Flo.Hoe:
Das wäre dann wohl folgendes:

Code:
procedure TForm1.verschieben;
var BildTemp: TBitmap;
begin
i:=i+1;
[color=#ff0000][b]BildTemp:=image1.Picture.Bitmap;[/b][/color]

//image1.Picture.Bitmap wird gelöscht
//BildTemp wird auf Position (i,0) gesetzt
end;
Autsch, nein. Ein Bitmap muss vorher Erstellt werden. Bei der Imagekompo macht dir das die VCL.

Also so:

BildTemp := TBitmap.Create; // ein neues leeres Bitmap (Object) erzeugen Delphi-Referenz durchsuchen TBitmap
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Flo.Hoe

Registriert seit: 28. Sep 2006
Ort: Berlin
73 Beiträge
 
Turbo C++
 
#6

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 16:45
Zusammenfassend sieht das dann so aus:
Delphi-Quellcode:
procedure TForm1.verschieben;
var BildTemp: TBitmap;
begin
BildTemp:=Tbitmap.Create;
BildTemp:=image1.Picture.Bitmap;
//image1.Picture.Bitmap wird gelöscht
image1.Picture.Bitmap.Canvas.CopyRect(rect(100,100,Bildtemp.Width+100,BildTemp.Height+100),BildTemp.Canvas,BildTemp.Canvas.ClipRect);
end;
Beim Aufruf dieser Prozedur passiert rein gar nichts.
Aber eigentlich müsste es doch funktionieren oder?
Florian
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 16:50
Du hast Width und Heigth vom Bitmap BildTemp noch nicht eingestellt.

Willst du das gesamte Image verschieben, oder nur ein Teil davon?
Hanno Günther
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 16:54
ein ganz böser Fehler bzw. speicherleck
Delphi-Quellcode:
//ein TBitmap wird erstellt und BildTemp zeigt auf diesen Speicher
BildTemp:=Tbitmap.Create;
//BildTemp zeigt danach auf die Stelle Image1.Picture.Bitmap und nicht mehr auf die Stelle wo das neu erstellte Bitmap ist
BildTemp:=image1.Picture.Bitmap;
wenn dann so
Delphi-Quellcode:
BildTemp:=Tbitmap.Create;
BildTemp.Assign(image1.Picture.Bitmap);
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Bild verschieben - Komponente belassen

  Alt 26. Mär 2007, 17:23
Wenn nur ein Teil verschoben werden soll:

Delphi-Quellcode:
procedure TForm1.Verschieben;
var BildTemp: TBitmap;
begin
BildTemp:=TBitmap.Create;
BildTemp.Width:=DieBitmapBreite;
BildTemp.Heigth:=DieBitmapHoehe;


//Bitmap wird aus Image1.Canvas aus der Position (i,0) in BildTemp hineinkopiert
BildTemp.CopyRect(Rect(0,0,BildTemp.Width,BildTemp.Heigth),Image1.Canvas,Rect(i,0,i+BildTemp.Width,BildTemp.Heigth));

//Image1.Canvas wird mit einem Rectangle übermalt
Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,Image1.Heigth+1);

inc(i);

//BildTemp wird auf Position (i,0) gesetzt
Image1.CopyRect(Rect(i,0,i+BildTemp.Width,BildTemp.Heigth),BildTemp.Canvas,BildTemp.Canvas.ClipRect);
end;
ansonsten:


Delphi-Quellcode:
procedure TForm1.Verschieben;
var BildTemp: TBitmap;
begin
BildTemp:=TBitmap.Create;

//Image1 wird in Bitmap kopiert
BildTemp.Assign(Image1.Picture.Bitmap);

//Image1.Canvas wird mit einem Rectangle übermalt
Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,Image1.Heigth+1);

inc(i);

//BildTemp wird auf Position (i,0) gesetzt
Image1.CopyRect(Rect(i,0,i+BildTemp.Width,BildTemp.Heigth),BildTemp.Canvas,BildTemp.Canvas.ClipRect);
end;
Hanno Günther
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz