Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: nonVCL / jpeg laden und dc erhalten?

  Alt 19. Dez 2003, 00:27
Ich hätte da wohl auch noch eine kleine Frage zu.

Ich müsste mit dieser Funktion auf ein TBitmap zeichnen können, nur leider klappt das scheinbar nur mit Nachfahren von TWinControl, wie z.B. TForm.
Ich habe die function wie folgt umgeschrieben:

Delphi-Quellcode:
function TmyJPEG.ShowImage(fileName: string; var hmWidth, hmHeight: Integer; wnd: HWND): hResult;
var DC : HDC;
    nWidth,
    nHeight : Integer;
    rc : TRect;
begin
  if LoadPicture(fileName) then
   begin
     DC := GetDC(wnd);

     if (pPicture.get_Width(hmWidth) = S_OK) and
        (pPicture.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);

        pPicture.Render(DC, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, rc);
      end;

     ReleaseDC(wnd, DC);
   end;
end;
Sie ist Teil der Klasse "TmyJPEG", die aus nicht viel mehr besteht, wie der funktion "LoadImage" (wie in dem hier besprochenen Thread, nur mit'm try...finally drumrum), und eben "ShowImage".

Aufgerufen wird wie folgt:
TmyJPEG.ShowImage('C:\einJPG.jpg', x, y, TBitmap.Handle); (mal in Klassennamen geschrieben...)
x und y halten die Größe des Bildes (komischerweise mit 26,458333333... multipliziert, aber egal).

Wenn ich statt des "TBitmap.Handle" ein "TForm.Handle" übergebe klappt das ganze sehr prächtig! Nur MUSS ich in ein Bitmap zeichnen können, da ich
a) Die Scanline brauche und
b) das ganze in einem Thread passiert, und ein TForm hat da nix zu suchen (wiel nicht threadsicher)

Die Deklaration des Parameters "wnd: HWND" in "wnd: HBITMAP" zu ändern brachte leider keinen Erfolg. Und ich weiss leider noch nicht ganz die ganze Klamotte mit dc's und Handles und tüdeldü zu verstehen. (Bin aber dicht dran *g*)

Also Frage ist: Was kann ich tun, damit mir meine function auch in ein TBitmap rendert?


Herzlichen Dank schonmal!
mfg,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat