惨遇winform写入mysql数据库乱码问题,第一次写程序,大家快来帮忙看看啊

解决方案 »

  1.   


    /******************************************************************************
    * 绘图函数, 支持水平翻转和垂直翻转
    * rop : (BM_TRANSPARENT 或者 BM_COPY ) | (FLIP_HORI 或者 FLIP_VERT)
    * transcolor : 透明色 (16bit)
    *****************************************************************************/int32 mmrc_bitmapShowFlip(uint16* p, int16 x, int16 y, uint16 mw, uint16 w, uint16 h, uint16 rop, 
      int16 sx, int16 sy, uint16 transcolor)
    {
    uint16 *dstp,*srcp;
    int MaxY, MaxX;
    int MinY = MAX(0, y);
    int MinX = MAX(0, x);
    uint16 dx,dy;
    uint16 BitmapRop, BitmapFlip;
    uint16 * screenBuf;
    mr_screeninfo  screeninfo;
    int32 scrWidth, scrHeight; //mrc_printf("mrc_bitmapShowFlip v1003 by Nevo 090603!");
    if(NULL == p)
    return MR_FAILED; //mrc_getScreenSize(&scrWidth, &scrHeight);
    mrc_getScreenInfo(&screeninfo);
    scrWidth = screeninfo.width;
    scrHeight = screeninfo.height;
    MaxY = MIN(scrHeight, y+h);
    MaxX = MIN(scrWidth, x+w);
    screenBuf = (uint16 *)w_getScreenBuffer();
    BitmapRop = rop & 0xff;
    BitmapFlip = rop&0xff00; switch (BitmapRop) 
    {
    case BM_TRANSPARENT:
    {
    switch(BitmapFlip)
    {
    case MTRANS_MIRROR_ROT180:
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (h - 1 - (dy - y - sy)) * mw + (MinX - x + sx);
    for (dx = MinX; dx < MaxX; dx++)
    {
    if (*srcp != transcolor)
    *dstp = *srcp;
    dstp++;
    srcp++;
    }  
    }
    break;
    case MTRANS_MIRROR:
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (dy - y+sy) * mw + sx;
    for (dx = MinX; dx < MaxX; dx++)
    {
    if (*(srcp + w - (dx-x)-1) != transcolor)
    *dstp = *(srcp + w - (dx-x)-1);
    dstp++;
    }
    }
    break;
    case MTRANS_ROT90:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (h+sy-1)*mw +(dy-y)+sx;
    for (dx = MinX; dx < MaxX; dx++)
    {
    if(*(srcp-(dx-x)*mw)!= transcolor)
    *dstp = *(srcp-(dx-x)*mw); dstp++;
    }
    }
    break;
    case MTRANS_ROT180:
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (h-1+sy)*mw +w-(dy-y)*mw-1+sx; for (dx = MinX; dx < MaxX; dx++)
    {
    if(*(srcp-(dx-x)) != transcolor)
    *dstp = *(srcp-(dx-x)); dstp++;
    }
    }
    break;
    case MTRANS_ROT270:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX); srcp = p +sx+sy * mw + w-(dy-y)-1; for (dx = MinX; dx < MaxX; dx++)
    {
    if(*(srcp+(dx-x)*mw) != transcolor)
    *dstp = *(srcp+(dx-x)*mw); dstp++;
    }
    }
    break;
    case MTRANS_MIRROR_ROT90:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX); srcp = p + sx +(h+sy-1)*mw+w-dy+y-1; for (dx = MinX; dx < MaxX; dx++)
    {
    if(*(srcp-(dx-x)*mw) != transcolor)
    *dstp = *(srcp-(dx-x)*mw); dstp++;
    }
    }
    break;
    case MTRANS_MIRROR_ROT270:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p+(sy)*mw-y+sx+dy; for (dx = MinX; dx < MaxX; dx++)
    {
    if(*(srcp+(dx-x)*mw) != transcolor)
    *dstp = *(srcp+(dx-x)*mw); dstp++;
    }
    }
    break;
    default:
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (dy - y+sy) * mw + (MinX - x + sx);
    for (dx = MinX; dx < MaxX; dx++)
    {
    if (*srcp != transcolor)
    *dstp = *srcp;
    dstp++;
    srcp++;
    }
    }
    break;
    }
    }
    break;
    case BM_COPY:
    default:
    switch(BitmapFlip)
    {
    case MTRANS_MIRROR_ROT180:
    if (MaxX > MinX)
    {
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (h - 1 - (dy - y - sy)) * mw + (MinX - x + sx); memcpy(dstp, srcp, (MaxX - MinX)<<1);
    }
    }
    break;
    case MTRANS_MIRROR:
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (dy - y + sy) * mw + sx;
    for (dx = MinX; dx < MaxX; dx++)
    {
    *dstp = *(srcp + w - (dx-x)-1);
    dstp++;
    }
    }
    break;
    case MTRANS_ROT90:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (h+sy-1)*mw +(dy-y)+sx;
    for (dx = MinX; dx < MaxX; dx++)
    {
    *dstp = *(srcp-(dx-x)*mw);
    dstp++;
    }
    }
    break;
    case MTRANS_ROT180:
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (h-1+sy)*mw +w-(dy-y)*mw-1+sx; for (dx = MinX; dx < MaxX; dx++)
    {
    *dstp = *(srcp-(dx-x));
    dstp++;
    }
    }
    break;
    case MTRANS_ROT270:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX); srcp = p +sx+sy * mw + w-(dy-y)-1; for (dx = MinX; dx < MaxX; dx++)
    {
    *dstp = *(srcp+(dx-x)*mw);
    dstp++;
    }
    }
    break;
    case MTRANS_MIRROR_ROT90:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX); srcp = p + sx +(h+sy-1)*mw+w-dy+y-1; for (dx = MinX; dx < MaxX; dx++)
    {
    *dstp = *(srcp-(dx-x)*mw);
    dstp++;
    }
    }
    break;
    case MTRANS_MIRROR_ROT270:
    if(w != h)
    {
    MaxY = MIN(scrHeight, y+w);
    MaxX = MIN(scrWidth, x+h);
    } for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p+(sy)*mw-y+sx+dy; for (dx = MinX; dx < MaxX; dx++)
    {
    *dstp = *(srcp+(dx-x)*mw);
    dstp++;
    }
    }
    break;
    default:
    if (MaxX > MinX)
    {
    for (dy=MinY; dy < MaxY; dy++)
    {
    dstp = (uint16 *)(screenBuf + dy * scrWidth + MinX);
    srcp = p + (dy - y + sy) * mw + (MinX - x + sx);
    memcpy(dstp, srcp, (MaxX - MinX)<<1);
    }
    }
    break;
    }
    break;
    }
    return MR_SUCCESS;
    }