伊莉討論區

標題: 利用影像數據 建立影像 [打印本頁]

作者: a0926319646    時間: 2018-4-26 02:42 PM     標題: 利用影像數據 建立影像

本帖最後由 a0926319646 於 2018-4-26 02:43 PM 編輯

第一次接觸影像處理,需要利用影像資料二微陣列建立影像,以下程式碼是網路上找的資料,由於我的影像資料(2448*2048)有500萬pixel的資料,但我的picturebox只有(816*683)約50幾萬pixel,我先將pixel資料降低像素 ,因為建立的影像只需要是黑白的,因而使用G 二微陣列來建立, 輸出如下圖 ,請教各位大大哪個部分有問題。
[attach]123149237[/attach][attach]123149237[/attach]


作者: licious0421    時間: 2018-4-27 09:55 AM

你和我再做得一模一樣ㄟ?!
你若是黑白的圖 RGB 會相同
picturebox 可以而外增加卷軸支援你的圖片

作者: licious0421    時間: 2018-4-27 09:58 AM

BitmapData sourceData = bm.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            IntPtr source_scan = sourceData.Scan0;
            int ByteNumber_Width = sourceData.Width * 3;
            int stride = sourceData.Stride; //Stride 是單一資料列的像素 (掃描線),無條件進位到四個位元組界限的寬度。 如果 stride 是正數,點陣圖是由上而。 如果 stride 是負值,點陣圖是由下往。
            int pix;
            unsafe
            {
                byte* source_p = (byte*)source_scan.ToPointer();
                for (int h = 0; h < sourceData.Height; h++)
                {
                    for (int w = 0; w < sourceData.Width; w++)
                    {
                        pix = buf[h * width + w] ;  //注意 pix 只能在0~255之間
                        source_p[0] = (byte)pix; //R
                        source_p++;
                        source_p[0] = (byte)pix; //G
                        source_p++;
                        source_p[0] = (byte)pix; //B
                        source_p++;
                    }
                    source_p += (stride - ByteNumber_Width);
                }
            }
            bm.UnlockBits(sourceData);




歡迎光臨 伊莉討論區 (http://www12.eyny.com/) Powered by Discuz!