![]() |
nonVCL / jpeg laden und dc erhalten?
hallo!
hat jemand schon mal versucht ein jpeg nonVCL zu laden? gibt es dazu vielleicht ein code-beispiel das jemand posten könnte? bitmap ist kein problem, das habe ich mit loadimage gemacht aber bei jpeg bin ich ratlos - vor allem brauche ich als rückgabe den dc. habe in der suche schon mal soetwas ähnliches gefunden, allerdings liefert diese funktion kein dc zurück. danke für eure hilfe. |
Re: nonVCL / jpeg laden und dc erhalten?
Versucht habe ich das noch nicht, aber ich hab´s mal mit der Suchfunktion versucht. ;)
![]() Und jetzt sag nicht: "Nee du, das sind mir zuviele Beiträge." :mrgreen: |
Re: nonVCL / jpeg laden und dc erhalten?
ja, genau die habe ich auch schon gefunden, allerdings liefert diese
funktion kein dc zurück. und leider habe ich glaube ich zu wenig ahnung um diese funktion in überschaubarer zeit umzuschreiben. trotzdem danke. |
Re: nonVCL / jpeg laden und dc erhalten?
Teste mal:
Delphi-Quellcode:
var
JpgDC : HDC; pPic : IPicture; begin //.. pPic.get_CurDC(JpgDC); |
Re: nonVCL / jpeg laden und dc erhalten?
genau das habe ich auch versucht, aber komme einfach nicht
drauf in welcher unit "ipicture" deklariert ist... :wall: |
Re: nonVCL / jpeg laden und dc erhalten?
Achso, wenns nur das ist:
Delphi-Quellcode:
PS: Du hast doch die Pro-Version. Wenn du dir nicht sicher bist, in welcher Unit eine Sache deklariert ist, dann such doch danach im Ordner "Source".
uses
ActiveX |
Re: nonVCL / jpeg laden und dc erhalten?
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:
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".
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; Aufgerufen wird wie folgt:
Delphi-Quellcode:
(mal in Klassennamen geschrieben...)
TmyJPEG.ShowImage('C:\einJPG.jpg', x, y, TBitmap.Handle);
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 |
Re: nonVCL / jpeg laden und dc erhalten?
Ja, ja der Austausch zwischen DC und HBITMAP, das würde mich auch interessieren.
Bei TBitmap kannst du folgendes verwenden:
Delphi-Quellcode:
Aber mal ne andere Frage:
pPicture.Render(Bitmap1.Canvas.Handle, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, rc);
Wenn du sowieso TBitmap benutzt, warum benutzt du dann nicht auch das normale TJPEGImage?? |
Re: nonVCL / jpeg laden und dc erhalten?
Soweit ich weiss ist TBitmap threadsicher, TJPEGImage hingegen nicht. Und ich schreib gerade ein Programm, mit dem ~30.000 Jpegs miteinander verglichen werden sollen (nach Inhalt...), und da das seine Zeit braucht wollte ich den ganzen Kram in einen 2. Thread auslagern, und nur onIdle rennen lassen. (Der PC wird noch anderweitig gebraucht!)
Ganz ganz heissen Dank für deinen Hinweis! Werde es direkt austesten! Gruss, dizzy \edit: Und was soll ich sagen!? KLAPPT! :love: Danggööööö |
Re: nonVCL / jpeg laden und dc erhalten?
das mit dem ipicture hat geklappt.
wie kann ich denn ein jpeg aus einem file laden? ich schreibe eine console-app... danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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