Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Imagelist und "Zentrieren" (https://www.delphipraxis.net/97919-imagelist-und-zentrieren.html)

dominikkv 18. Aug 2007 17:24


Imagelist und "Zentrieren"
 
Liste der Anhänge anzeigen (Anzahl: 2)
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

Der_Unwissende 19. Aug 2007 16:12

Re: Imagelist und "Zentrieren"
 
Zitat:

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

dominikkv 19. Aug 2007 18:04

Re: Imagelist und "Zentrieren"
 
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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