在WPF中将图片转换成3D图像并可以旋转

简介: 原文:在WPF中将图片转换成3D图像并可以旋转时光偷走的,永远都是我们眼皮底下看不见的珍贵。   https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 首先先看一下源代码最初的运行效果,是否是自己需要的。
原文: 在WPF中将图片转换成3D图像并可以旋转

时光偷走的,永远都是我们眼皮底下看不见的珍贵。

 

https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ

首先先看一下源代码最初的运行效果,是否是自己需要的。

在这里,三维的面图是用函数生成的Z轴数据,当然,我们也可以使用图片的颜色作为Z轴。

准备工作,VS2008及以上版本,博主使用的是VS2017,需要升级一下项目。

在此感谢:Jianzhong Zhang

 

问题:

1、使用图片的颜色作为第三轴(Z轴)

 

解决思路:

1.1    查看源码中Z轴数据生成方式

1.2    将图片读取进来,并转换成RGB数组

1.3    将图片RGB数组替换原本的Z轴数据

 

 

找到Window1中代码:

 

 

 

 

1.1    红色表明是用函数给Z轴赋值。

// ***************************** 将图片转换成颜色数组 ***************************

        public static System.Drawing.Color[,] img2color(String imgfile)

        {

            System.Drawing.Bitmap img = new System.Drawing.Bitmap(imgfile);

            System.Drawing.Color[,] allcolor = new System.Drawing.Color[img.Height, img.Width];

            for (int h = 0; h < img.Height; h++)

                for (int w = 0; w < img.Width; w++)

                {

                    allcolor[h, w] = img.GetPixel(w, h);

                }

            GC.Collect();

            return allcolor;

}

 

 

 

 

将下列代码放入TestSurffacePlot方法中:

float[] newData = new float[10000];
            System.Drawing.Color[,] allcolor = img2color("xxx111.jpg");
            int width = 100;
            for (int j = 0; j < 10000; j++)
            {
                Color NewColor = new Color();
                if (allcolor[j % width, j / width].B < 50 && allcolor[j % width, j / width].R < 50 && allcolor[j % width, j / width].G < 50)
                {
                    NewColor.A = 255;
                    NewColor.B = 255;
                    NewColor.R = 0;
                    NewColor.G = 255;
                }
                else {
                    NewColor.A = allcolor[j % width, j / width].A;
                    NewColor.R = allcolor[j % width, j / width].R;
                    NewColor.G = allcolor[j % width, j / width].G;
                    NewColor.B = allcolor[j % width, j / width].B;
                }
                m_3dChart[j].color = NewColor;
        }

 

大功告成。

 

目录
相关文章
|
9月前
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
选中项目,点击右上角的显示全部文件按钮,会将默认隐藏的文件显示出来,选中所需图片,右键,添加到项目,然后选择图片查看属性,生成操作选择resource。完毕。本人目前的解决方案。
290 41
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
|
C#
WPF 调用资源图片
原文:WPF 调用资源图片      最近做的wpf项目中,在开发的时候,把图片放到了bin下面,采用了imagePath =System.IO.Directory.GetCurrentDirectory()+"/images/starShow.
1272 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
870 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2096 0
|
C#
【C#/WPF】调节图像的HSL(色相、饱和度、明亮度)
原文:【C#/WPF】调节图像的HSL(色相、饱和度、明亮度) 先说概念: HSL是一种描述颜色的方式(其他颜色描述方式还有大家熟悉的RGB值)。
1863 0
|
C#
【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
原文:【C#/WPF】Image图片的Transform变换:平移、缩放、旋转 WPF中图像控件Image的变换属性Transform: 平移 缩放 旋转 即要想实现图片的平移、缩放、旋转,是修改它所在的Image控件的Transform变换属性。
4839 0
|
C#
【C#/WPF】修改图像的DPI、Resolution
原文:【C#/WPF】修改图像的DPI、Resolution 问题: WPF中默认使用的图像的DPI是96。如果我们使用的图素的DPI不是96时(比如是72),那么WPF会把图片的DPI自动改为96,导致图像加载出来的实际大小Width和Height会比想要的大(原图显示大小会是实际图大小的72/96 = 3/4),比如图片会在Image控件内显示超框了。
1384 0
|
C# 数据格式
【C#/WPF】图像数据格式转换时,透明度丢失的问题
原文:【C#/WPF】图像数据格式转换时,透明度丢失的问题 问题:工作中涉及到图像的数据类型转换,经常转着转着发现,到了哪一步图像的透明度丢失了! 例如,Bitmap转BitmapImage的经典代码如下: ...
993 0
|
C#
【C#/WPF】图片的切割/切图/裁剪图片
原文:【C#/WPF】图片的切割/切图/裁剪图片 前台准备两个Image控件。上面是显示原图,下面显示切割后的效果。 对应的后台代码: public par...
2133 0
|
C# 图形学
在WPF里面实现以鼠标位置为中心缩放移动图片
原文:在WPF里面实现以鼠标位置为中心缩放移动图片 在以前的文章使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果里面,介绍了如何在WPF里面移动和放大缩小图片,程序也支持使用滚轮的方式缩放图片。
1675 0