亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

根據灰度值填充字符-單文件單線程版

2020-01-24 03:36:56
字體:
來源:轉載
供稿:網友
看到軟二的群里,某童鞋發了個自己的java大作業的截圖,類似于一個圖片,處理后,根據不同的灰度值,填充不同的字符。故,我也用C#來寫個玩玩~
首先,圖片讀入內存,然后- - 有三種處理方式,
第一種是getPixel,然后setPixel。。。
第二種是將圖片數據讀出,放到byte數組中,然后去讀,再copy回去。
第三種是不copy數據,直接在當前圖片數據流上操作,然后再解鎖就可以了。
由于去年做過類似的工作,所以知道效率問題,第一種。。。速度會很慢(相比較第二種和第三種)。第二種和第三種相差不是很多。但是第三種需要使用unsafe字段。
在這里,我選用第三種進行操作。
界面就不說了。一個按鈕,兩個pictureBox,一個存原圖,一個存字符圖。
處理代碼如下
復制代碼 代碼如下:

private void button1_Click(object sender, EventArgs e)
{
//打開文件
OpenFileDialog open = new OpenFileDialog();
open.Filter = "jpeg圖片文件|*.jpg";
if (open.ShowDialog() != DialogResult.OK)
return;
string filePath = open.FileName;
//打開圖片,顯示原始圖
Image img = Image.FromFile(filePath);
sourcePicturebox.Image =img ;
//再次讀取一次圖潘
Bitmap bitmap = new Bitmap(img);
//鎖定圖片處理區域
Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
BitmapData bmpData = bitmap.LockBits(rect, ImageLockMode.ReadWrite, bitmap.PixelFormat);
//初始化字符串數組
string[] str = new string[bitmap.Height];
//不安全代碼塊
unsafe
{
//獲取首指針
byte* ptr = (byte*)(bmpData.Scan0);
for (int height = 0; height < bmpData.Height; height++)
{
//由于測試圖片是32RGB圖,所以,ptr一次移動四位
for (int width = 0; width < bmpData.Width; width++,ptr+=4)
{
str[height] += ((byte)(0.333 * ptr[0] + 0.333 * ptr[1] + 0.333 * ptr[2])) > 128 ? "*" : " ";
}
//為防止圖片數據占用不為4的倍數,所以這里用stride,跳過多余的字節
ptr += bmpData.Stride - bmpData.Width * 4;
}
}
//圖片解鎖
bitmap.UnlockBits(bmpData);
//初始化打印字符參數,以及新建一個空白圖片
//空白圖片大小。。。。。測試得到的。后續改進
Font font=new System.Drawing.Font ("宋體",20.5f);
Bitmap resultBitmap = new Bitmap(img.Width * 14, img.Height * 14);
Graphics graphics = Graphics.FromImage(resultBitmap);
graphics.Clear(Color.White);
SolidBrush brush=new SolidBrush(Color.Black);
//打印字符,一次一行
for (int i = 0; i < img.Height; i++)
{
graphics.DrawString(str[i], font, brush,0,i*14);
}
//MessageBox.Show(font.GetHeight().ToString());
resultPicturebox.Image = resultBitmap;
//文件保存
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "jpeg圖片文件|*.jpg";
if(saveDialog.ShowDialog()==DialogResult.OK)
resultBitmap.Save(saveDialog.FileName, ImageFormat.Jpeg);
}

實驗結果如下
 
實驗的結果經過多次調整打印參數,結果還可以。但是,略顯緊湊。
***********************************************分隔線******************************************************
小結
由于選的圖,是32rgb的,在第一次處理的時候,還有點問題,當成24rgb處理了。。。。出錯。。。然后,改后,一開始以為多處的透明分量在低位,結果。。。原來在高位。不過還好最后成功了(其實就試下唄。。。先不處理成字符,而直接改變一個分量為0,然后看效果唄~)

原始圖片只有500*500不到,轉換后。。。圖片為6700+*6700+。。。太大了。。。所以,以后得先處理圖片,使其縮小,再進行處理。這里也有二種處理方式,第一是處理原始圖像,而是處理那個字符串數組。感覺吧,還是第一種直觀些。

然后,后續打印,可以考慮不用string存,而用char[,]來存,這樣,又可以用指針了,總覺得指針會快些~
看官可見,上面有一個測試按鈕,但是,我沒有給出代碼,其實那個是用來測試多線程的。打開文件的時候,允許同時選中多個文件,然后操作。這里就用到多線程。但是不知道為何,多線程操作的時候,出來的圖片就不對了,如果多線程多了后,還會拋出異常。。。。。就算我就開一個線程,操作一幅圖片,也會導致錯誤的結果。。。所以多線程的代碼沒有上傳,等改好再說吧。

PS.這個改好,估計還要很多天。。。。。畢竟。。。要考試了。。。還是復習去吧。。。前2天在家一點書沒看啊。

當然后續改進,不一定就一個多線程,還可以進行字符自定義填充?。ㄟ@個簡單點)?;蛘?,給個字符串填充額。然后多個灰度級,不同的灰度級給不同的字符填充。再比如。。??梢宰屗幚硭蓄愋偷撵o態圖。。。。(由于那個32RGB的關系。。。特意看了下,還有好多種的。。。)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品日产aⅴ| 国产福利成人在线| 欧美国产高跟鞋裸体秀xxxhd| 国外色69视频在线观看| 成人激情在线观看| 日韩av有码在线| 激情成人在线视频| 亚洲va欧美va在线观看| 中文字幕日韩在线视频| 国产一区二区视频在线观看| 欧美性猛交xxxx富婆| 国产精品视频一区二区三区四| 色香阁99久久精品久久久| 久久久精品欧美| 午夜精品久久久久久99热| 久久99热这里只有精品国产| 亚洲色图18p| 日韩最新免费不卡| 亚洲国产精品网站| 色av中文字幕一区| 成人在线激情视频| 亚洲白虎美女被爆操| 国语自产精品视频在免费| 久久好看免费视频| 国产在线一区二区三区| 欧美裸身视频免费观看| 久久精品99久久香蕉国产色戒| 欧美激情一区二区三级高清视频| 在线激情影院一区| 国产一区二区三区在线| 国产一区二区视频在线观看| 国产日韩精品电影| 亚洲精品欧美极品| 欧美大尺度电影在线观看| 国产精品久久久久久亚洲影视| 中日韩美女免费视频网址在线观看| 日本国产欧美一区二区三区| 欧美性在线观看| 国产亚洲精品一区二555| 在线丨暗呦小u女国产精品| 正在播放亚洲1区| 亚洲综合小说区| 91国产精品91| 日韩一二三在线视频播| 91大神福利视频在线| 亚洲成人黄色网址| 91亚洲午夜在线| 亚洲国产欧美自拍| 亚洲精品国产免费| 国产精品手机播放| 亚洲色图在线观看| 日韩av一区二区在线| 亚洲最大av网站| 91久久精品在线| 日韩高清av在线| 精品国产区一区二区三区在线观看| 国产精品一区二区三区成人| 插插插亚洲综合网| 亚洲国产精品久久久| 亚洲免费视频一区二区| 国产拍精品一二三| 久久视频在线观看免费| 91精品国产91久久久久久吃药| 午夜精品久久久久久久99热| 久久久亚洲影院| 日韩精品免费在线播放| 亚洲www在线| 亚洲一区第一页| 国产一区二区视频在线观看| 亚洲成人在线视频播放| 91精品在线观看视频| 亚洲日韩中文字幕| 久久影视电视剧免费网站清宫辞电视| 在线观看国产精品淫| 国产日韩在线看| 亚洲色图狂野欧美| 亚洲欧美日韩国产精品| 亚洲自拍小视频免费观看| 欧美性生交xxxxx久久久| 欧美成人一二三| 精品欧美国产一区二区三区| 日韩av不卡电影| 亚洲色图偷窥自拍| 中文字幕在线成人| 日韩视频永久免费观看| 亚洲国产日韩欧美综合久久| 国产日韩欧美在线看| 一区二区欧美久久| 欧美激情精品久久久| 亚洲欧洲国产精品| 亚洲成色777777女色窝| 久久久人成影片一区二区三区观看| 国产男女猛烈无遮挡91| 日本高清视频一区| 2018国产精品视频| 久久国产精品久久久久| 91精品视频免费看| 亚洲va电影大全| 久久免费视频网| 国色天香2019中文字幕在线观看| 奇米4444一区二区三区| 成人欧美在线观看| 最近的2019中文字幕免费一页| 国产精品成人品| 一区二区av在线| 国产日韩专区在线| 久久精品精品电影网| 欧美人与性动交a欧美精品| 国产精品视频一| 久久久久久久久久久网站| 国产精品久久久久福利| 91国在线精品国内播放| 亚洲精品女av网站| 国产又爽又黄的激情精品视频| 久久国产精品久久精品| 国产在线不卡精品| 欧美成人免费一级人片100| 亚洲色图综合久久| 97久久久久久| 美女撒尿一区二区三区| 国产精品一区二区电影| 伊人久久综合97精品| 68精品国产免费久久久久久婷婷| 精品视频www| 红桃视频成人在线观看| 亚洲电影免费观看高清完整版在线观看| 精品国产一区二区三区四区在线观看| 青青青国产精品一区二区| 精品网站999www| 亚洲人成毛片在线播放| 欧美另类暴力丝袜| 国产精品一区久久| 国产精品一二区| 18一19gay欧美视频网站| 91精品国产自产在线老师啪| 久久久久久亚洲精品中文字幕| 国产精品色午夜在线观看| 久久久av亚洲男天堂| 国产精品高清免费在线观看| 98视频在线噜噜噜国产| 国产日韩在线视频| 九九热精品视频| 日日狠狠久久偷偷四色综合免费| 日韩欧美综合在线视频| 国产一区二区三区免费视频| 中文字幕日韩av| 亚洲精品成人久久久| 国产精品久久综合av爱欲tv| 亚洲欧美另类在线观看| 久久精品一本久久99精品| 成人黄色片在线| 久久青草精品视频免费观看| 欧美在线观看www| 日韩视频免费大全中文字幕| 免费99精品国产自在在线| 4438全国亚洲精品在线观看视频| 亚洲天堂久久av| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品永久免费精品| 97成人精品区在线播放| 欧美黑人视频一区| 亚洲大尺度美女在线| 欧美一区深夜视频| 97av在线影院|