WPF在ImageBox中显示较大图像的一部分

时间:2018-11-30 02:41:57

标签: c# wpf

我来自Winforms,试图用WPF重写程序,并且我想显示整个图像的特定部分,具体取决于我用于列表的ID,然后将整个图像的每个部分加载到我能够在Winforms中成功完成此操作,但是我想使用Controls.Image在WPF中执行相同的任务。这是我在Winforms中所做的。

PictureBox picBox;
List<Image> tileImageList;
Image FullImage;

public TileFrame(PictureBox pbox)
{        
    picBox = pbox;

    FullImage = picBox.Image; //The source of the picBox is set to the full image on init
    tileImageList = new List<Image>();

    PopTileList();
}

void PopTileList()
{
    const int SIZE = 32;
    Bitmap bitFullImage = new Bitmap(FullImage);

    for (int y = 0; y < 48; y++)
    {
        for (int x = 0; x < 64; x++)
        {
            var portion = bitFullImage.Clone(new Rectangle((x * SIZE), (y * SIZE), SIZE, SIZE), bitFullImage.PixelFormat);

            tileImageList.Add(portion);             
        }
    }

    picBox.Image = tileImageList[10];//The first image that shows when this is done
}

public void ShowTilePic(int selectedId)
{            
    picBox.Image = tileImageList[--selectedId];         
}

由于要显示的图像将基于列表框的选定项而更改,因此tileImageList对于关联列表框选定索引和tileImageList索引至关重要。我搜索的其他答案似乎使它比我在这里所做的复杂得多。在WPF和代码中是否有一种简单的方法?

1 个答案:

答案 0 :(得分:0)

我知道了Nvm。

List<CroppedBitmap> tileImageList;
Image imageBox;

public TileFrame(MainWindow mWindow)
{
    tileImageList = new List<CroppedBitmap>();
    imageBox = mWindow.ImageBox;

    PopTileList();
}

void PopTileList()
{
    const int SIZE = 32;

    var bitmapImage = (BitmapSource)imageBox.Source;         

    for (int y = 0; y < 48; y++)
    {
        for (int x = 0; x < 64; x++)
        {
            var portion = new CroppedBitmap(bitmapImage, new Int32Rect((x * SIZE), (y * SIZE), SIZE, SIZE));                       
            tileImageList.Add(portion);                 
        }
    }        
}

public void ShowTilePic(int selectedId)
{
    imageBox.Source = tileImageList[selectedId];
}
相关问题