掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FMX-TBitmapはThread-safe? (ID:151833)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
mamさん、ありがとうございます。 ・使い方は「例1」とほぼ同じです。 ・URLは都度URL生成関数を呼び出し、そこでは時刻からURLを生成しています。 ・この画像取得部分の処理はここだけです。 が、よく考えると、このTTask内の処理が終了する前に、この画像処理関数を呼んでしまうことはあるかもです。 ・スレッドの最大数はコア数×25がデフォルトの値とのことですが、そこまでは使ってません。 --------------------- function CreateURL: string begin // ... end; procedure TForm1.GetImage; begin // ここで少しUI処理 TTask.Run( procedure var HTTPClient: THTTPClient; Response: IHTTPResponse; Stream: TMemoryStream; ABitmap: TBitmap; BitmapData: TBitmapData; Line: PAlphaColorArray; AColor: TAlphaCOlorRec; begin HTTPClient := THTTPClient.Create; Stream := TMemoryStream.Create; ABitmap := TBitmap.Create; try {$IFDEF MSWINDOWS} HTTPClient.AcceptEncoding := 'gzip deflate'; HTTPClient.AutomaticDecompression := [THTTPCompressionMethod.GZip, THTTPCompressionMethod.Deflate]; {$ENDIF} try Response := HTTPClient.Get(CreateURL, Stream); if (Response.StatusCode = 200) and (Stream.Size > 0) then begin ABitmap.LoadFromStream(Stream); if ABitmap.Map(TMapAccess.ReadWrite, BitmapData) then begin try for var Y := 0 to BitmapData.Height - 1 do begin Line := BitmapData.GetScanline(Y); for var X := 0 to BitmapData.Width - 1 do begin AColor.Color := Line^[X]; //ここで画像処理 Line^[X] := AColor.Color; end; end; finally ABitmap.Unmap(BitmapData); end; end; TThread.Synchronize(nil, procedure begin Image1.Bitmap := ABitmap; end); end; except end; finally HTTPClient.Free; Stream.Free; ABitmap.Free; end; end); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.