AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild im Popupmenu

Ein Thema von D0N · begonnen am 10. Mai 2010 · letzter Beitrag vom 10. Mai 2010
Antwort Antwort
D0N

Registriert seit: 28. Jan 2008
Ort: Fischbach
35 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Bild im Popupmenu

  Alt 10. Mai 2010, 11:48
Hallo,

Ich möchte in meinem Programm ein richtiges Bild in ein Popupmenu einbauen, ich habs schon im menu drin nur es ist extrem verpixelt.
Daher wollte ich fragen ob es ich etwas machen kann dass es nichtmehr so verpixelt ist.

Hier der ausschnitt in dem ich das Bild ins Menu einfüge (glaube ich, hab mir die Canvas sachen noch nicht angeschaut)

Delphi-Quellcode:
procedure TForm1.pupImageAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; State: TOwnerDrawState);
begin
   try
     InflateRect(ARect,-5,-5) ;
     ACanvas.StretchDraw(ARect, Image1.Picture.Graphic) ;
   finally

   end;
end;
Das Bild lade ich aus dem Internet in nen Stream und von dort in das TImage (umständlich aber mir is gestern abend nich besseres eingefallen).

Delphi-Quellcode:
LDestStream := TMemoryStream.Create;
...
LJpg := TJPEGImage.Create;
LJpg.LoadFromStream(LDestStream);
image1.Picture.Assign(Ljpg);
Das Codeschnippselchen hab ich aus dem Forum hier ^^

Also wie bekomme ich es hin dass mein Bild nichtmehr so verpixelt ist?

Ein Bild des Problems ist angehängt.

mfg D0N
Miniaturansicht angehängter Grafiken
beispiel_210.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 12:01
Das sieht so aus, als ob die Proportionen nicht stimmen. Außerdem bekommt man mit SetStretchBltMode auf HALFTONE meist recht gute Ergebnisse (Wunder kann man natürlich nicht erwarten). Vielleicht hilft Dir dieser Beitrag ein wenig weiter: http://www.delphipraxis.net/internal...=978676#978676
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
D0N

Registriert seit: 28. Jan 2008
Ort: Fischbach
35 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 15:17
Wie benutze ich denn SetStretchBltMode habs zwar mal eingebunden

Delphi-Quellcode:
procedure TForm1.pupImageAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; State: TOwnerDrawState);
begin
   try
     //InflateRect(ARect,-5,-5) ;
     SetStretchBltMode(ACanvas.Handle, STRETCH_HALFTONE);
     SetBrushOrgEx(ACanvas.Handle, 0, 0, nil);
     //ACanvas.StretchDraw(ARect, Image1.Picture.Graphic) ;
     StretchBlt(ACanvas.Handle,0,0,Image1.Picture.Width,Image1.Picture.Height,Image1.Canvas.Handle,0,0, Image1.Picture.Width,Image1.Picture.Height,SRCCOPY);
   finally

   end;
end;
Bekomme aber ne Exception "Ein Bild kann nur geändert werden, wenn es einen Bitmap enthält".

Wie schon erwähnt hab ich oben den Text zusammengeknaupt weil ich nicht weiß die Canvas funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 15:23
Ich an Deiner Stelle würde einfach die verlinkte Prozedur verwenden und die gestretchte JPEG dann in das Image laden, das sollte das Einfachste sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
D0N

Registriert seit: 28. Jan 2008
Ort: Fischbach
35 Beiträge
 
RAD-Studio 2010 Arc
 
#5

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 15:39
Dann ist es doch trotzdem so Verpixelt da ich es ja immernoch mit

ACanvas.StretchDraw(ARect, Image1.Picture.Graphic) ; ins Popupmenu einfüge. Das Bild sollte ja nur ne Zwischenablage zwischen Stream und Popupmenu sein.

Nur kurz zur Klärung

Ablauf:
  • Bild aus Internet in Stream laden.
  • Stream in Image (wusste nicht wie ich es sonst mit StretchDraw ins Popupmenu bekomme da es ja TGraphic will).
  • Image mit StretchDraw ins Popupmenu einfügen.

und dann isses eben so verpixelt auch wenn ich vorher die Procedure verwendet habe und das Jpg dem Image zugewiesen habe ( Assign ).

mfg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 15:52
Achso, dann musst Du dem Rect dann schon die Maße des (gestretchten) Bildes zuweisen.
Delphi-Quellcode:
procedure TForm1.pupImageAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; State: TOwnerDrawState);
begin
   ARect.Bottom := ARect.Top + Image1.Picture.Height;
   ARect.Right := ARect.Left + Image1.Picture.Width;
   ACanvas.StretchDraw(ARect, Image1.Picture.Graphic) ;
end;
Zumindest so in etwa müsste das funktionieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
D0N

Registriert seit: 28. Jan 2008
Ort: Fischbach
35 Beiträge
 
RAD-Studio 2010 Arc
 
#7

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 16:00
klappt thx sieht gut aus.

Noch was nebenbei wenn nicht is auch nicht schlimm.

Gibt es ne möglichkeit das Bild zu zentrieren bzw was muss ich dafür ändern?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 16:04
Die Breite des Rects ergibt sich ja aus Right - Left. Demzufolge wäre die Mitte (Right - Left) div 2. Davon ziehst Du nun noch die halbe Bildbreite ab. Das ist dann die linke Seite. Äquivalent geht das mit der Höhe.

[edit] Mal aus dem Kopf getippt, ich hoffe, das stimmt so:
Delphi-Quellcode:
procedure TForm1.pupImageAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; State: TOwnerDrawState);
begin
  ARect.Left := ARect.Left + (ARect.Right - ARect.Left) div 2 - Image1.Picture.Width div 2;
  ARect.Right := ARect.Left + Image1.Picture.Width;
  ARect.Top := ARect.Top + (ARect.Bottom - ARect.Top) div 2 - Image1.Picture.Height div 2;
  ARect.Bottom := ARect.Top + Image1.Picture.Height;
  ACanvas.StretchDraw(ARect, Image1.Picture.Graphic) ;
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
D0N

Registriert seit: 28. Jan 2008
Ort: Fischbach
35 Beiträge
 
RAD-Studio 2010 Arc
 
#9

Re: Bild im Popupmenu

  Alt 10. Mai 2010, 16:12
ui sieht Super aus.

Das war atm alles danke für deine Mühe
  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 05:07 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