0

こんにちは友人は、appxo 500x500 の指紋画像に 3x3 メディアン フィルターを適用しようとしています。ポインタを使用して画像データにアクセスしています。しかし、私は本当にそれを行う方法を理解できません。私は概念をよく知っていますが、もしあなたがコードで私を助けてくれるなら、それは大きな助けになるでしょう. ネットで検索しましたが、何の助けも得られません。ありがとうございました

public void medianfilter(Bitmap image)
{ 
    Byte[,] rtemp = new Byte[3, 3];
    Byte[,] gtemp = new Byte[3, 3]; 
    Byte[,] btemp = new Byte[3, 3]; 
    BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = data.Stride; 
    unsafe {
           byte* imgPtr = (byte*)(void*)(data.Scan0);
           int nOffset = stride - image.Width * 3;
           for (int i = 0; i < image.Width; i++)
           { 
               for (int j = 0; j < image.Height; j++)
               { 
                   for (int x = i; x < 3 + i; x++)
                   {
                       for (int y = j; y < 3 + j; y++) {
                           rtemp[x, y] = imgPtr[0];
                           gtemp[x, y] = imgPtr[1];
                           btemp[x, y] = imgPtr[2];
                           imgPtr += 3; } } imgPtr += nOffset;
                    }
               }
           }
     }
4

1 に答える 1

2

まず第一に、ビットマップをまったく変更していません!

変更を適用する前にポインターを逆参照する必要があり、ビットマップのロックを解除する必要があります...

これは、以前のコンピュータ グラフィックス コースで受けたものです。必要に応じて変更してください。

unsafe
{
    //Go to first pixel, the cast is important
    byte* p = (byte*)imageData.Scan0.ToPointer();

    //For each line
    for (int y = 0; y < bmp.Height; y++)
    {
         //For each pixel (bmp.Width * 3) because jpg has R, G, and B value if the bitmap has an alpha do a *4 multiplier
         for (int x = 0; x < bmp.Width * 3; x++)
         {
                //Invert from the original image
                *p = (byte)(255 - *p);
                //Go to next pointer
                p++;
          }
          //Move pointer to the right end of the line and then go down to a new line
          //Skip the unused space
          p += offset;
     }
}
bmp.UnlockBits(imageData);
bmp.Save(path);

それが役に立てば幸い!

于 2011-03-11T16:13:26.093 に答える