Как изменить ширину изображения одновременно по центру и со сжатием?
Я пытаюсь простенькую анимацию подкидывания монетки и тем самым нахождение победителя: орла или решки.
async void TossCoin() {
var random = new Random();
await Task.Run(() => {
//Количестов поворотов монетки
var number = random.Next(9, 11);
// Цикл соответствует количеству поворотов монетки
for (int i = 0; i < number; i++) {
// Если поворот нечетный, то сторона решки сжимается до тех пор, пока не достигнет ширины 0, а затем орел начинает
// наоборот набирать ширину, таким образом должна создаваться иллюзия вращения монетки.
if (i % 2 != 0) {
while (imageTail.Width > 0) {
imageTail.Invoke(() => imageTail.Width--);
}
imageTail.Invoke(() => imageTail.Visible = false);
imageEagle.Invoke(() => imageEagle.Visible = true);
while (imageEagle.Width != 200) {
imageEagle.Invoke(() => imageEagle.Width++);
}
}
// То же самое, но наоборот
if (i % 2 == 0) {
while (imageEagle.Width > 0) {
imageEagle.Invoke(() => imageEagle.Width--);
}
imageTail.Invoke(() => imageTail.Visible = true);
imageEagle.Invoke(() => imageEagle.Visible = false);
while (imageTail.Width != 200) {
imageTail.Invoke(() => imageTail.Width++);
}
}
}
// Если последний поворот остановилься на стороне решки, то победа засчитывается решке.
if (imageTail.Visible == true) {
Coin.CountOfTails++;
labelCountEagleWins.Invoke(() => labelCountTailsWins.Text = $ "Решка победила {Coin.CountOfTails} раз");
}
// То же самое, но наоборот
else {
Coin.CountOfEagles++;
labelCountEagleWins.Invoke(() => labelCountEagleWins.Text = $ "Орёл победил {Coin.CountOfEagles} раз");
}
});
}
Проблема в том, что при создании PictureBox
, куда помещено изображение одной из двух сторон одной монеты, можно указать только один SizeMode
.
var imageEagle = new PictureBox {
Image = Resources.ImageEagle,
Location = new Point(this.Width - this.Width / 3 - 55, this.Height / 3 - 40),
Size = new Size(0, 200),
Visible = false,
SizeMode = PictureBoxSizeMode.StretchImage,
};
Таким образом я не могу указать сразу два SizeMode
. Либо StretchImage
, либо CenterImage
. Получается, что в процессе монетка либо сжимается (если указать StretchImage
), вместо того, чтобы удалять часть изображения, либо централизуется (если указать CenterImage
), но при этом будет терять часть изображения, вместо сжатия.
Можно ли каким-то образом убить двух зайцем одним выстрелом, чтобы и сжимать, сохраняя изображение, и централизовать сжатие?
Источник: Stack Overflow на русском