public bool EqualsTo(MaikazeImage img)
 {
     if (this.w == img.w && this.h == img.h)
         return true;
     return false;
 }
 public void MergeImage(MaikazeImage mergeBmp, int merge_x, int merge_y)
 {
     int ori_bpp = bitDepth / 8;
     int ref_bpp = mergeBmp.bitDepth / 8;
     int start_x = merge_x;
     int start_y = merge_y;
     if (merge_x < 0)    start_x = 0;
     if (merge_y < 0)    start_y = 0;
     for (int i = start_y; i < mergeBmp.h + start_y; i++)
         for (int j = start_x; j < mergeBmp.w + start_x; j++)
         {
             if (ref_bpp == 4 && mergeBmp.px[((i - start_y) * mergeBmp.w + j - start_x) * ref_bpp + 3] == 0)
                 continue;
             px[(i * w + j) * ori_bpp + 0] = (byte)((mergeBmp.px[((i - start_y) * mergeBmp.w + j - start_x) * ref_bpp + 0] - px[(i * w + j) * ori_bpp + 0]) * mergeBmp.GetAlpha() / 255 + px[(i * h + j) * ori_bpp + 0]);
             px[(i * w + j) * ori_bpp + 1] = (byte)((mergeBmp.px[((i - start_y) * mergeBmp.w + j - start_x) * ref_bpp + 1] - px[(i * w + j) * ori_bpp + 1]) * mergeBmp.GetAlpha() / 255 + px[(i * h + j) * ori_bpp + 1]);
             px[(i * w + j) * ori_bpp + 2] = (byte)((mergeBmp.px[((i - start_y) * mergeBmp.w + j - start_x) * ref_bpp + 2] - px[(i * w + j) * ori_bpp + 2]) * mergeBmp.GetAlpha() / 255 + px[(i * h + j) * ori_bpp + 2]);
         }
     RefreshImageFromPixels();
 }