C# 读取 RAW 格式的图片 获取图片的 长 跟高
时间: 2024-10-06 21:02:40 浏览: 27
在C#中,读取RAW格式图片并获取其宽度和高度需要使用到图像处理库,例如Emgu CV(Managed Extensions for OpenCV)。OpenCV是一个跨平台的计算机视觉库,提供了丰富的图像处理功能。
首先,你需要安装Emgu CV库,可以在这里下载:https://www.emgu.com/wiki/index.php/Main_Page
以下是使用Emgu CV的基本步骤:
1. 引入所需的命名空间:
```csharp
using Emgu.CV;
using Emgu.CV.Structure;
```
2. 加载RAW文件:
```csharp
string imagePath = "path_to_your_raw_image.raw";
Image<Bgr, byte> rawImage = new Image<Bgr, byte>(imagePath);
```
注意:这个例子假设RAW文件是以BGR格式存储的,如果不是,可能需要更改`Image<Bgr, byte>`部分。
3. 获取宽度和高度:
```csharp
int width = rawImage.Width;
int height = rawImage.Height;
```
现在,`width`变量存储了图片的宽度,`height`变量存储了图片的高度。
相关问题
unity android读取本地图片,unity+Android+PC加载本地图片
在Unity中,你可以使用Android的Java API来读取本地图片。以下是一个简单的示例:
1. 首先,创建一个C#脚本,用于调用Java API:
```csharp
using UnityEngine;
using System.Collections;
public class AndroidGallery : MonoBehaviour {
private AndroidJavaObject galleryActivity;
void Start () {
// 获取GalleryActivity类的引用
galleryActivity = new AndroidJavaObject("com.example.gallery.GalleryActivity");
}
public void OpenGallery() {
// 调用GalleryActivity类中的OpenGallery方法
galleryActivity.Call("OpenGallery");
}
public void SetImage(string path) {
// 调用GalleryActivity类中的SetImage方法
galleryActivity.Call("SetImage", path);
}
}
```
2. 然后,在Android项目中创建一个名为GalleryActivity的Java类:
```java
package com.example.gallery;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
public class GalleryActivity extends Activity {
private static final int SELECT_PICTURE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void OpenGallery() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, SELECT_PICTURE);
}
public void SetImage(String path) {
// 在Unity中调用SetImage方法时,将图片路径传递给该方法
Intent intent = new Intent();
intent.setData(Uri.parse(path));
setResult(Activity.RESULT_OK, intent);
finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK) {
String path = data.getDataString();
// 将图片路径返回给Unity
SetImage(path);
}
}
}
```
3. 最后,在Unity中使用AndroidGallery脚本来加载本地图片:
```csharp
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class LoadImage : MonoBehaviour {
public RawImage image;
void Start () {
// 创建AndroidGallery对象
AndroidGallery androidGallery = new AndroidGallery();
// 在Android设备上打开相册
androidGallery.OpenGallery();
}
void Update () {
// 检查是否有新的图片被选择
if (Input.GetKeyDown(KeyCode.Escape)) {
string path = PlayerPrefs.GetString("ImagePath");
if (path != "") {
// 加载本地图片
StartCoroutine(LoadLocalImage(path));
}
}
}
IEnumerator LoadLocalImage(string path) {
WWW www = new WWW("file://" + path);
yield return www;
// 将加载的图片显示在RawImage组件中
image.texture = www.texture;
}
}
```
在上面的示例中,我们通过AndroidGallery脚本打开了Android设备上的相册,然后在GalleryActivity类中选择了一张图片,并将其路径传递给了Unity。在Unity中,我们使用PlayerPrefs来存储图片路径,并使用WWW类来加载本地图片。最后,我们将加载的图片显示在RawImage组件中。
阅读全文