none
如何從jpg檔讀出 pixel值?? RRS feed

  • 問題

  • 我是初學者~
    想要分析一張圖片從圖片中得出數據(pixel)

    我該怎麼做??

    以下是我的程式碼,但是都顯示不出數值!

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;          
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Drawing.Imaging;
    
    
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                ImageForm MyImage = new ImageForm();
                MyImage.Show();
            }
        }
    
    
        class ImageForm : Form
        {
            Image image;
            public ImageForm() {
    
                image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\jellyfish.jpg");
                this.Text = @"C:\Users\Public\Pictures\Sample Pictures\jellyfish.jpg";
    
    
            }
    
    
            protected override void OnPaint(PaintEventArgs e)
            {
                this.Height = image.Height;
                this.Width = image.Width;
    
                e.Graphics.DrawImage(image, 0, 0, Width, Height);
    
    
            }
    
    
            public int[,,] getRGBData()
            {
    
    
    
    
                Bitmap bimage = new Bitmap(image);
                int Height = bimage.Height;
                int Width = bimage.Width;
                int[,,] rgbData = new int[Width, Height, 3];
    
                for (int y = 0; y < Height; y++)
                {
                    for (int x = 0; x < Width; x++)
                    {
                        Color color = bimage.GetPixel(x, y);
                        rgbData[x, y, 0] = color.R;
                        rgbData[x, y, 1] = color.G;
                        rgbData[x, y, 2] = color.B;
                    }
                }
    
    
                return rgbData;
            }
    
    
    
    
    
    
    
    
        }
    
    
    
    
    
    
    
    
    
    
    
    

    2015年7月27日 上午 06:30

所有回覆

  •                     Color color = bimage.GetPixel(x, y);
                        rgbData[x, y, 0] = color.R;
                        rgbData[x, y, 1] = color.G;
                        rgbData[x, y, 2] = color.B;
                    }
                }
                return rgbData;
            }
    有沒有試過直接return rgbData[x,y,0] ? 先看看會不會得到合理的數值
    2015年7月27日 上午 07:09
  • OnPaint 不是這樣用的


            public ImageForm()
            {
    
                image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\jellyfish.jpg");
                this.Text = @"C:\Users\Public\Pictures\Sample Pictures\jellyfish.jpg";
                this.Paint+= ImageForm_Paint;
            }
    
            private void ImageForm_Paint(object sender, PaintEventArgs e)
            {
                this.Height = image.Height;
                this.Width = image.Width;
                e.Graphics.DrawImage(image, 0, 0, Width, Height);
            }



    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2015年7月27日 上午 07:34
  • 一樣,跳出圖後就沒有輸出任何數據了!
    或是數據要在不同的地方看嗎?
    2015年7月27日 上午 08:38
  • 感謝你,我會認真學習的!!
    2015年7月27日 上午 08:38
  • 1. jpg 預設是 24 bits color ,若直接用 Image.FromFile 的話,每個 pixel 要宣告成 3 bytes

    2. 一般為了降低處理不同色深程式碼的困擾,懶一點的作法是開 32 bits color 的 Bitmap ,用 DrawImage 畫進去,這樣就只要關心 32 bits color 的程式怎樣寫,所以這種情況下,每個 pixel 要宣告成 4 bytes 。

    3. 不用迴圈快速複製顏色到你的陣列在論壇搜尋 LockBits

    https://social.msdn.microsoft.com/Forums/zh-TW/home?sort=relevancedesc&brandIgnore=True&searchTerm=LockBits


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已提議為解答 Alex_Lee 2015年8月4日 上午 01:24
    2015年7月28日 下午 12:13
  • pixel 要怎麼宣告 宣告在哪裡呢? 
    2015年7月29日 上午 07:59
  • 你看過本論壇 LockBits 搜尋結果的程式碼討論嗎?

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年7月29日 下午 03:14