![]() |
nach StretchBlt schwarzer Hintergrund
Hallo,
ich nutze zum skalieren von Bitmaps diese Function:
Delphi-Quellcode:
Das Vergrößern/Verkleinern funktioniert wunderbar - nur habe ich immer nach StretchBlt einen scharzen Hintergrund.
procedure Scale_Bitmap(var Bitmap: TBitmap; DestWidth, DestHeight: Integer;
Smooth: Boolean = false); var faktor : Real; Width_Bitmap: Integer; Temp_Bitmap : TBitmap; Copy_Bitmap : TBitmap; begin If Bitmap.Empty then exit; Temp_Bitmap := TBitmap.Create; Copy_Bitmap := TBitmap.Create; Width_Bitmap := Bitmap.Width div Count_Glyphs(Bitmap); If Width_Bitmap > DestWidth then begin faktor := DestWidth / Width_Bitmap; If (Bitmap.Height * faktor) > DestHeight then faktor := DestHeight / Bitmap.Height; end else begin faktor := DestHeight / Bitmap.Height; If (Width_Bitmap * faktor) > DestWidth then faktor := DestWidth / Width_Bitmap; end; try Copy_Bitmap.PixelFormat := pf24Bit; Copy_Bitmap.Assign(Bitmap); Temp_Bitmap.Width := round(Bitmap.Width * faktor); Temp_Bitmap.Height := round(Bitmap.Height * faktor); If Smooth then SetStretchBltMode(Temp_Bitmap.Canvas.Handle, HALFTONE); StretchBlt(Temp_Bitmap.Canvas.Handle, 0, 0, Temp_Bitmap.Width, Temp_Bitmap.Height, Copy_Bitmap.Canvas.Handle, 0, 0, Copy_Bitmap.Width, Copy_Bitmap.Height, SRCCOPY); Bitmap.Assign(Temp_Bitmap); finally FreeAndNil(Temp_Bitmap); FreeAndNil(Copy_Bitmap); end; end; Das Original-Bitmap hat einen transparenten Hintergrund. Ich habe schon versucht, die Transparenz-Properties von Bitmap auf Temp_Bitmap zu übertragen - aber geholfen hat es nichts. Wie bekomm ich nach StrechBlt auch eine Transparenz? Ich habe diesen ![]() |
AW: nach StretchBlt schwarzer Hintergrund
Hast Du schon versucht mit SetStretchBltMode einen anderen Modus zu nehmen?
Statt HALFTONE eventuell COLORONCOLOR. Ich habe gerade noch gesehen, dass Du den Modus nur setzt, wenn Smooth true ist. |
AW: nach StretchBlt schwarzer Hintergrund
Zitat:
Zitat:
|
AW: nach StretchBlt schwarzer Hintergrund
Na, du setzt Pixelformat auf pf24Bit, und wunderst dich dann, dass du keinen Alpha-Kanal mehr hast? Die GDI ist allerdings generell nicht alphakanaltauglich, d.h. auch pf32Bit wird hier keine Besserung bringen.
Was du machen willst ist mit der GDI schlicht nicht möglich. Nimm Graphics32 oder GDI+. |
AW: nach StretchBlt schwarzer Hintergrund
Zitat:
|
AW: nach StretchBlt schwarzer Hintergrund
Googlen, saugen und usen:
Als Objekte werden benötigt: TGPGraphics TGPImage TColorMatrix TGPImageAttributes TGPMatrix Leider habe ich meinen Code, in dem ich das gemacht habe, nicht zur Hand; hoffe das hilft trotzdem. |
AW: nach StretchBlt schwarzer Hintergrund
Oder händisch machen. Wir haben sowas für PNGs im einsatz.
|
AW: nach StretchBlt schwarzer Hintergrund
Könnte auch mit Hilfe eines TPicture-Objektes gehen. Das verwende ich für transparente PNGs, allerdings ohne Manipulationen - nur malen. Wäre ein Experiment wert, ob es auch noch nach Dimensionsänderungen transparent malt.
|
AW: nach StretchBlt schwarzer Hintergrund
ich hab mir jetzt GUI+ von
![]() werd mich jetzt etwas damit auseinander setzen bislang bin ich schon von der automatischen Umwandlung der Bild-Formate begeistert |
AW: nach StretchBlt schwarzer Hintergrund
Werd aber nicht ZU euphorisch, denn GDI+ ist seit ein paar Jahren schon abgekündigt. (Aber wenn mich nicht alles täuscht, ist die zumindest bis Win8.1 dabei, und für Win10 habe ich auch noch nichts gegenteiliges gehört. Ist halt nur nicht mehr garantiert und wird nicht mehr weiter entwickelt.)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz