예제 #1
0
파일: Form1.cs 프로젝트: furusdara/cuda
        private ManagedCuda.NPP.NPPImage_8uC4 CudaHelper(Bitmap map)
        {
            NppiSize size = new NppiSize(map.Width, map.Height);

            ManagedCuda.NPP.NPPImage_8uC4 source = new NPPImage_8uC4(size);

            source.CopyToDevice(map);

            return(source);
        }
예제 #2
0
        private void btn_open_Click(object sender, EventArgs e)
        {
            if (!_nppOK)
            {
                return;
            }

            CleanUp();

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "Images|*.jpg;*.bmp;*.png;*.tif";
            if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }

            Bitmap src = new Bitmap(ofd.FileName);

            switch (src.PixelFormat)
            {
            case PixelFormat.Format24bppRgb:
                _colorChannels = 3;
                break;

            case PixelFormat.Format32bppArgb:
                _colorChannels = 4;
                break;

            case PixelFormat.Format32bppRgb:
                _colorChannels = 4;
                break;

            case PixelFormat.Format8bppIndexed:
                _colorChannels = 1;
                break;

            default:
                _colorChannels = 0;
                txt_info.AppendText(ofd.FileName + " has an unsupported pixel format.\n");
                break;
            }

            try
            {
                switch (_colorChannels)
                {
                case 1:
                    //Allocate memory on device for one channel images...
                    src_c1  = new NPPImage_8uC1(src.Width, src.Height);
                    dest_c1 = new NPPImage_8uC1(src.Width, src.Height);
                    src_c1.CopyToDevice(src);
                    txt_info.AppendText("Info: Loaded image '" + ofd.FileName + "' succesfully (Size: " + src.Width.ToString() + " x " + src.Height.ToString() + ", color channels: " + _colorChannels.ToString() + ")\n");
                    break;

                case 3:
                    //As of version 5, NPP has new histogram and LUT functions for three channel images, no more need to convert first to 4 channels.
                    //Allocate memory on device for four channel images...
                    src_c3  = new NPPImage_8uC3(src.Width, src.Height);
                    dest_c3 = new NPPImage_8uC3(src.Width, src.Height);

                    //Fill 3 channel image in device memory
                    src_c3.CopyToDevice(src);

                    txt_info.AppendText("Info: Loaded image '" + ofd.FileName + "' succesfully (Size: " + src.Width.ToString() + " x " + src.Height.ToString() + ", color channels: " + _colorChannels.ToString() + ")\n");
                    break;

                case 4:
                    //Allocate memory on device for four channel images...
                    src_c4  = new NPPImage_8uC4(src.Width, src.Height);
                    dest_c4 = new NPPImage_8uC4(src.Width, src.Height);
                    src_c4.CopyToDevice(src);
                    txt_info.AppendText("Info: Loaded image '" + ofd.FileName + "' succesfully (Size: " + src.Width.ToString() + " x " + src.Height.ToString() + ", color channels: " + _colorChannels.ToString() + ")\n");
                    break;
                }
            }
            catch (Exception ex)
            {
                if (ex is NPPException)
                {
                    txt_info.AppendText("NPPException: " + ex.Message + "\n");
                    CleanUp();
                }
                else if (ex is CudaException)
                {
                    txt_info.AppendText("CudaException: " + ex.Message + "\n");
                    CleanUp();
                }
                else
                {
                    throw;
                }
            }
            //Show original image
            pictureBox_src.Image = src;
        }