国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

由圖像的灰度化看基本圖像處理(2)

2019-11-18 18:37:15
字體:
來源:轉載
供稿:網友
 

[顏色篇]

在上一篇中提到了,那灰度化代碼只能適用于24位色(PixelFormats=pf24bit),為什么?看看記錄類型tagRGBTRipLE,正好24位,所以這樣只能處理24位色圖!

那怎么處理其他的位圖呢?

先對這各種類型的位圖做些簡單的介紹~~~

pf1bit:

  每個像素只需要用一位表示,如調色板定義的是黑白兩種顏色(0為黑,1為白),這時只能用位操作訪問像素信息!如定義

var P:PByte

  for Y := 0 to (Bitmap.Height - 1) do
  begin
    p := Bitmap.ScanLine[Y];
    for X := 0 to (Bitmap.width - 1) DIV 8 + 1 do
    begin
      p^:=1 or 2 or 4 or 8 or 16 or 32 or 64 or 128;
      Inc(PRGB,3);
    end;
  end;

 p^:=1 or 2 or 4 or 8 or 16 or 32 or 64 or 128;
 這行代碼什么意思呢?1=1(二進制),2=10(二進制),4=100(二進制),8=1000(二進制)...

 結合上篇中解釋了的或運算,很容易理解就以八個字位為單位,給其賦上顏色信息!

pf4bit:

  和pf1bit位圖一樣,操作pf4bit位圖也需要用位操作。

pf8bit:

  可直接利用Byte、TByteArray,但用Scanline取的值表示的只是調色板上顏色的索引。

pf15bit和pf16bit:

  這兩種位圖都是16位的,pf15bit是第一位為0,后15位的每5位分別表示紅、綠、藍。而pf16bit中綠色占6位,其它兩種顏色占用5位(人眼對綠色比較敏感)!

 pf24bit位圖轉pf15bit位圖代碼

 var
  Row24:pRGBTriple;
  Row15:PWord;

 for j := 0 TO Bitmap.Height-1 DO
 begin
   Row15 := Bitmap15.Scanline[j];
   Row24 := Bitmap24.Scanline[j];
   for i := 0 TO Bitmap.Width-1 DO
   begin
     with Row24^ do
       Row15^ := (rgbtRed Shr 3) Shl 10 or (rgbtGreen Shr 3) Shl 5 or (rgbtBlue Shr 3);
     Inc(Row24);
     Inc(Row15);
   end
 end;

pf24bit和pf32bit:
 
 pf24bit上面的已多次用到,就不多說了。而pf32bit和pf24bit一樣,用24位來記錄三原色的顏色信息!
 PRGBQuad = ^TRGBQuad;
 tagRGBQUAD = packed record
  rgbBlue: Byte;
  rgbGreen: Byte;
  rgbRed: Byte;
  rgbReserved: Byte;
 end;
 TRGBQuad = tagRGBQUAD;

 如果要修改上面的程序,就是簡單的PRGBQuad替換PRGBTriple,TRGBQuad替換TRGBTriple的過程~

 測試表明在pf32bit中利用Scanline處理圖像要比pf24bit快。

 所以除了單色圖(PixelFormats=pf1bit)外(沒必要),其它都可轉外32位色實現灰度化。這也是一種比較可行的方法!


上一篇:由圖像的灰度化看基本圖像處理(1)

下一篇:由圖像的灰度化看基本圖像處理(3)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 铜川市| 新化县| 绥棱县| 西华县| 繁峙县| 永宁县| 波密县| 柏乡县| 田林县| 平远县| 武隆县| 安仁县| 乐都县| 河西区| 呼玛县| 雅安市| 宁国市| 河东区| 黎平县| 肥城市| 南溪县| 新安县| 松阳县| 景德镇市| 章丘市| 大港区| 万山特区| 桐乡市| 连江县| 赤城县| 香格里拉县| 定远县| 凤台县| 南丹县| 含山县| 大邑县| 林芝县| 新源县| 忻州市| 安新县| 五大连池市|