コード例 #1
0
        private void UserControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if (this.DataContext != null && this.DataContext.GetType() == typeof(RW4Section))
            {
                section = this.DataContext as RW4Section;
                RW4Material vertexArraySection = section.obj as RW4Material;
                if (vertexArraySection != null)
                {
                    dataGridVertices.ItemsSource = vertexArraySection.Materials;

                    foreach (MaterialTextureReference mat in vertexArraySection.Materials)
                    {
                        DatabaseIndex imageIndex = DatabaseManager.Instance.Indices.Find(idx => idx.InstanceId == mat.TextureInstanceId && idx.TypeId == PropertyConstants.RasterImageType);
                        if (imageIndex != null)
                        {
                            using (MemoryStream imageByteStream = new MemoryStream(imageIndex.GetIndexData(true)))
                            {
                                RasterImage img = RasterImage.CreateFromStream(imageByteStream, RasterChannel.All);
                                panelTextures.Children.Add(new Image()
                                {
                                    Source = img.MipMaps[0], Stretch = Stretch.None
                                });
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        private void btnExport3dsMax_Click(object sender, RoutedEventArgs e)
        {
            if (this.DataContext != null && this.DataContext.GetType() == typeof(RW4Section))
            {
                section = this.DataContext as RW4Section;
                RW4Material vertexArraySection = section.obj as RW4Material;

                System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog();
                dlg.Description = "Select where to extract the files to...";
                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    string selectedPath = dlg.SelectedPath;
                    foreach (MaterialTextureReference mat in vertexArraySection.Materials)
                    {
                        DatabaseIndex imageIndex = DatabaseManager.Instance.Indices.Find(idx => idx.InstanceId == mat.TextureInstanceId && idx.TypeId == PropertyConstants.RasterImageType);
                        if (imageIndex != null)
                        {
                            using (MemoryStream imageByteStream = new MemoryStream(imageIndex.GetIndexData(true)))
                            {
                                using (FileStream strm = File.Create(selectedPath + "\\" + imageIndex.InstanceId.ToHex() + ".png"))
                                {
                                    RasterImage img;
                                    if (mat.Unknown1 == 1)
                                    {
                                        img = RasterImage.CreateFromStream(imageByteStream, RasterChannel.FacadeColor);
                                    }
                                    else
                                    {
                                        img = RasterImage.CreateFromStream(imageByteStream, RasterChannel.All);
                                    }
                                    PngBitmapEncoder encoder = new PngBitmapEncoder();
                                    encoder.Frames.Add(BitmapFrame.Create(img.MipMaps[0] as BitmapSource));
                                    encoder.Save(strm);
                                }
                            }
                        }

                        imageIndex = DatabaseManager.Instance.Indices.Find(idx => idx.InstanceId == mat.TextureInstanceId && idx.TypeId == PropertyConstants.RW4ImageType);
                        if (imageIndex != null)
                        {
                            using (MemoryStream imageByteStream = new MemoryStream(imageIndex.GetIndexData(true)))
                            {
                                RW4Model model = new RW4Model();
                                model.Read(imageByteStream);
                                Texture         text   = model.Textures[0];
                                WriteableBitmap bitmap = text.ToImage(true);
                                using (FileStream strm = File.Create(selectedPath + "\\" + imageIndex.InstanceId.ToHex() + ".png"))
                                {
                                    //panelTextures.Children.Add(new Image() { Source = img.MipMaps[0], Stretch = Stretch.None });
                                    PngBitmapEncoder encoder = new PngBitmapEncoder();
                                    encoder.Frames.Add(BitmapFrame.Create(bitmap as BitmapSource));
                                    encoder.Save(strm);
                                }
                            }
                        }
                    }
                }
            }
        }