掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLと画像データをやり取りする型は? (ID:40850)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
KHE00221さん こんにちは。 HDCですか・・・ なるほどです。 ちょっとやってみました。 元のCanvasのサイズに変更がなければ、これで十分かな・・・ 拡大縮小や回転等が必要な場合は、もう少し捻らないと・・・ まぁサンプルなので・・・ メイン側 procedure TForm1.Button3Click(Sender: TObject); var DllName : String; p : Pointer; WHND : THandle; SaveJpgCanvas : procedure(FName : PChar; ACanvas : HDC; w,h : Integer); stdcall; begin if OpenDialog1.Execute then begin DllName := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)); DllName := DllName + 'JpegSaveDll.Dll'; Image1.Picture.LoadFromFile(OpenDialog1.FileName); WHND := LoadLibrary(PChar(DllName + #0)); if WHND >= HINSTANCE_ERROR then begin p := GetProcAddress(WHND, 'SaveJpgCanvas'); if p <> nil then begin @SaveJpgCanvas := p; SaveJpgCanvas('E:\test2.jpg',Image1.Picture.Bitmap.Canvas.Handle , Image1.Picture.BITMAP.Width, Image1.Picture.Bitmap.Height); end; end; end; end; DLL側 procedure SaveJpgCanvas(FName : PChar; ACanvas : HDC; W,h : Integer); stdcall; var Bmp : TBitmap; Jpg : TJpegImage; begin Bmp := TBitmap.Create; Jpg := TJpegImage.Create; try Bmp.width := w; Bmp.Height := h; Bmp.PixelFormat := pf24Bit; BitBlt(Bmp.Canvas.Handle,0,0,w,h,ACanvas,0,0,SRCCOPY); //メイン側で変更確認するための描画 Bmp.Canvas.Font.Size := 24; Bmp.Canvas.TextOut(100,100,'test test test'); Bitblt(ACanvas,0,0,w,h,Bmp.Canvas.Handle,0,0,SRCCOPY); Jpg.Assign(Bmp); Jpg.SaveToFile(FName); finally Bmp.Free; Jpg.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.