0

私は大学の最終試験の C++ に関する配信プログラムを作成しています。hd googlemaps スクリーンショットをダウンロードしましたが、パネルに描画するのに大きな問題があります。画像のその部分だけを描画するために、ズームとして四角形を作成します。しかし、私のコードはそうしていないようです。実際の画像の縮尺イメージとしてパネルに四角形を描画する必要があります。これは、ズームを行い、マップを Google マップとして移動するため、四角形のサイズを制御する必要があるためです。このコードを実行すると、画像の半分だけが表示されます。

anchoImagen = PB_Mapa->Width/zoom; // zoom=1
altoImagen =  PB_Mapa->Height/zoom; 
Graphics ^g = this->P_Mapa->CreateGraphics();

int gWidth = (int)g->VisibleClipBounds.Width;
int gHeight = (int)g->VisibleClipBounds.Height;
BufferedGraphicsContext ^espacioBuffer = BufferedGraphicsManager::Current;

// Colocamos el tamaño máximo del Buffer 
// el +1 es para evitar errores de memoria.
espacioBuffer->MaximumBuffer = System::Drawing::Size( gWidth + 1, gHeight + 1 );

// Creamos un canvas dentro del espacio del buffer utilizando el canvas
// del formulario
BufferedGraphics ^buffer = espacioBuffer->Allocate(g, Drawing::Rectangle(0, 0, gWidth, gHeight));
buffer->Graphics->Clear(Color::White); 

// Declaramos un rectangulo con las dimensiones del pedazo del sprite a utilizar
Bitmap^ imgTransparente = gcnew Bitmap( PB_Mapa->Image);
Drawing::Rectangle porcionAUsar = Drawing::Rectangle(x,y,anchoImagen,altoImagen);

// Dibujamos la imagen en la posicion 
buffer->Graphics->DrawImage(imgTransparente, 0,0, porcionAUsar, GraphicsUnit::Pixel);

buffer->Render(g);

// Limpiamos la memoria reservada
delete buffer;
delete espacioBuffer;
delete g;
4

0 に答える 0