Preciso simular minha rolagem em segundo plano, mas quero evitar mover meu controle de imagem real. Em vez disso, eu gostaria de usar um WriteableBitmap
método blitting. Qual seria a maneira de simular uma imagem rolando para cima? Eu tentei várias coisas comprar, parece que não consigo entender minha lógica:
//X pos, Y pos, width, height
Rect src = new Rect(0, scrollSpeed , 480, height);
Rect dest = new Rect(0, 700 - scrollSpeed , 480, height);
//destination rect, source WriteableBitmap, source Rect, blend mode
wb.Blit(destRect, wbSource, srcRect, BlendMode.None);
scrollSpeed += 5;
if (scrollSpeed > 700) scrollSpeed = 0;
Se height
for 10, a imagem será bastante confusa e, mais ainda, se a altura for 1
. Se a altura é mais alta, a imagem é mais nítida, mas parece apenas fazer uma cópia de um para um. Como posso 'rolar' a imagem para parecer que ela está subindo em um loop contínuo? (A altura da tela é 700).
c#
camera
silverlight
Skoder
fonte
fonte
Respostas:
Você não pode "rolar" um buffer sem um lugar para armazenar o bit que é empurrado para o final, então parece que você precisará ter um armazenamento separado para a troca ou um bitmap de origem separado. Eu escolheria o último por uma questão de simplicidade, para que você possa armazenar uma posição de rolagem e gerar suas rects usando isso.
Você precisará gerar duas rects, uma para a parte superior e outra para a parte inferior; a outra para a parte superior precisará começar na altura zero e aumentar até chegar à parte inferior; o retângulo de origem que emparelha com ela também começará na altura zero, mas começará da parte inferior da imagem de origem:
O seu retângulo inferior será o que você vê no início e ocupará a tela inteira no início, reduzirá de tamanho enquanto move a tela para fora do caminho do retângulo superior, o retângulo de origem que faria o procedimento mesmo, mas em vez de descer, apenas encolhe.
E usando essas duas blits, você tem um scroller.
fonte