日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 合并BitMap图像,生成超大bitmap

發布時間:2023/12/4 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 合并BitMap图像,生成超大bitmap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用c#,合并多個bitMap圖像

當只需要兩個圖像合并的時候,可以簡單的使用gdi+,把兩個圖像畫到一個畫布上面實現合并bitmap.

當需要將許多bitmap合并時,由于bitmap類限制,長度或寬度太大時會報異常,前面這種方法就行不通了。

由于bitmapp屬于位圖格式,了解圖像格式后,發現,bitmap文件的第3-8位存儲了文件大小信息,第19-22位存儲了高度信息,第23-26位存儲了寬度信息。文件頭后面都是像素的argb,并無其它信息。于是,試想一下,如果把第二張圖像的像素argb放到第一張后面,并修改第一張的文件頭信息,是不是就可以實現文件合并了呢。事實證明:yes。

下面就看看代碼:

//設置文件頭里面文件大小信息

public void SetBitmapFileSizeInfo(string filePath){FileInfo fileInfo = new FileInfo(filePath); long le = fileInfo.Length; string hexSize = le.ToString("X").PadLeft(8, '0'); int size1 = Convert.ToInt32(hexSize.Substring(0, 2), 16); int size2 = Convert.ToInt32(hexSize.Substring(2, 2), 16); int size3 = Convert.ToInt32(hexSize.Substring(4, 2), 16); int size4 = Convert.ToInt32(hexSize.Substring(6, 2), 16); byte[] sizeBytes = new byte[] { (byte)size4, (byte)size3, (byte)size2, (byte)size1 }; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write)){ using (BinaryWriter r = new BinaryWriter(fs)){r.Seek(2, 0);r.Write(sizeBytes, 0, sizeBytes.Length);}}}

設置文件頭里面文件長度和寬度信息

public void SetBitmapSizeInfo(string filePath,int width=0,int height=0){ if (height != 0){ string hexHeight = height.ToString("X").PadLeft(8, '0'); int h1 = Convert.ToInt32(hexHeight.Substring(0, 2), 16); int h2 = Convert.ToInt32(hexHeight.Substring(2, 2), 16); int h3 = Convert.ToInt32(hexHeight.Substring(4, 2), 16); int h4 = Convert.ToInt32(hexHeight.Substring(6, 2), 16); byte[] sizeHeight = new byte[] { (byte)h4, (byte)h3, (byte)h2, (byte)h1 }; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite)){ using (BinaryWriter r = new BinaryWriter(fs)){r.Seek(22, 0);//高度保存位置r.Write(sizeHeight, 0, sizeHeight.Length);}}} if (width != 0){ string hexWidth = height.ToString("X").PadLeft(8, '0'); int w1 = Convert.ToInt32(hexWidth.Substring(0, 2), 16); int w2 = Convert.ToInt32(hexWidth.Substring(2, 2), 16); int w3 = Convert.ToInt32(hexWidth.Substring(4, 2), 16); int w4 = Convert.ToInt32(hexWidth.Substring(6, 2), 16); byte[] sizeWidth = new byte[] { (byte)w4, (byte)w3, (byte)w2, (byte)w1 }; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite)){ using (BinaryWriter r = new BinaryWriter(fs)){r.Seek(18, 0);//高度保存位置r.Write(sizeWidth, 0, sizeWidth.Length);}}}}

合并多個bitmap文件,并生成一個最終文件

private void CreateBitMap(string tempPath,string imagePath){ string[] files = Directory.GetFiles(tempPath, "*.png");Bitmap bmp; int height=0; for (int i = files.Length-1; i >0; i--){ string fileName = files[i];bmp = new Bitmap(fileName); if (i == files.Length - 1){bmp.Save(imagePath, ImageFormat.Bmp);height += bmp.Height;bmp.Dispose(); continue;} else{ byte[] bytes = GetImageRasterBytes(bmp, PixelFormat.Format32bppRgb); using (FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.Write)){fs.Seek(fs.Length, 0);fs.Write(bytes, 0, bytes.Length);}height += bmp.Height;bmp.Dispose();}}SetBitmapFileSizeInfo(imagePath);SetBitmapSizeInfo(imagePath, height: height); //MessageBox.Show("合并成功");} private static byte[] GetImageRasterBytes(Bitmap bmp, PixelFormat format){Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); byte[] bits = null; try{ // Lock the managed memoryBitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadWrite, format); // Declare an array to hold the bytes of the bitmap.bits = new byte[bmpdata.Stride * bmpdata.Height]; // Copy the values into the array.System.Runtime.InteropServices.Marshal.Copy(bmpdata.Scan0, bits, 0, bits.Length); // Release managed memorybmp.UnlockBits(bmpdata);} catch{ return null;} return bits;}

完成嘍。

如果喜歡,點個贊唄~

總結

以上是生活随笔為你收集整理的C# 合并BitMap图像,生成超大bitmap的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最新精品国产 | 99精品视频网站 | 美女视频毛片 | 黄色一区二区三区 | 国产95在线 | 欧美野外猛男的大粗鳮 | 亚洲一区二区电影网 | 女人一区二区 | 欧美激情 在线 | 国模二区 | 亚洲草逼视频 | 午夜极品视频 | 美腿丝袜一区二区三区 | 99久久精品免费看国产免费软件 | 免费一区二区三区视频在线 | 天天鲁一鲁摸一摸爽一爽 | 亚洲专区一区 | av在线观看地址 | 啪啪av导航| 亚洲视频在线网 | 国内精品视频 | 成人免费区一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲国产精品免费视频 | 美国一级大黄一片免费中文 | 亚洲av成人片色在线观看高潮 | 久久久久久久毛片 | 成人无码一区二区三区 | 亚洲精品成人无码 | 国产第56页 | 亚洲综合在线一区二区 | 日韩黄色一级片 | 免费观看美女裸体网站 | 日本xxxxxxxxx69 | 婷婷的五月 | 禁止18在线观看 | 亚洲午夜一区 | 国产第一页在线观看 | 欧美乱三级 | 成人福利在线 | 中国老太婆性做爰 | 国产精品毛片一区二区三区 | 在线观看亚洲欧美 | 丰满少妇一区二区三区 | 亚洲精品一级 | 污污网址在线观看 | 超碰免费在线97 | 深夜国产在线 | 久久久视| 亚洲色图日韩精品 | 中文字幕日韩视频 | 五十路中文字幕 | 欧美在线亚洲 | 国产综合图片 | 久久精品丝袜 | 亚洲成人mv | 日韩性猛交ⅹxxx乱大交 | 国产cao | 美日韩精品视频 | 午夜肉伦伦 | 国产一级性生活片 | 欧美激情欧美激情在线五月 | 久久婷综合 | 精品国产一区二区三区性色 | 影音先锋在线中文字幕 | 日本精品99 | 国产精品极品白嫩在线 | 黄色网页免费在线观看 | 午夜激情视频网站 | 制服丝袜国产精品 | 久久精品色 | 香蕉视频2020| 人妻无码一区二区三区四区 | 青青草原综合久久大伊人精品 | 在线精品自拍 | 日韩免费福利视频 | 亚洲欧美专区 | 人与性动交zzzzbbbb | 中文字幕高清一区 | 欧美日韩123区 | aaaaaa毛片| 色综合久久久 | 亚洲乱视频 | 精品国精品国产自在久不卡 | 国产色综合网 | 99r热 | 青娱乐在线免费视频 | 国产思思| av毛片在线看 | 亚州一区二区 | 久久久久久一 | 国产精品扒开做爽爽爽的视频 | 黄色大片在线看 | 老妇荒淫牲艳史 | 一本无码aⅴ久久久国产 | 草草屁屁影院 | 色屁屁影院www国产高清麻豆 | 91调教视频 | 看片在线 |