Здравствуйте, при разработке под Linux использую такой код для отрисовки иконок объектов в точке на карте. На linux все нормально отрабатывает, на Windows буфер пустой, где может быть ошибка? Версия GTK FREE 13.2.1.1.
Код |
---|
QIcon ListObjectDialog::getObjectIcon(HOBJ obj)
{
RECT ClientRect;
int ClientHeight = 64;
int ClientWidth = 64;
MAPDFRAME frame;
mapObjectFrame(obj, &frame);
mapPlaneToPicture(map, &frame.X1, &frame.Y1);
mapPlaneToPicture(map, &frame.X2, &frame.Y2);
double scale = ClientWidth/(abs(frame.X2 - frame.X1)*1.000000);
double scale2 = ClientHeight/(abs(frame.Y2 - frame.Y1)*1.000000);
if(scale2 < scale) scale = scale2;
double oldscale = mapGetRealShowScale(map);
long x = 0;
long y = 0;
if(mapObjectLocal(obj) == LOCAL_SQUARE) {
scale = scale/2;
}
mapChangeViewScale(map, &x, &y, scale);
mapObjectFrame(obj, &frame);
DOUBLEPOINT _Center;
_Center.X = 0.5*(frame.X1+frame.X2);
_Center.Y = 0.5*(frame.Y1+frame.Y2);
mapPlaneToPicture(map, &_Center.X, &_Center.Y);
RECT rect;
rect.LT = _Center.X - ClientWidth/2 ;
rect.UP = _Center.Y - ClientHeight/2 ;
rect.RT = rect.LT + ClientWidth;
rect.DN = rect.UP + ClientHeight;
XIMAGEDESC desc;
memset((void*) &desc, 0, sizeof(desc));
desc.Width = rect.right - rect.left;
desc.Height = rect.bottom - rect.top;
desc.Depth = 32;
desc.CellSize = desc.Depth / 8;
desc.RowSize = desc.Width * desc.CellSize;
desc.Point = (char*) malloc(desc.Height * desc.RowSize);
memset((void*) desc.Point, 0, desc.Height * desc.RowSize);
mapPaintMapObjectToDib(map, desc.Point, desc.Width, desc.Height,
&rect, nullptr, obj);
QImage im((const uchar*) desc.Point, desc.Width, desc.Height, desc.RowSize,
QImage::Format_ARGB32);
im = im.scaled(48, 48);
mapSetRealShowScale(map, oldscale);
free(desc.Point);
return QPixmap::fromImage(im);
} |