.Net 圖片灰階化處理 BitmapData

上一次利用了 GetPixel 及 SetPixel,將圖片轉為灰階,雖然可以達成效果但是效能不佳!

這次採用 BitmapData 並且使用 指標 進行處理,達到更高的處理效率。

using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string Photo_route = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Tulips.jpg");
            Bitmap b = (Bitmap)Bitmap.FromFile(Photo_route);
            pictureBox2.Image = (Bitmap)Bitmap.FromFile(Photo_route);
            Stopwatch sw = new Stopwatch();
            sw.Start();
            BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            //使用unsafe允許使用指標
            unsafe
            {
                byte* p = (byte*)bData.Scan0.ToPointer();
                for (int y = 0; y < b.Height; y++)
                {
                    for (int x = 0; x < b.Width; x++)
                    {
                        byte newColor = (byte)((float)(p[0] + p[1] + p[2]) / 3.0f);
                        p[0] = p[1] = p[2] = newColor; //三個byte組成一個Pixel
                        p += 3;
                    }
                }
                b.UnlockBits(bData);
            }
            sw.Stop();
            pictureBox1.Image = b;
            MessageBox.Show(sw.ElapsedMilliseconds.ToString() + " /ms");
        }
    }
}

  2012-06-20      ez      .NET
.Net 圖片灰階化處理 GetPixel SetPixel

利用 GetPixel 及 SetPixel,將圖片轉換為灰階。

using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string Photo_route = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Tulips.jpg");
            Bitmap b = (Bitmap)Bitmap.FromFile(Photo_route);
            pictureBox2.Image = (Bitmap)Bitmap.FromFile(Photo_route);
            Stopwatch sw = new Stopwatch();
            sw.Start();
            //對每個pixel取出處理
            for (int y = 0; y < b.Height; y++)
            {
                for (int x = 0; x < b.Width; x++)
                {
                    Color color = b.GetPixel(x, y);
                    int avg = (color.R + color.G + color.B) / 3; //RGB同除3就會變成灰階
                    b.SetPixel(x, y, Color.FromArgb(avg, avg, avg));
                }
            }
            sw.Stop();
            pictureBox1.Image = b;
            MessageBox.Show(sw.ElapsedMilliseconds.ToString() + " /ms");
        }
    }
}

  2012-06-20      ez      .NET
上傳檔案請勿只檢查副檔名

有些網站需要提供上傳檔案功能,為了安全考量會限制某些檔案才允許上傳,例如:jpg,gif,png,通常不會允許具有程式的檔案exe,bat,com,php,asp,aspx...。

以下分別測試IIS6及IIS7,看看安全性如何!  

1. 首先建立一個asp檔案,內容為下:

<%=Request.ServerVariables (REMOTE_ADDR)%>

2. 將檔名命名為 b.asp;.jpg,如下圖:


  2011-12-05      ez      IIS
.Net Function 接收多個參數

使用C#在Function接收多個參數,可以使用params string[] args,就可以接收多個string了。

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Fun1("a");
            Fun2("a", "b", "c", "d", "e");
        }

        //接收一個參數
        static void Fun1(string arg1)
        {
        }

        //接收多個參數
        static void Fun2(params string[] args)
        {
        }
    }
}

  2012-06-20      ez      .NET
.NET 壓縮程式記憶體用量

.NET 程式必需載入 .NET Framework ,所以記憶體用量至少5MB以上

其實可以透過 SetProcessWorkingSetSize API 來達到記憶體壓縮的效果 以下為程式碼範例:


  2012-06-04      ez      .NET
.Net 加殼 sixxpack 2.2 免於受到反向工程的威脅

加殼壓縮是一種對EXE檔案的數據壓縮及加密保護,可以將EXE檔案壓縮成自我解壓檔案,並能隱藏解壓進程。

在免殺技術里所謂的殼與偽裝殼其實就是壓縮與外層數據偽裝,其實是利用特殊的演算法,對可執行文件與DLL文件里的資源進行壓縮與對文件的描述、版本號、創建日期、修改軟體、系統執行需求等外層數據進行偽裝。

  • 減少檔案大小:可節省磁碟空間、加速網路傳輸。
  • 加密內容:可以避免程式遭到任意竄改、亦可對防毒軟體免殺。

  使用 Reflector 可以輕易的將 .NET 程式進行反向工程!

 


  2012-06-04      ez      .NET
hiberfil.sys 檔案如何刪除

hiberfil.sys 電腦休眠時的記憶體暫存檔案,將休眠功能取消需透過指令方式!

  1. 利用系統管理員身分開啟cmd命令提示字元
  2. 輸入 powercfg -h off 關閉休眠,並按下 Enter 鍵
    假如要恢復請輸入 powercfg -h on 並按下 Enter

  2011-12-04      ez      Windows