AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi nach StretchBlt schwarzer Hintergrund
Thema durchsuchen
Ansicht
Themen-Optionen

nach StretchBlt schwarzer Hintergrund

Ein Thema von Helmi · begonnen am 21. Feb 2015 · letzter Beitrag vom 26. Feb 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

nach StretchBlt schwarzer Hintergrund

  Alt 21. Feb 2015, 21:38
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: nach StretchBlt schwarzer Hintergrund

  Alt 21. Feb 2015, 22:41
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.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

AW: nach StretchBlt schwarzer Hintergrund

  Alt 21. Feb 2015, 22:58
Hast Du schon versucht mit SetStretchBltMode einen anderen Modus zu nehmen?

Statt HALFTONE eventuell COLORONCOLOR.
hab ich versucht, aber leider ohne Erfolg

Ich habe gerade noch gesehen, dass Du den Modus nur setzt, wenn Smooth true ist.
smooth ist true
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: nach StretchBlt schwarzer Hintergrund

  Alt 21. Feb 2015, 23:24
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+.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

AW: nach StretchBlt schwarzer Hintergrund

  Alt 22. Feb 2015, 14:58
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+?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: nach StretchBlt schwarzer Hintergrund

  Alt 22. Feb 2015, 15:11
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.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: nach StretchBlt schwarzer Hintergrund

  Alt 22. Feb 2015, 15:14
Oder händisch machen. Wir haben sowas für PNGs im einsatz.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: nach StretchBlt schwarzer Hintergrund

  Alt 22. Feb 2015, 15:25
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.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#9

AW: nach StretchBlt schwarzer Hintergrund

  Alt 22. Feb 2015, 15:37
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: nach StretchBlt schwarzer Hintergrund

  Alt 22. Feb 2015, 16:12
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.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 00:06 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