ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

C#与Python 通过共享内存实现tiff图像交互

2022-02-17 16:03:45  阅读:183  来源: 互联网

标签:C# tiff bytes System 2048 Python Length 灰度 using


第一种方法:共享内存只存tiff图像里的灰度信息

using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Media.Imaging;
namespace WpfApp1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Stream imageStreamSource = new FileStream("test.tif", FileMode.Open, FileAccess.Read, FileShare.Read);
                var decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                BitmapSource bitmapSource = decoder.Frames[0];
                Int32 PixelHeight = bitmapSource.PixelHeight; // 图像高度
                Int32 PixelWidth = bitmapSource.PixelWidth;   // 图像宽度
                Int32 Stride = (PixelWidth * bitmapSource.Format.BitsPerPixel + 7) / 8;  // 跨距宽度
                UInt16[] imgBuffer = new UInt16[PixelHeight * PixelWidth];//创建图像灰度值数据所需的数组
                bitmapSource.CopyPixels(imgBuffer, Stride, 0);//读取灰度值到数组
                //16位灰度转化成8位
                byte[] bytes = new byte[2048 * 2048 * 2];
                IntPtr intptr = Marshal.UnsafeAddrOfPinnedArrayElement(imgBuffer, 0);
                Marshal.Copy(intptr, bytes, 0, 2048 * 2048 * 2);
                //向共享内存写入灰度值数据
                var mmf = MemoryMappedFile.CreateOrOpen("test1", bytes.Length, MemoryMappedFileAccess.ReadWrite);
                var viewAccessor = mmf.CreateViewAccessor(0, bytes.Length);
                viewAccessor.Write(0, bytes.Length); ;
                viewAccessor.WriteArray<byte>(0, bytes, 0, bytes.Length);
                MessageBox.Show("write ok" + bytes.Length.ToString());
            }
            catch (System.Exception s)
            {
                MessageBox.Show(s.Message);
            }
        }
    }
}
C# 向共享内存只写入tiff灰度数据
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import contextlib
import mmap
import numpy as np

# tif图像像素宽度2048高度2048,位深16bit,故一张图像的字节大小为2048*2048*2
byteSize = 2048 * 2048 * 2

with contextlib.closing(mmap.mmap(-1, byteSize, tagname="test1", access=mmap.ACCESS_READ)) as m:
    m.tell()
    s = m.read()
    a = np.frombuffer(s, dtype=np.uint16).reshape(2048, 2048)  # 转换为二维元组
    print(a)
Python读取灰度数据

 

标签:C#,tiff,bytes,System,2048,Python,Length,灰度,using
来源: https://www.cnblogs.com/lizhiqiang0204/p/15904984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有