Datasnapでデータセット以外にも渡せる様なので
Bitmapを渡せないものかと試してみましたが
単純にサーバーメソッドの返り値の型をTBitmapにすると
「この操作をサポートするために十分な RTTI がありません」という
エラーになりました。
取り敢えずは返り値をstring型にして、一旦メモリストリームに読み込んだ
ビットマップデータを16進表記の文字列にして返すようにしましたが
もっと単純な方法はないものでしょうか。
下記の例ではImageListに入っている5つのビットマップから
指定したものを返すようにしています。
function TServerMethods1.GetGameImage(Index: integer): string;
var
bmp: TBitmap;
ms: TMemoryStream;
i: integer;
b: Byte;
begin
if Index in [1..5] then
begin
bmp := TBitmap.Create;
ms := TMemoryStream.Create;
try
ImageList1.GetBitmap(Index-1, bmp);
bmp.SaveToStream(ms);
ms.Position := 0;
Result := '';
for i := 0 to ms.Size-1 do
begin
ms.Read(b, 1);
Result := Result + IntToHex(b,2);
end;
finally
ms.Free;
bmp.Free;
end;
end
else
Result := '';
end;
環境はDelphi XE3,WindowsXPです。
自己レスです。
エンバカデロのﴋ「気鵑♤韻犬茲Δ覆海箸鬚靴討い泙靴拭」
Base64でエンコードする、あるいはTStream型で渡せばいいようです。
> http://blogs.embarcadero.com/teamj/2013/07/11/3990/
まだ、実際のコードに落としていませんが
取り敢えず解決にします。
あれれ? 文字化け?
あ、「高橋さん」の「高」が「はしご高」になってたみたい。
正しくは
エンバカデロの高橋さんが、同じようなことをしていました。
です。
ツイート | ![]() |