Datasnapでビットマップを渡すには?

解決


Quest  2013-07-01 10:45:17  No: 44780

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です。


Quest  2013-07-12 02:00:16  No: 44781

自己レスです。

エンバカデロのﴋ「気鵑♤韻犬茲Δ覆海箸鬚靴討い泙靴拭」
Base64でエンコードする、あるいはTStream型で渡せばいいようです。
> http://blogs.embarcadero.com/teamj/2013/07/11/3990/

まだ、実際のコードに落としていませんが
取り敢えず解決にします。


Quest  2013-07-12 02:02:39  No: 44782

あれれ?  文字化け?

あ、「高橋さん」の「高」が「はしご高」になってたみたい。
正しくは

エンバカデロの高橋さんが、同じようなことをしていました。

です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加