• C# Bitmap 复制


    以后再详述,先上代码。

     1 public bool CopyBitmap(Bitmap source, Bitmap destination)
     2 {
     3     if ((source.Width != destination.Width) || (source.Height != destination.Height) || (source.PixelFormat != destination.PixelFormat))
     4     {
     5         return false;
     6     }
     7 
     8     int bitdepth_per_pixel = Bitmap.GetPixelFormatSize(source.PixelFormat) / 8;
     9 
    10     if (bitdepth_per_pixel != 1 && bitdepth_per_pixel != 3 && bitdepth_per_pixel != 4)
    11     {
    12         return false;
    13     }
    14 
    15     BitmapData source_bitmapdata = null;
    16     BitmapData destination_bitmapdata = null;
    17 
    18     try
    19     {
    20         source_bitmapdata = source.LockBits(new Rectangle(0, 0, source.Width, source.Height), ImageLockMode.ReadWrite,
    21                                         source.PixelFormat);
    22         destination_bitmapdata = destination.LockBits(new Rectangle(0, 0, destination.Width, destination.Height), ImageLockMode.ReadWrite,
    23                                         destination.PixelFormat);
    24 
    25         int source_bitmapdata_bitdepth_width = source_bitmapdata.Width * bitdepth_per_pixel;
    26         int source_bitmapdata_height = source_bitmapdata.Height;
    27         int source_bitmapdata_bitdepth_stride = source_bitmapdata.Stride;
    28 
    29         unsafe
    30         {
    31             byte* source_ptr = (byte*)source_bitmapdata.Scan0;
    32             byte* destination_ptr = (byte*)destination_bitmapdata.Scan0;
    33 
    34             int offset = source_bitmapdata_bitdepth_stride - source_bitmapdata_bitdepth_width;
    35 
    36             for (int i = 0; i < source_bitmapdata_height; i++)
    37             {
    38                 for (int j = 0; j < source_bitmapdata_bitdepth_width; j++, source_ptr++, destination_ptr++)
    39                 {
    40                     *destination_ptr = *source_ptr;
    41                 }
    42 
    43                 source_ptr += offset;
    44                 destination_ptr += offset;
    45             }
    46         }
    47 
    48         source.UnlockBits(source_bitmapdata);
    49         destination.UnlockBits(destination_bitmapdata);
    50 
    51         return true;
    52     }
    53     catch { return false; }
    54 }
  • 相关阅读:
    乐理学习
    hashtable
    vim配置
    SSH & Git
    Java实现单向链表反转
    Java实现二叉树遍历
    Mysql主从配置
    使用VirtualBox虚拟机搭建局域网
    Nginx配置try_files实践一
    Maven package打包webapp项目遇到的问题
  • 原文地址:https://www.cnblogs.com/daocaoren/p/3373964.html
Copyright © 2020-2023  润新知