我已导入灰度16位图像。我有它作为一个BitmapSource和一个图像(控件名称空间)。如何访问单个像素?我已阅读过有关CopyPixels的唯一或最佳方法吗?如果是这样,我不知道如何设置步幅,以及哪个像素包含像素强度值。

方法1:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.IO;
using Nikon;
using WindowsFormsApplication1;
using System.Windows.Media.Imaging;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Controls;

namespace Map
{
    class OpenTIFF
    {
        static void OpenOne()
        {
        // Open a Stream and decode a TIFF image
        Stream imageStreamSource = new FileStream("C:\\Users\\Me\\Desktop\\"MyTif.tif", FileMode.Open, FileAccess.Read, FileShare.Read);
        TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
        BitmapSource bitmapSource = decoder.Frames[0];
        System.Windows.Controls.Image image = new System.Windows.Controls.Image();
        image.Source = bitmapSource;
        }
    }
}


我认为这可能更简单(找到here),但是随后我不清楚如何访问一维字节数组中的单个像素。

方法2:


static void OpenTwo()
       {
           System.Drawing.Image imageToConvert = System.Drawing.Image.FromFile("aa.tif", true);
           byte[] Ret = new byte[0];
           using (MemoryStream ms = new MemoryStream())
           {
               imageToConvert.Save(ms, ImageFormat.Tiff);
               Ret = ms.ToArray();
           }
       }


谢谢,

最佳答案

您可能要签出免费的图像库。
它具有一个C#包装器。
http://freeimage.sourceforge.net/index.html

为了让您入门并给出一个简单的示例:


下载二进制发行版
在Visual Studio中打开FreeImage.NET.sln(我使用了2010年)
建立图书馆项目
如果在XML注释中收到错误,请执行以下操作:进入项目属性,在“构建”下,将“错误处理警告”从“全部”更改为“无”。
创建新的控制台项目。
添加对您在步骤3中生成的程序集的引用。
FreeImage3154Win32 \ FreeImage \ Wrapper \ FreeImage.NET \ cs \ Library \ bin \ Debug \ FreeImageNET.dll
将以下代码添加到Program.cs

using FreeImageAPI;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // load image, this can by your 16-bit tif
            FIBITMAP dib = FreeImage.LoadEx("myfile.tif");
            // convert to 8-bits
            dib = FreeImage.ConvertToGreyscale(dib);
            // rotate image by 90 degrees
            dib = FreeImage.Rotate(dib, 90);
            // save image
            FreeImage.SaveEx(dib, "newfile.png");
            // unload bitmap
            FreeImage.UnloadEx(ref dib);
       }
    }


}
将您下载的FreeImage二进制dll复制到bin目录中。
FreeImage3154Win32 \ FreeImage \ Dist \ FreeImage.dll
运行应用程序


解决方案中包含Library项目的示例很多。

10-08 01:20