AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Durchsichtiges Fenster (nicht Alpha Blend)

Durchsichtiges Fenster (nicht Alpha Blend)

Ein Thema von F.W. · begonnen am 6. Nov 2003 · letzter Beitrag vom 28. Mär 2009
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#21

Re: Durchsichtiges Fenster (nicht Alpha Blend)

  Alt 25. Mär 2009, 13:23
Zitat von Daniel:
Einmal gegentreten, schon passt die Darstellung wieder.
German engineering in da house, ya!

//Edit: @Frank: Der W3C Validator lieferte defekte Tabellen-Tags, insgesamt 9 Fehler und 423 Warnungen. Jetzt sind es nur noch 5 Fehler und 423 Warnungen..
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#22

Re: Durchsichtiges Fenster (nicht Alpha Blend)

  Alt 25. Mär 2009, 13:32
Zitat von _frank_:
wie so oft...mal im Ernst, was war denn verkehrt? hat irgendwo ein Tag gefehlt?
Ja, hin und wieder fehlt ein Tag. Das rieselt dann zwischen den Lüfterschlitzen durch und wird dann auf dem Boden des Serverkellers liegend weggefegt.

Streng genommen kann ich Dir gar nicht sagen, warum manchmal nur kleine Tags fehlen und nicht gleich halbe Beiträge.
is' eben so ...
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Durchsichtiges Fenster (nicht Alpha Blend)

  Alt 28. Mär 2009, 16:48
Zitat von _frank_:
probiers mal so (von hier):

Delphi-Quellcode:
const
  CAPTUREBLT = $40000000;

DC := GetWindowDC(0);
try
  BitBlt(BackBuf.Canvas.Handle, 0, 0, BackBuf.Width, BackBuf.Height, DC, 0, 0, SRCCOPY or CAPTUREBLT);
finally
  ReleaseDC(0, DC);
end;
//Edit:
das mit dem Wasserzeichen versteh ich nicht ganz...wozu brauchst du da alphablending? warum nicht einfach die normalen Canvas-Methoden, um Text/Rahmen hinzumalen?

HTH Frank
Hallo,

also ich bin ein wenig am Verzweifeln, und zwar versuche ich mithilfe dieses codes eine art kurzen "motion grabber" zu schreiben. Ich bekomme es aber nicht sauber hin... wenn ich alles in eine procedur packe, dann kommt nach ca. 70 ganzbildjpgs (~á400kb) irgendwas mit "Für diesen Befehl ist nicht genügend Speicher vorhanden".
Das kann aber eigentlich nicht sein... denn wenn ich bilder von der platte lade (habsch getestet) dann kann ich 4500 (~á400kb) problemlos laden, bis es dann zu stottern anfängt und irgendwann die fehlermeldung "Nicht genügend Arbeitsspeicher" kommt.
(wer jetzt die stirn runzelt sei einigermaßen beruhigt: ziel ist es ca. 3600 bilder à 100-200kb aneinanderzureihen sollte also rechnerisch gehen)

versucht hatte ich es bisher mit einem array:
jpglisted: array of TJpegimage; dann wollte ich das ganze durch eine schleife rennen lassen die ungefähr folgendes macht:

Delphi-Quellcode:
procedure TForm1.newscreenshot(sender:TObject);
var
  screenshotjpg: TJpegimage;
  DC:HDC;
  screenshot: TBitmap;
  i:integer;
const
  CAPTUREBLT = $40000000;
begin
DC := GetWindowDC(0);
try
  screenshot := TBitmap.Create;
  screenshot.Width := form2.Shape1.Width;
  screenshot.Height:= form2.Shape1.height;
  screenshot.PixelFormat := pfDevice;
finally
        BitBlt(screenshot.Canvas.Handle, 0, 0, screenshot.Width, screenshot.Height, DC,(form2.Left+form2.Shape1.left),
        (form2.Top+form2.shape1.top), SRCCOPY or CAPTUREBLT);
        releaseDC(0,DC);

         jpglisted[geschafft] := Tjpegimage.Create;
        try
         jpglisted[geschafft].assign(screenshot);
        finally
          screenshot.Free;
          screenshot:=nil; //spätestens ab hier sollte doch nur noch das jpg im speicher sein...
        end;
    end;
ich hab zwischendrin auch mal versucht der datenflut über tmemorystream oder tfilestream herr zu werden aber beide prozesse brauchen pro jpgbild ~200ms was zu langsam ist.

ich vermute mal das ich das jpglisted[geschafft] noch .freeen müsste und das bild vorher (sauber getrennt) woanders hin übergeben müsste... aber ich weiss net wie das geht

arrays, streams, und all das ist neuland für mich, ich bin Anfänger
Deshalb würde ich mich über anfängerfreundliche Antworten freuen, vielleicht hat ja auch jemand lust mir den Mentor via MSN zu machen das wär schon klasse mal zwischendrin jemand fragen können mit Ahnung.

lieben Gruß

//EDIT:

was mir beim testen eben aufgefallen ist, wenn ich die bilder einzeln einer Tjpegliste hinzufüge wächst mein Programm im Taskmanager überhaupt nicht.... es bleibt bei 3822 byte obwohl ich 50 bilder hinzufüge... (bei 75 steigt er dann wieder aus und behauptet keinen speicher mehr für den befehl zu haben) kann es sein das er die bilder nicht im arbeitsspeicher sondern in irgendeinem viel kleineren puffer abzulegen versucht??? Wenn ich bilder (mit dem gleichen programm) von platte (in die gleiche liste) lade wird brav bei jedem neu geladenen bild auch das projekt im taskmanager größer....

// EDIT2...

ok, nachdem ich jetzt noch mehr rumprobiert und ausprobiert habe bin ich mir fast sicher: die von mir erzeugten bilder liegen in irgendeinem resourcenpuffer und solange ich sie nicht
1.) rausschreibe
2.) freigebe
3.) wieder reinlade
lassen sie sich auch durch nichts in meiner macht stehende dazu bringen in die gewaltigen hallen meines arbeitsspeichers zu hüpfen, sondern blockieren lieber weiter die engen flure...

jetzt hab ich zwar ne lösung (savetofile -> free -> loadfromfile) aber das ist doch krank und dauert fast ne halbe sekunde pro bild... gibts keinen befehl der Delphi zwingt ein bmp aus dem device context in den arbeitsspeicher zu schieben um den DC dann sauber deleten zu können?

über anfängerfreundliche antworten würde ich mich wie immer sehr freuen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:18 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