AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Das gleiche Bild in 576 Images laden!
Thema durchsuchen
Ansicht
Themen-Optionen

Das gleiche Bild in 576 Images laden!

Ein Thema von qb-tim · begonnen am 16. Apr 2006 · letzter Beitrag vom 22. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#1

Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 15:41
Hi,

ich programmiere gerade einen besonderen Editor. Dazu habe ich 4 Felder mit jeweils 12x12 Kästchen. 576 images.

Da sich im Editor jedes Kästchen einzeln durch anklicken ändern lässt kann ich sie nicht in einen größeren Image zusammenfassen.

Nun das große Problem: Beim Start des Editors - OnActivate - möchte ich in jedes Kästchen (Image) das gleiche Bild (z.Bsp: 'C:\Documents and Settings\Tim\My Documents\My Pictures\bild1.bmp) laden.

576 mal
Image1.Picture.LoadFromFile(string) // string ist eine Variable zu schreiben ist ziehmlich

Geht's nicht leichter?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 15:46
du könntest nachdem du im ersten Image dein Bild geladen hast das Bild in die anderem mit "Assigen" kopieren. Ich würde dir allerdings empfehlen das ganze noch zu überarbeiten. Auch wenn du mehre kleine Bilder hast und diese Ändern willst kannst du ein ganzes Bild nehmen. Du kannst dann auf dem großen Bild kleinere Teile mit Copyrect von einem Temppild aus erneuern.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 15:52
Hi!

Ich glaube, was dir helfen könnte, ist eine for-Schleife in Verbindung mit FindComponent.
Such mal hier, da findest du sicher was.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 16:00
Hallo,

ich kann mir nicht vorstellen, daß Du 576 einzelne TImage-Komponenten auf dem Formular abgelegt hat, Du wirst sie wohl zur Laufzeit erstellen. Warum deklarierst Du nicht ein Array und speicherst dort die Referenzen auf die TImage-Komponenten? Dann kannst Du mit 3 FOR-Schleifen alle Images direkt erreichen:

Delphi-Quellcode:
var i, j, k : Integer;
    Bilder : array [1..4, 1..12, 1..12] of TImage;

begin
  // Erzeugen der TImage-Komponenten
  for i := 1 to 4 do
    for j := 1 to 12 do
      for k := 1 to 12 do
      begin
        Bilder[i, j, k] := TImage.Create(Self);
        :
      end;
  :
  // Laden der Bilder
  for i := 1 to 4 do
    for j := 1 to 12 do
      for k := 1 to 12 do
        Bilder[i, j, k].LoadFromFile ('Bild1.bmp');
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#5

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 18:08
@hawkeye219



Danke - das ist genau was ich brauche

  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 18:16
Du brauchst aber nicht über 500 TImages. Das ganze lässt sich auch wesentlich eleganter und ressourcensparender programmieren.

Du sagst, du willst auf jedes Feld klicken können und dann soll ja irgendwas passieren. Du könntest ein einziges TImage-Objekt nehmen und dann anhand der Mausposition doch abfragen auf welchem "Feld" du dich gerade befindest.
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 20:49
Ach ja übrigens - jedes mal loadfromfile könnte auch leicht ressourcen fressen - lieber einmal laden und dann per Delphi-Referenz durchsuchenassign kopieren.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Das gleiche Bild in 576 Images laden!

  Alt 16. Apr 2006, 21:02
So solltest du es besser machen:

Erst lädtst du jede Datei in eine tbitmap-Variable. Diese Bitmaps fasst du in einem Array zusammen:

Delphi-Quellcode:
var
  bilder:array[0..1000] of tbitmap;
  i:integer;
const
  dateinamen:array[0..1000] of string = ('c:\bildnummer1.bmp','c:\bildnummer2.bmp',...);
begin
  for i:=0 to 1000 do begin
    bilder[i]:=tbitmap.create;
    bilder[i].loadfromfile(dateinamen[i]);
  end;
end;
Dann machst du EIN TImage.

Für dieses TImage schreibst du eine Procedure DISPLAY. Die rufst du auf wenn ein Feld verändert wurde oder die Anzeige aktualisiert werden soll:

Delphi-Quellcode:
procedure DISPLAY;
var
  i,j:integer;
  newdisplay:tbitmap;
begin
  newdisplay:=tbitmap.create;

  jetzt mit i und j alle 500 Felder aus dem Bitmap-Array auf das Image kopieren

  image1.canvas.draw(newdisplay); //Auf das Image die Zusammenstellung des neuen Displays kopieren; Image1.Doublebuffered sollte true sein um flackern zu vermeiden
  newdisplay.free;
end;
Wenn auf das Image geklickt wurde kannst du ja aus den Mauskoordinaten genau den Klickpunkt berechnen:
Delphi-Quellcode:
prcedure tform1.image1click(x,y:integer);
var
  KLICKFELDX,KLICKFELDY:integer;
begin
  klickfeldx:=x div 12;
  klickfeldy:=y div 12; //eventuell muss dies noch verändert werden, da jetzt der niedrigstmögliche Wert eine 0 ist -> +1 dazuschreiben wenn du den Wert erhöhen willst. Außerdem könnte es sein dass der Wert nicht von den Koordinaten des Image abhängt sondern von denen der Form, dann musst du von x noch image1.left und von y image1.top abziehen (das sieht dann so aus: klickfeldx:=(x-image1.left) div 12;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Das gleiche Bild in 576 Images laden!

  Alt 20. Apr 2006, 15:07
Abgesehen davon, dass es genau das ist, was ich 2 Posts darüber gesagt habe:

- Was soll der konstante Array? Soll er da nun 576mal den bekloppten Dateinamen reinschreiben? OK, wenn man langeweile hat...

- Somit brauch er auch nicht 576mal ein Bitmap erzeugen, was ja nun absolut unperfomant ist und unmengen an unnötigen Speicher verbraucht. Er brauch nur das Bild EINMAL laden und kann damit dann EIN TBitmap an den entsprechenden Stellen ausfüllen.

- Um die Koordinaten zu erhalten, wo man auf das Image geklickt hat, benutzt man nicht den Code von dir. Dafür gibt es ClientToScreen und ScreenToClient.
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#10

Re: Das gleiche Bild in 576 Images laden!

  Alt 22. Apr 2006, 17:01
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
var a, x, y : Integer;
    Bild : array [1..4, 1..12, 1..12] of TImage;
begin
  for a := 1 to 4 do
    for x := 1 to 12 do
      for y := 1 to 12 do
      begin
        Bild[a, x, y] := TImage.Create(Self);
        Bild[a, x, y].Height := 15;
        Bild[a, x, y].Width := 15;
        if a = 1 then
        begin
          Bild[a, x, y].Top := y * 15 + 1;
          Bild[a, x, y].Left := x * 15 + 1;
        end;
        if a = 2 then
        begin
          Bild[a, x, y].Top := y * 15 + 1 + 195;
          Bild[a, x, y].Left := x * 15 + 1;
        end;
        if a = 3 then
        begin
          Bild[a, x, y].Top := y * 15 + 1;
          Bild[a, x, y].Left := x * 15 + 1 + 195;
        end;
        if a = 4 then
        begin
          Bild[a, x, y].Top := y * 15 + 1 + 195;
          Bild[a, x, y].Left := x * 15 + 1 + 195;
        end;
      end;
  Bild[1, 1, 1].Picture.LoadFromFile('C:\Program Files\Borland\Delphi6\Projects\MazeMaker\images\none.bmp');
  for a := 2 to 4 do
    for x := 1 to 12 do
      for y := 1 to 12 do
        Bild[a, x, y].Picture.Assign(Bild[1, 1, 1].Picture);
  a := 1;
  for x := 2 to 12 do
    for y := 1 to 12 do
      Bild[a, x, y].Picture.Assign(Bild[1, 1, 1].Picture);
  x := 1;
  for y := 2 to 12 do
    Bild[a, x, y].Picture.Assign(Bild[1, 1, 1].Picture);
end;
Hm

Ich sehe da gar keine Bilder!



Was ist da falsch?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:59 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