if (openFileDialog1.ShowDialog() == DialogResult.OK) { // 컨트롤에 이름 설정하기 tbAzeName.Text = openFileDialog1.FileName;
try { if ((myStream = openFileDialog1.OpenFile()) != null) { using (myStream) { // 바이너리로 읽기 위해서 BinaryReader를 생성하고 myStream의 // 스트림 값을 넘겨 받는다. BinaryReader r = new BinaryReader(myStream); for (int i = 0; i < 5; i++) { Console.WriteLine(r.ReadInt32()); } } } } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } }
DirectX 코드를 사용해서 텍스처를 연결시켰다. 기존 코드 : http://www.iamgsi.com/entry/DirecrX-Managed-Create-a-Device-C 를 조금더 확장 시켰다. 이벤트 함수 OnResetDevice도 추가 했으며, 여기서 봐야 할 것은 윈도우 사이즈가 변할때 텍스처가 검정색으로 나올때가 있다. 이때 텍스처 함수 부분은 Managed로 해야 하는지는 잘 모르겠지만. 아래와 같은 인자를 사용하게 되는데 Managed를 할때는 몇개의 인자가 더 필요 하더라.
아래의 함수를 사이즈 변할때 호출해줘야 제대로 나오게 된다. private void directXBaseView1_OnResetDevice(object sender, DeviceEventArgs e) { ... if (texture != null) texture.Dispose(); // 이 코드를 넣지 않으면 메모리가 계속 누적된다. Texture가 계속해서 생성이 되는거 같다. texture = TextureLoader.FromFile(dev, @"d:\bbbb.jpg"); }
나머지는 타이머를 사용해서 화면은 계속해서 리프레쉬 해주었다.
----DirectXBaseView.cs---- using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms;
// DirectX using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; using Direct3D = Microsoft.DirectX.Direct3D;
// namespace AzeViewerSimple3 { public delegate void CreateDeviceEventHandler(object sender, DeviceEventArgs e); public delegate void ResetDeviceEventHandler(object sender, DeviceEventArgs e); public delegate void RenderEventHandler(object sender, DeviceEventArgs e);
// public class DeviceEventArgs { public Device dev; public Device Device { get { return dev; } }
public DeviceEventArgs(Device device) { dev = device; } }
// public partial class DirectXBaseView : UserControl { #region Members; private Device _device = null; private bool pause = false; public bool Pause { get { return pause; } set { this.pause = value; } } public event CreateDeviceEventHandler OnCreateDevice; public event ResetDeviceEventHandler OnResetDevice; public event RenderEventHandler OnRender;
#endregion
#region ctor public DirectXBaseView() { InitializeComponent(); } #endregion
#region Properties private Color _deviceBackColor = Color.Blue; public Color DeviceBackColor { get { return _deviceBackColor; } set { _deviceBackColor = value; } } #endregion
#region Rendering public void Render() { if (Pause) return;
if (OnResetDevice != null) OnResetDevice(this, new DeviceEventArgs(_device)); } #endregion } }
----Form1.cs---- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
// DirectX using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; using Direct3D = Microsoft.DirectX.Direct3D;
namespace AzeViewerSimple3 { public partial class Form1 : Form { #region Member VertexBuffer vertexBuffer = null; Texture texture = null; //bool pause = false; #endregion