天天看點

C# 圖檔RGB處理判斷

C# 圖檔RGB處理判斷

需要:根據一張原始圖的RGB平均值和新的圖檔的RGB平均值的差距,來判斷圖中是否出現除原圖中物體外的其他物體

前提:.Net framework 4.8 及以上

示例代碼:

程式集:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
           

主體代碼:

public static bool CheckRGBAvg(Bitmap srcBitmap, int avgRed, int avgGreen, int avgBlue, out Color color, int offset = 20)
        {

            int wide = srcBitmap.Width;
            int height = srcBitmap.Height;
            Rectangle rect = new Rectangle(0, 0, wide, height);
            //将Bitmap鎖定到系統記憶體中,獲得BitmapData
            BitmapData srcBmData = srcBitmap.LockBits(rect,
                      ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            //位圖中第一個像素資料的位址。它也可以看成是位圖中的第一個掃描行
            System.IntPtr srcPtr = srcBmData.Scan0;
            //将Bitmap對象的資訊存放到byte數組中
            int src_bytes = srcBmData.Stride * height;
            byte[] srcValues = new byte[src_bytes];
            //複制GRB資訊到byte數組
            System.Runtime.InteropServices.Marshal.Copy(srcPtr, srcValues, 0, src_bytes);
            //根據Y=0.299*R+0.114*G+0.587B,Y為亮度
            int r = 0;
            int g = 0;
            int b = 0;
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < wide; j++)
                {
                    //隻處理每行中圖像像素資料,舍棄未用空間
                    //注意位圖結構中RGB按BGR的順序存儲
                    int k = 3 * j;
                    r += srcValues[i * srcBmData.Stride + k + 2];
                    b += srcValues[i * srcBmData.Stride + k];
                    g += srcValues[i * srcBmData.Stride + k + 1];
                }
            }
            //解鎖位圖
            srcBitmap.UnlockBits(srcBmData);
            double avgR = r * 1.0 / height / wide;
            double avgG = g * 1.0 / height / wide;
            double avgB = b * 1.0 / height / wide;
            if (Math.Abs(avgB - avgBlue) <= offset && Math.Abs(avgG - avgGreen) <= offset && Math.Abs(avgR - avgRed) <= offset)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
           

note:

方法需要傳入新的圖檔對象(Bitmap),原圖的标準RGB平均值,新圖的RGB顔色,新圖和原圖的RGB相差偏移量。

傳回新圖的RGB平均值是否在原圖的RGB平均值偏移量之内。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

前段時間,一部名為《覺醒時代》的曆史革命劇在各大網際網路平台上熱播。觀衆欽佩陳氏三父子加入革命的堅定決心。

該劇曾獲得上海白玉蘭獎最佳劇情片提名等多項提名,陳彥年、陳巧年這兩個角色,讓無數觀衆記憶猶新。

今年7月1日,中國共産黨成立100周年之際,無數人自發來到安徽省合肥西縣鹽町路,向兩位烈士獻花祝福。

不過,熟悉曆史的朋友都覺得,為什麼在《覺醒時代》這部劇中,沒有梁啟超的戲,隻有陳獨秀隻是簡單地提到了一兩句話"梁仁公"。

"變法"失敗後,梁啟超提出了以"少年強,後中國強"為核心的思想理論。那麼,是《覺醒時代》的編劇故意隐瞞這段曆史,還是梁啟超"配不上"出現在電視劇中?

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

梁啟超出生于同濟十二年(公元1873年2月),廣東新學會會員。梁啟超的爺爺梁偉清和父親梁寶軒,都是廣東新會的大人物。

光緒十年(公元1884年),年僅12歲的梁啟超就赢得了表演人才。光緒十一年(公元1885年),梁啟超進入廣州學海堂學習。

直到光緒17年(公元1891年),梁啟超和陳啟秋等人以白康為師資,專攻孔、佛教以及西方理論為主要學習方向。

光緒21年(公元1895年)春,梁啟超和康有偉前往北京參加審判。就在清朝與日本簽訂《馬官條約》的時候,梁啟超、康有偉等人邀請了1000多人加入《清庭》一書,推出了著名的《公交書》,進而拉開了《維信法》的前奏。

"新法"的根本在于建立君主立憲制,打破封建壁壘,讓中國人民學習西方先進的制度理論,進而達到中西合一、國家富強人民的最終目标。

不幸的是,法律的修改持續了不到一百天,最終在慈禧等保守派的幹預下以失敗告終。梁啟超逃離北京,向東進入日本,開始了長達十四年的流亡生活。

三年(公元1911年),中華民國臨時總統袁世凱組成了新的内閣,梁啟超擔任新的法務部長。後來,袁世凱稱帝,張勳複辟等狠話,并加入了段玉睿政府。

他倡導新文化運動,支援五四運動。1929年1月,梁啟超在北京協和醫院去世,享年56歲。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

後來,他編纂了一本作品集,并于1936年9月出版了一本名為《冰室收藏》的書。《飲冰房集》共1000多萬字,148冊,是研究中國現代政治、思想、文化的重要材料。

1922年,梁啟超應邀到國立東南大學和法政大學任教。蘇州學者聽說梁啟超南下,催促他去蘇州演講。

後來在蘇州的這次演講中,梁啟超公開宣稱:"教育的最終目的不是簡單地灌輸知識,而是教學生做人。最後讓學生有自己的個性和人生觀,做一個不迷茫、不害怕、不擔心的世界。"

這篇演講是針對教育的本質,直到今天,它一直受到教育部門的高度重視。說了說梁啟超的傳記記錄,那麼重點分析一下,為什麼他沒有在《覺醒時代》中扮演一個角色呢?

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

可能有很多學生會說,也許梁啟超沒有與陳獨秀或毛澤東等人有過交集,是以《覺醒時代》并沒有出現梁啟超。

不知,徐光壽先生曾寫過一本書,書名叫《走出現代中國的陳獨秀》,這本書全面梳理了陳獨秀早期的思想。

陳獨秀出生于安徽省懷甯市,1897年趕到南京參加村試驗,奪得秀才。陳獨秀和梁啟超都是前清秀才,看穿了當時政治制度的腐敗,使"新學"改革的思想應運而生。

早期陳獨秀相信康有偉和梁啟超的"資産階級改革思想"。年中,陳獨秀成為孫中山先生的粉絲。1919年,陳獨秀接觸馬克思主義,開始建立中國共産黨。

這是陳獨秀一生的三大抉擇,他經曆了西方列強的失望、懷疑,完成了從資産階級民主向馬克思主義的轉變。

此外,梁啟超的《新人民談話》,以及《新人民系列》的主編,也對毛澤東、胡石等人産生了很大的影響。

1911年,毛澤東年輕時甚至認為:"孫中山為新政府主席,康有偉為總理,梁啟超為外長。"

毛澤東當時的思想還不夠成熟,但從這個思想中也可以看出,毛澤東從心底裡敬佩梁啟超。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

1918年,毛澤東在長沙成立了一個共産主義團體,并将其命名為"新人民社會"。毛澤東在《新青年周刊》第3卷第2期發表的《體育研究》一文中,闡述了他對梁啟超《新人民講話》的看法。

2016年,梁啟超寫給胡石的50多頁信件在閩大學生博物館展出。通過這些通信,未來人們可以了解到,梁啟超和胡石有着極其頻繁的交流,兩個人用書信進行詩歌探索、學術研究。

再想想看,梁啟超和陳獨秀、胡石、毛澤東在思想上都有一定的交集。甚至說梁啟超的"少年中國論"影響到胡石、陳獨秀、毛澤東等人,他們之間有着特殊的關系。

至于為什麼《覺醒時代》中沒有梁啟超的戲?答案很簡單。

首先,《覺醒時代》是一部電視劇,電視劇是一部影視作品。雖然是一部曆史性的革命緻敬劇,但為了使劇情連貫一緻,該劇在尊重曆史的同時,還摻雜了許多虛構的情節,包括不存在的曆史原型。

比如,陳延年與陳巧年、父親陳獨秀的曆史關系就非常死闆。為了烘烤出陳燕年和陳巧年兄弟的全貌,編劇稍微淡化了父子之間的沖突。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

此外,與陳燕年有過情感糾葛的劉梅,也是一個不存在的虛構人物。

這麼說隻是為了告訴你,電影、電視劇和電視劇并不能超越曆史的正統觀念。既然是電視劇,肯定會摻雜編劇的個人感受,進而創造出一些虛構的情節和人物。

同樣,《覺醒時代》也是一部緻敬劇,及時為中國共産黨成立100周年這個關鍵時刻,為群衆推出一部非常正能量的電視劇。

梁啟超雖然是近代中國最著名的思想家,但他提出了一系列理論,被陳獨秀、毛澤東等革命先驅視為經典。

但陳獨秀和毛澤東傾向于"打破舊世界,創造新世界"。梁啟超更傾向于建立君主立憲制,在封建統治的基礎上進行小修,讓老百姓生活和工作,孩子有書可以讀。

1924年,印度詩人泰戈爾通路中國。泰戈爾和梁啟超都主張"和平運動",非常反對所謂的"推翻論"。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

同時,陳獨秀、魯迅等人也紛紛反對泰戈爾。"泰戈爾的和平運動,就像是反對帝國主義的斯諾克,隻不過是帝國主義者的遊說者,"陳直言。

魯迅更直接地提到了泰戈爾訪華:"就像一大瓶香水,抽了幾根紳士的風格和神秘感。"

但梁啟超,卻對泰戈爾的觀點贊不絕口。

至少在《新青年周刊》創刊後,陳獨秀等人提出的"玉民論"與梁啟超的"新人論"背道而馳。

古雲,道是不同的,不互相尋找。新青年成立後的第一篇争議文章指向梁啟超。巧合的是,《新青年》第9卷第6期(也就是最後一篇争議的文章),還是指向梁啟超的。

與康有威、陳獨秀、胡石,包括不守規矩的魯迅相比,對梁啟超的态度要溫和得多。

從《新青年》的這些論戰文章中,不難看出,糾纏于崇尚康主義、反對共和主義的梁啟超,與新文化處于兩個極端。

如果說1895-1915年是中國現代思想的啟蒙時期。那是1916-1933年,當時正處于鼎盛時期。

以他們為代表的《新青年》的編輯們,先是支援梁啟超,然後又反對梁啟超提出的"新人民理論"。這足以證明陳獨秀和梁啟超的理論與自然不符。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

回首往事,《覺醒時代》是一部緻敬劇,需要适應各個年齡段的觀衆。

如果編劇聚焦于梁啟超與陳獨秀、毛澤東等人的思想沖突,那不是一部合格的緻敬劇,而是一部具有嚴肅講道意味的紀錄片。

事實上,另一部非常熟悉的曆史劇《走向共和國》,已經寫了康有為、梁啟超的很大一部分。因為《走向共和國》是一部聚焦中國現代思想啟蒙時期的故事,是以有必要提及梁啟超與康氏沖突的細節,包括新舊思想。

但在《覺醒時代》中,沒有必要把這些陳芝麻爛爛的谷物東西和托盤放出來,隻是為了在劇情中加入一些新舊文化碰撞的效果,以及對當時青春的影響。

這樣,就不是梁啟超和陳獨秀、毛澤東、胡石等人有任何假期,不是因為梁啟超的"地位"不夠。

隻是因為《覺醒時代》的觀衆,包括主題等其他關鍵因素,是以編劇故意把梁啟超和陳獨秀隐藏在意識形态的沖突中。

影視作品,尤其是像《覺醒時代》這樣由單一角色主導的長篇系統,必須區分主線和次級。

如果編劇加了太多的支線劇,或者用長篇大論向觀衆解釋梁啟超的"新人理論",赢得大師似乎有點吵。

《覺醒年代》中,為何沒有梁啟超的戲份?是因為地位不夠嗎

一些學哲學課的人應該知道,教科書中關于梁啟超、康有偉等人的思想理論篇幅很長。

在這種情況下,《覺醒時代》背後的從業人員不需要向觀衆闡述新舊思想的碰撞,隻需挑出焦點氛圍,加強性格塑造。這也将給觀衆一個詳細的叙述,中國共産黨早期的困難,以及背後的困難故事。

梁啟超就像遊戲中的NPC,或者幕後的大人物。不是沒有他,但對主要情節的幹擾也不過分。