Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   BitBlt und Transparenz (https://www.delphipraxis.net/184950-bitblt-und-transparenz.html)

EWeiss 4. Mai 2015 07:26

BitBlt und Transparenz
 
Ich erstelle ein Spectrogram

Delphi-Quellcode:
procedure TSpectrogram.DrawSpectrogram;
var
  i, k, m: Integer;
  MagLn: Byte;
  x: PByteArray;
  OffsetX: Integer;
  FFTData: TFFTData;
begin

  if BassDataAvailable then
    FFTData := BassChannelGetFFTData;
  begin
    OffsetX := 2;
    for i := 0 to pred(Height) do
    begin
      MagLn := round(Sqrt(FFTData[i + 1]) * 3 * Width);
      k := Height - i - 1;

      x := BuffBMP.ScanLine[k];

      if bRTLScroll then
      begin
        //copy original scanline
        Move(x[OffsetX], x[0], (Width - OffsetX));

        //draw new pixels
        for m := 0 to pred(OffsetX) do
          x[Width - OffsetX + m] := MagLn;
      end
      else
      //Left to right
      begin
        //copy original scanline
        Move(x[0], x[OffsetX], (Width - OffsetX));

        //draw new pixels
        for m := 0 to pred(OffsetX) do
          x[m] := MagLn;
      end;
    end;
  end;

  BitBlt(PaintDC, 0, 0, Width, Height, BuffBMP.Canvas.Handle, 0, 0, SRCCOPY);

  bMonitoring := True;

end;
Das Problem ist nun wenn ich BitBlt verwende und mein Window Transparent ist wird mein
Child-Window auf dem ich das Bitmap kopiere auch Transparent.

Wie kann ich die Daten ohne BitBlt direkt auf mein Child-Window kopieren?
DiBits geht auch nicht falls jemand auf die Idee kommen sollte.


gruss

Blup 4. Mai 2015 10:55

AW: BitBlt und Transparenz
 
BitBlt macht das schon richtig, besser bekommt man das auch selbst nicht hin.

Das Parent-Window darf an der Stelle, an der das Spektogramm darstellt wird, einfach nicht transparent sein.
Wie wurde den der Transparent-Effekt hergestellt?
Handelt es sich wirklich um ein Child-Window (Nachkomme von TWinControl)?

EWeiss 4. Mai 2015 16:56

AW: BitBlt und Transparenz
 
Zitat:

Zitat von Blup (Beitrag 1300159)
BitBlt macht das schon richtig, besser bekommt man das auch selbst nicht hin.
Das Parent-Window darf an der Stelle, an der das Spektogramm darstellt wird, einfach nicht transparent sein.

Ach Nein?
Oh seltsam ist nur das dass gleiche Window wenn ich ein Oscilloscope darauf zeichne nicht Transparent wird.
Es macht also schon einen Unterschied ob ich ein komplettes Bild Blite oder Pixelweise auf das Window zeichne.

Zitat:

Handelt es sich wirklich um ein Child-Window (Nachkomme von TWinControl)?
Nö..
API-Window (WS_CHILD)

Zitat:

Wie wurde den der Transparent-Effekt hergestellt?
DWMBlur..

Im Anhang kann man sehen was ich meine.

grus

Memnarch 4. Mai 2015 17:24

AW: BitBlt und Transparenz
 
Was heißt Pixelweise Zeichnen? Im Sinne von selber? Da wird sowieso standartmässig immer ein Alphawert von 255 verwendet.
BitBlt wird mit SRCCOPY benutzt, was die PerPixel-Werte überträgt. Ein Rendertarget in Windows ist IIRC standartmässig 32Bit.
Du könntest (wenn du unbedingt von Fenster zu fenster kopieren musst) auch MaskBlt mit einer komplett nicht transparenten Maske verwenden.

EWeiss 4. Mai 2015 17:31

AW: BitBlt und Transparenz
 
Zitat:

Was heißt Pixelweise Zeichnen? Im Sinne von selber?
Seht euch doch die Bilder an die sagen doch alles..
Transparent und mit
Delphi-Quellcode:
GDIP_DrawLine(Graphics, 0, n64 + 1, rc.Right, n64 + 1, 1, SKAERO_ColorARGB
  (255, RGB(255, 255, 0)));
kein Problem das Child Window bleibt undurchsichtig.

Mit Bitblt halt nicht.

Was ist da nicht zu verstehen.

gruss

EWeiss 4. Mai 2015 18:07

AW: BitBlt und Transparenz
 
Ich bin ja auch so was von bescheuert.
Rede selbst davon das ich die Pixel zeichnen will und verwende anstelle von Paint -> Copy

So funktioniert es jetzt.

Zitat:

Das Parent-Window darf an der Stelle, an der das Spektogramm darstellt wird, einfach nicht transparent sein.
Wurde also wiederlegt geht auch dann wenn das HauptFenster transparent ist.
War mir vorher schon klar, nur wie das war der Knackspunkt.

Delphi-Quellcode:
  BitBlt(PaintDC, 0, 0, Width, Height, BuffBMP.Canvas.Handle, 0, 0, SrcPaint);
Zitat:

BitBlt wird mit SRCCOPY benutzt, was die PerPixel-Werte überträgt.
NÖ es kopiert von einem Device Contex zum andern das komplette Bild.

Das trifft dann wohl eher für SRCPAINT zu.
Hier werden die PerPixel-Werte gezeichnet.

Zitat:

Ein Rendertarget in Windows ist IIRC standartmässig 32Bit.
Aber nicht mehr wenn ich es mit 8Bit austausche. (Was ich in dem Fall tue.)

gruss

Medium 5. Mai 2015 01:01

AW: BitBlt und Transparenz
 
Ei ei ei, du hast letztlich ja wieder einen Ton am Hals, Mamma mia. Eine Zeit lang warst du ja relativ angenehm zu lesen, aber diese unterschweligen Angriffe und knappen Infos mit anschließendem Lächerlichmachen von Klärungsfragen sind kein sehr hilfsförderndes Klima. Ich dachte echt, du hättest die "kollegiale Kurve" gekriegt.

EWeiss 5. Mai 2015 02:30

AW: BitBlt und Transparenz
 
Zitat:

Zitat von Medium (Beitrag 1300233)
Ei ei ei, du hast letztlich ja wieder einen Ton am Hals, Mamma mia. Eine Zeit lang warst du ja relativ angenehm zu lesen, aber diese unterschweligen Angriffe und knappen Infos mit anschließendem Lächerlichmachen von Klärungsfragen sind kein sehr hilfsförderndes Klima. Ich dachte echt, du hättest die "kollegiale Kurve" gekriegt.

Du solltest mal besser lesen..
Ich gebe nur das zurück was man mir zukommen lässt.

Bei solchen Fragen und Feststellungen die so einfach nicht stimmen!
Zitat:

Was heißt Pixelweise Zeichnen? Im Sinne von selber?
Zitat:

Das Parent-Window darf an der Stelle, an der das Spektogramm darstellt wird, einfach nicht transparent sein.
Kommt man sich einfach verarscht vor.

Ich könnte viele dieser Beispiele nennen die nichts mit mir direkt zu tun haben sondern hier gang und gäbe sind.
Es scheint aber so das ihr das schon gar nicht mehr bemerkt.
Die Leute werden auf die Schüppe genommen und wenn man sich wehrt ist man der Dumme.
Ist hier Alltag. Aber sei's drum.

OK das ich so dumm war und anstelle von Zeichnen Kopiert habe ist mein Problem.
Kann aber damit Leben.

Aber egal.
Hast mir deine Meinung gesagt und gut ist. (Gebe ich nichts drum)
Spüre ich da einen gewissen Frust das ich mein Problem selbst gelöst habe?

Man kann nicht jedem genehm sein.

gruss

Namenloser 5. Mai 2015 05:38

AW: BitBlt und Transparenz
 
Kann mich Medium nur anschließen, mir ist es bei deinen Threads in letzter Zeit auch aufgefallen. Ich verstehe auch nicht, wovon du dich angegriffen fühlst. Ich sehe da nur normale, sachliche Fragen. Du scheinst irgendwie Schwierigkeiten zu haben, dich in andere Menschen hineinzuversetzen. Das Problem ist: Deine Eingangsposts enthalten im Schnitt 10 % der Informationen, die nötig wären, um dir zu helfen, aber du merkst es nicht mal, weil für dich ja klar ist, was du willst, und du deshalb meinst, dass es für alle anderen auch klar ist. Aber die anderen können – im Gegensatz zu dir – nicht in deinen Kopf hineinschauen, sie können nur von den Informationen ausgehen, die im Text stehen, und die reichen einfach objektiv nicht. Da kann man als Leser nur entweder nachfragen oder die Frage ignorieren. Und wenn einer dann nachfragt, reagierst du genervt. Da ist es kein Wunder, dass du deine Probleme am Ende doch fast immer alleine löst.

Daniel 5. Mai 2015 07:39

AW: BitBlt und Transparenz
 
@Emil: Du hast Post.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 1 von 2  1 2      

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