Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi nach StretchBlt schwarzer Hintergrund (https://www.delphipraxis.net/184052-nach-stretchblt-schwarzer-hintergrund.html)

Helmi 21. Feb 2015 21:38

nach StretchBlt schwarzer Hintergrund
 
Hallo,

ich nutze zum skalieren von Bitmaps diese Function:

Delphi-Quellcode:
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 Vergrößern/Verkleinern funktioniert wunderbar - nur habe ich immer nach StretchBlt einen scharzen Hintergrund.
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 Thread gefunden - aber leider hat er mir auch nicht geholfen

BadenPower 21. Feb 2015 22:41

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.

Helmi 21. Feb 2015 22:58

AW: nach StretchBlt schwarzer Hintergrund
 
Zitat:

Zitat von BadenPower (Beitrag 1290913)
Hast Du schon versucht mit SetStretchBltMode einen anderen Modus zu nehmen?

Statt HALFTONE eventuell COLORONCOLOR.

hab ich versucht, aber leider ohne Erfolg

Zitat:

Zitat von BadenPower (Beitrag 1290913)
Ich habe gerade noch gesehen, dass Du den Modus nur setzt, wenn Smooth true ist.

smooth ist true

Namenloser 21. Feb 2015 23:24

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+.

Helmi 22. Feb 2015 14:58

AW: nach StretchBlt schwarzer Hintergrund
 
Zitat:

Zitat von Namenloser (Beitrag 1290915)
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+.

Wie macht man das mit GDI+?

ConnorMcLeod 22. Feb 2015 15:11

AW: nach StretchBlt schwarzer Hintergrund
 
Googlen, saugen und usen:
  • GDIPAPI.pas
  • GDIPOBJ.pas
Die gibt es meistens als ZIP-Package.

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.

Bernhard Geyer 22. Feb 2015 15:14

AW: nach StretchBlt schwarzer Hintergrund
 
Oder händisch machen. Wir haben sowas für PNGs im einsatz.

ConnorMcLeod 22. Feb 2015 15:25

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.

Helmi 22. Feb 2015 15:37

AW: nach StretchBlt schwarzer Hintergrund
 
ich hab mir jetzt GUI+ von hier geladen

werd mich jetzt etwas damit auseinander setzen

bislang bin ich schon von der automatischen Umwandlung der Bild-Formate begeistert

Medium 22. Feb 2015 16:12

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 18:37 Uhr.
Seite 1 von 4  1 23     Letzte »    

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