![]() |
CopyPTRtoBYTES alternative in Delphi
Welche alternative bietet sich hier an ?
Code:
Meine Delphi version!
Private Declare Sub CopyBYTEStoPTR Lib "kernel32.dll" Alias "RtlMoveMemory" _
(ByVal PtrDest As Long, _ ByRef ByteSrc As Byte, _ ByVal Length As Long) Private Declare Sub CopyPTRtoBYTES Lib "kernel32.dll" Alias "RtlMoveMemory" _ (ByRef ByteDest As Byte, _ ByVal PtrSrc As Long, _ ByVal Length As Long)
Delphi-Quellcode:
und die beiden aufrufe.
procedure CopyBYTEStoPTR(PtrDest: Pointer; ByteSrc: Byte; Length: Integer); stdcall;
external 'kernel32.dll' Name 'RtlMoveMemory'; procedure CopyPTRtoBYTES(ByteDest: Byte; PtrSrc: Pointer; Length: Integer); stdcall; external 'kernel32.dll' Name 'RtlMoveMemory';
Code:
Denke das müßte in Delphi eleganter zu lösen sein.
//' Copy The R,G,B Data Into Our Image Array For Rapid Editing/Fading.
CopyPTRtoBYTES(ia[0, 0], pAddr, 49152); //' Copy Edited Image Back To Dib Section. CopyBYTEStoPTR(pAddr, ia[0, 0], 49152); gruss Emil |
Re: CopyPTRtoBYTES alternative in Delphi
Hi Emil,
ich würd das direkt über die Move() machen. Schau mal in die Hilfe zu Move(), u.U. sind da einige Beispiele drin. Ansonsten poste einfach wieder hier, wenns irgendwo hakt. Gruß Assertor |
Re: CopyPTRtoBYTES alternative in Delphi
Die oben referenzierte Methode wird als CopyMemory() angeboten.
|
Re: CopyPTRtoBYTES alternative in Delphi
Hi,
Zitat:
Gruß Assertor |
Re: CopyPTRtoBYTES alternative in Delphi
Zitat:
Habe schon ein problem das der Pointer immer nil bleibt. Eigentlich sollte hier
Delphi-Quellcode:
pAddr gefüllt werden .. bleibt aber nil.
procedure MonitorAudio;
var hDibSec : Cardinal; hDibSecOld : Cardinal; BIH : BITMAPINFO; begin With BIH do begin BIH.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER); BIH.bmiHeader.biBitCount := 24; BIH.bmiHeader.biWidth := 256; BIH.bmiHeader.biHeight := -64; //' Top Down DIB. BIH.bmiHeader.biPlanes := 1; BIH.bmiHeader.biSize := 40; BIH.bmiHeader.biSizeImage := 49152; end; hTempDc := CreateCompatibleDC(0); hDibSec := CreateDIBSection(hTempDc, BIH, 0, pAddr, 0, 0); hDibSecOld := SelectObject(hTempDc, hDibSec); DrawData; DeleteObject(SelectObject(hTempDc, hDibSecOld)); DeleteDC(hTempDc); end; Somit wäre die funktion erstmal ohne resultat.
Delphi-Quellcode:
hmmm.... :wall:
CopyPTRtoBYTES(ia[0, 0], pAddr, 49152);
gruss Emil |
Re: CopyPTRtoBYTES alternative in Delphi
Hi,
Zitat:
Gruß Assertor |
Re: CopyPTRtoBYTES alternative in Delphi
Zitat:
Ja das ist natürlich quatsch. ;) Habe es vergessen zu entfernen. Danke für die Info. gruss Emil |
Re: CopyPTRtoBYTES alternative in Delphi
Zitat:
Ohne sind es ein paar K warum versteh ich wieder mal nicht gebe alles frei.
Delphi-Quellcode:
kann jemand sehn ob da irgendwas nicht freigegeben wird ?
procedure TfrmMain.MonitorAudio;
var hDibSec : HBITMAP; BIH : BITMAPINFO; hDibSecOld : HBITMAP; begin ZeroMemory(@bih, sizeof(BITMAPINFO)); With BIH do begin BIH.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER); BIH.bmiHeader.biBitCount := 24; BIH.bmiHeader.biWidth := 256; BIH.bmiHeader.biHeight := -64; //' Top Down DIB. BIH.bmiHeader.biPlanes := 1; BIH.bmiHeader.biSizeImage := 49152; end; hTempDc := CreateCompatibleDC(0); hDibSec := CreateDIBSection(hTempDc, BIH, 0, pAddr, 0, 0); hDibSecOld := SelectObject(hTempDc, hDibSec); DrawData; SelectObject(hTempDc, hDibSecOld); DeleteObject(hDibSecOld); DeleteDC(hTempDc); end; gruss EMil |
Re: CopyPTRtoBYTES alternative in Delphi
Delphi-Quellcode:
SelectObject(hTempDc, hDibSecOld); DeleteObject(hDibSec); DeleteDC(hTempDc); |
Re: CopyPTRtoBYTES alternative in Delphi
Zitat:
Frag mich nicht warum aber das ist so. Meine Schreibweise ist schon korrekt. Das Problem lag daran das ich das DC .. vom Panel nicht freigegeben habe Erstelltes DC
Delphi-Quellcode:
Und freigegeben !
DC := GetDC(frmDraw.PicBB.Handle);
Delphi-Quellcode:
gruss Emil
DeleteObject(SelectObject(hTempDc, hDibSecOld));
DeleteDC(hTempDc); DeleteDC(DC); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 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