AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Imagelist und "Zentrieren"
Thema durchsuchen
Ansicht
Themen-Optionen

Imagelist und "Zentrieren"

Offene Frage von "dominikkv"
Ein Thema von dominikkv · begonnen am 18. Aug 2007 · letzter Beitrag vom 19. Aug 2007
Antwort Antwort
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Imagelist und "Zentrieren"

  Alt 18. Aug 2007, 18:24
Hi

Ich klicke zur Designtime doppelt auf meine ImageList und füge dann nen Image hinzu und wähle "Zentrieren" aus.
Nun habe ich die Bilder in eine DLL ausgelagert und füge sie nun zur Laufzeit über den Quelltext hinzu:
Delphi-Quellcode:
  
procedure ImageToBitmap(Img: TImage);
var
  Pic: TPicture;
begin
  Pic := TPicture.Create;
  try
    Pic.Assign(Img.Picture);
    Img.Picture.Bitmap.Assign(Pic.Graphic);
  finally
    FreeAndNil(Pic);
  end;
end;

procedure LoadImages;
var
  h :HINST;
  r :TResourceStream;
  j :TJpegImage;
  im: TImage;
  I: Integer;
  Namen: TStringList;
begin
  Namen := TStringList.Create;
  Namen.Add('bPlay');
  Namen.Add('bPause');

 [...]

  h := LoadLibrary('Bilder.dll');
  if h <> 0 then
  begin
    j := TJpegImage.Create;
    im := TImage.create(self);
    try
      for i := 0 to 9 do
      begin
        r := TResourceStream.Create(h, Namen[I], 'Jpeg');
        try
          j.LoadFromStream(r);
          Im.Picture.Assign(j);
          ImageToBitmap(Im);
          ImageList1.Add(im.Picture.Bitmap, im.Picture.Bitmap);
        finally
          r.Free;
        end;
      end;
    finally
      j.Free;
      im.free;
    end;
  end;
  FreeLibrary(h);
  Namen.free;
end;
Die Bilder werden später dann in ein Image geladen.
Nur leider werden sie dann nicht mehr zentriert...

Das Resultat hab ich mal diesem Post angefügt.

Meine Frage: wie schaffe ich es das die Bilder zentriert in die ImageList kommen?

mfg.Dominik
Miniaturansicht angehängter Grafiken
richtig_128.jpg   falsch_460.jpg  
Dominik
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Imagelist und "Zentrieren"

  Alt 19. Aug 2007, 17:12
Zitat von dominikkv:
Die Bilder werden später dann in ein Image geladen.
Nur leider werden sie dann nicht mehr zentriert...


Meine Frage: wie schaffe ich es das die Bilder zentriert in die ImageList kommen?
Hi,
es ist ehrlich gesagt nicht die Aufgabe einer Imagelist Bilder zu zentrieren. Wie der Name eigentlich schon sagt handelt es sich dabei lediglich um eine Liste von Bildern. Eine Image Komponente hingegen bietet die Möglichkeit ein Bild zentriert anzuzeigen (gibt eine entsprechend benannte Eigenschaft).
Besser wäre es imho aber, wenn Du die Bilder gleich in richtiger Größe ablegst, bzw. Dir nur den relevanten Ausschnitt zurückgeben lässt. In der Suche findest Du schnell, wie man einen Ausschnitt des Bildes kopiert. Statt das Bild zu zentrieren kannst Du auch einfach die Mitte des Bildes (vertikal und horizontal) bestimmen. Die Hälfte der Höhe und Breite Deines Zielbildes kannst Du dann von den Koordinaten jeweils abziehen und eben die benötigte Höhe und Breite (von dem so berechnenten Orio) kopieren. Entspricht eben dem Kopieren des zentralen Bereichs und damit ist das Resultat das, was Deinem zentrierten Bild entspricht.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Imagelist und "Zentrieren"

  Alt 19. Aug 2007, 19:04
ich habs mal so probiert: (im2 ist auch ein TImage, SrcRect und DestRect vom typ TRect)
Delphi-Quellcode:
   
[...]
   j.LoadFromStream(r);
   Im.Picture.Assign(j);
   ImageToBitmap(Im);

   SrcRect.Left := im.Picture.Width div 2 - 12;
   SrcRect.Top := im.Picture.Height div 2 - 12;
   SrcRect.Right := im.Picture.Width div 2 + 12;
   SrcRect.Bottom := im.Picture.Height div 2 + 12;
   DestRect := Rect(0, 0, 24, 24);
   Im2.Canvas.CopyRect(DestRect, Im.Canvas, SrcRect);

   ImageList1.Add(im2.Picture.Bitmap, im2.Picture.Bitmap);
[...]
aber irgendwie kommen dann nur schwarze kästchen...
mit dem ganzen image/bitmap/picture/canvas zeugs blick ich net durch^^
kann mir jemand sagen was ich falsch mache?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:54 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