OSM Karte in TImage
-
Hallo,
ich möchte in ein TImage Objekt eine OSM Tile Map laden.
Mein Code sieht folgendermassen aus:
{
TPngImage * png = new TPngImage( );
TStream * stream = new TStream( "http://tile.openstreetmap.org/4/2/2.png" );
png->LoadFromStream( stream );
Graphics::TBitmap * bit = new Graphics::TBitmap( );
bit->Assign( png );
Form1->Image1->Canvas->Brush->Bitmap = bit;
Form1->Image1->Canvas->FillRect( Rect( 0, 0, 300, 300 ) );
}Hat jemand eine Idee wie ich TStream richtig instanziere?
-
Ich habe eine Lösung.
{ TMemoryStream * ms = new TMemoryStream( ); TIdHTTP * HTTP = new TIdHTTP( ); HTTP->Get( "http://tile.openstreetmap.org/4/2/2.png", ms ); ms->Seek( 0, soFromBeginning ); TPngImage * png = new TPngImage( ); png->LoadFromStream( ms ); Graphics::TBitmap * bit = new Graphics::TBitmap( ); bit->Assign( png ); Form1->Image1->Canvas->Draw( 0, 0, bit ); }
-
TStream beherrscht kein HTTP. Dazu musst du eine Komponente verwenden, die das kann, z.B. von Indy (TIdHTTP). Das Ergebnis der HTTP-Anfrage kann in den (Memory)Stream und weiterverwendet werden.
-
Wenn du mit
new
Objekte auf dem heap allokierst und instanzierst musst du diese mit
delete
nach Verwendung wieder freigeben. Alles andere ist gelinde gesagt höchst unsauber....
-
Schlaue Zeiger sind da angebracht.
-
Oder so