AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

nonVCL / jpeg laden und dc erhalten?

Ein Thema von unitedlb · begonnen am 18. Dez 2003 · letzter Beitrag vom 19. Dez 2003
Antwort Antwort
Benutzerbild von dizzy
dizzy

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

Re: nonVCL / jpeg laden und dc erhalten?

  Alt 18. Dez 2003, 23: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
Antwort Antwort


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 20:02 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