![]() |
Re: JPEG Datei in NonVCL Prog laden
Zitat:
|
Re: JPEG Datei in NonVCL Prog laden
Hey, jetzt nicht meckern. Ich hab das so nur zu Demozwecken gemacht!
So bekommst Du das PIC zu sehen ... :
Delphi-Quellcode:
Bin gerade dabei das Teil in meine DIB-Klasse einzubinden. Jetzt gibt es endlich einen Constructor CreateFromJPEGRessource. :dancer:
procedure TForm1.Button1Click(Sender: TObject);
Var hRes:HResult; DC,DCpic:HDC; DCout:HDC; BmpOut:OLE_HANDLE; begin If LoadPicture('C:\Button.jpg') Then Begin DC:=GetDC(0); DCpic:=CreateCompatibleDC(DC); ReleaseDC(0,DC); pPicture.SelectPicture(DC1,DCout,BmpOut); BitBlt(Canvas.Handle,0,0,100000,100,DC1,0,0,SRCCOPY); pPicture:=NIL; DeleteDC(DCpic); End; end; Tschau OLLI |
Re: JPEG Datei in NonVCL Prog laden
Ich habe mir das eben mal angeschaut, und muss sagen:
@OLLI_T: Du hast einen furchtbaren Programmierstil. Mal schreibst du Schlüsselworte klein, dann wieder am Anfang groß. Mal lässt du ein Leerzeichen bei Vergleichen, dann wieder nicht. Ja ja, ich weiß, es war nur zu Demozwecken. Trotzdem ... Na ja, und die vielen exit-Anweisungen, was ja auch Luckie schon erwähnt hat ... hm ... Wenn die Datei zwar geöffnet werden konnte, aber bspw. das Lesen nicht funktioniert, dann verlässt du deine Prozedur, ohne vorher das Handle "hFile" wieder freizugeben. Das würde nicht passieren, wenn du das ganze in try/finally einklammerst, wobei
Delphi-Quellcode:
dann im finally-Teil stehen sollte.
CloseHandle(hFile);
Und für den Fall, dass mal mit der Dateigröße etwas nicht stimmt, wirst du vermutlich ein paar Fehler kassieren, denn bei mir meckert der Compiler (D5) hier Zitat:
Delphi-Quellcode:
Und dann funktioniert deine Button-Klickprozedur nicht. "hRes" wird nie benötigt, und im Code findet man ein "DC1", von dem man nicht erfährt, woher es stammt. Ich habe stattdessen die "Show"-Funktion aus dem C-Sample als Grundlage benutzt, und es hat sofort problemlos geklappt:
if(dwFileSize = INVALID_FILE_SIZE) then exit;
Delphi-Quellcode:
Meine IPicture-Variable ist übrigens lokal, heißt "pPic" und wird als VAR-Parameter an deine (von mir leicht umgeschriebene) Funktion "LoadPicture" übergeben.
if(LoadPicture('Dateiname.jpg',pPic)) then begin
DC := GetDC(wnd); if(pPic.get_Width(hmWidth) = S_OK) and (pPic.get_Height(hmHeight) = S_OK) and (GetClientRect(wnd,rc)) then begin nWidth := MulDiv(hmWidth,GetDeviceCaps(DC,LOGPIXELSX),2540); nHeight := MulDiv(hmHeight,GetDeviceCaps(DC,LOGPIXELSY),2540); pPic.Render(DC,0,0,nWidth,nHeight,0,hmHeight,hmWidth, -hmHeight,rc); end; ReleaseDC(wnd,DC); end; So, meine eigene Frage betrifft jetzt lediglich den Sinn der Werte 2540 in den Zeilen
Delphi-Quellcode:
Damit kann ich, offen gestanden, im Moment nichts anfangen. Ich weiß, dass die integer-Werte "hmWidth" und "hmHeight" nicht den Pixelmaßen entsprechen, und dass sie deshalb mit "MulDiv" umgerechnet werden. Aber woher bzw. woraus/wovon ergibt sich die 2540?
nWidth := MulDiv(hmWidth,GetDeviceCaps(DC,LOGPIXELSX),2540);
nHeight := MulDiv(hmHeight,GetDeviceCaps(DC,LOGPIXELSY),2540); Gruß. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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