AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPEG Datei in NonVCL Prog laden
Thema durchsuchen
Ansicht
Themen-Optionen

JPEG Datei in NonVCL Prog laden

Ein Thema von OLLI_T · begonnen am 20. Nov 2003 · letzter Beitrag vom 23. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#11

Re: JPEG Datei in NonVCL Prog laden

  Alt 21. Nov 2003, 23:32
Zitat von OLLI_T:
HY Choose! Mit Deinem Wert klappt es nicht.
Sorry, mein Fehler: Habe fälschlicher Weise die IID aus den MSOffice-Server-Beschreibungen gezogen. Die Deklaration aus OleCtl, der Unit in der die von Dir benutzte Funktion OleLoadPicture eingebunden wird, stimmt mit der von Dir geposteten Version überein.
gruß, choose
  Mit Zitat antworten Zitat
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#12

Re: JPEG Datei in NonVCL Prog laden

  Alt 21. Nov 2003, 23:32
Hey, jetzt nicht meckern. Ich hab das so nur zu Demozwecken gemacht!

So bekommst Du das PIC zu sehen ... :

Delphi-Quellcode:
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;
Bin gerade dabei das Teil in meine DIB-Klasse einzubinden. Jetzt gibt es endlich einen Constructor CreateFromJPEGRessource.

Tschau

OLLI
No Pain No Gain!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#13

Re: JPEG Datei in NonVCL Prog laden

  Alt 23. Nov 2003, 13:47
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
CloseHandle(hFile); dann im finally-Teil stehen sollte.

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:
If (dwFileSize = -1) Then Exit;
dass der Vergleich immer Falsch ergibt. Ein DWord hat kein Vorzeichen und kann daher auch nicht kleiner als Null werden. Richtig wäre IMHO
if(dwFileSize = INVALID_FILE_SIZE) then exit; 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:
Delphi-Quellcode:
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;
Meine IPicture-Variable ist übrigens lokal, heißt "pPic" und wird als VAR-Parameter an deine (von mir leicht umgeschriebene) Funktion "LoadPicture" übergeben.

So, meine eigene Frage betrifft jetzt lediglich den Sinn der Werte 2540 in den Zeilen
Delphi-Quellcode:
    nWidth := MulDiv(hmWidth,GetDeviceCaps(DC,LOGPIXELSX),2540);
    nHeight := MulDiv(hmHeight,GetDeviceCaps(DC,LOGPIXELSY),2540);
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?

Gruß.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz