0

我正在为我的大学 C++ 期末考试编写一个交付程序。我已经下载了高清 googlemaps 屏幕截图,但在我的面板上绘制它时遇到了一个大问题。我创建一个矩形作为缩放,仅绘制图像的那部分。但我的代码似乎没有这样做。我需要在面板上绘制矩形作为真实图片的比例图像,因为我将进行缩放,并将地图作为谷歌地图移动,所以我需要控制矩形的大小。当我运行这段代码时,它只显示了一半的图像。

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