안녕하세요!
제가 클립보드에 있는 이미지를 가져오는 부분을 구현 했는데요.
아래와 같은 상황에서는 정상 동작하고 있습니다.
- 프린트스크린 캡쳐
- 알트 + 프린트스크린 캡쳐
- 윈도우 + 쉬프트 + S 각종 갭쳐
- 캡쳐도구 캡쳐
- 이미지 파일 컨트롤 + C
하지만 그림판에서 부분적으로 선택한 후 컨트롤 + C 클립보드 복사시에는 정상적으로 이미지를 가져오지 못하고 있습니다.
아래는 제가 구현한 소스코드입니다.
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
base.OnPreviewKeyDown(e);
if (e.Key == Key.V && (Keyboard.Modifiers
& ModifierKeys.Control) == ModifierKeys.Control)
{
if (Clipboard.GetDataObject() != null)
{
IDataObject data = Clipboard.GetDataObject();
// 클립보드에 있던 데이타가 이미지 형식인지 검사
if (data.GetDataPresent(DataFormats.Bitmap))
{
InteropBitmap bitmap = data.GetData(DataFormats.Bitmap, true);
BitmapSource img = bitmap as BitmapSource;
if (DataContext is CultureViewModel vm)
{
vm.Update(img);
}
}
}
}
}
해결하기 위해 어떻게 접근해야 할까요?
읽어주셔서 감사합니다.
2개의 좋아요
김예건
2
음… 설명이 부족해서 잘 모르겠지만 일단 이미지가 반드시 Bitmap 포맷이 아닐 수도 있고, 그림판이 클립보드에 저장하는게 반드시 이미지 데이터만 전달하는게 아닐 수 있으니까 Data 를 바로 파일로 저장한 뒤에 Hex Editor 로 살펴보시는게 어떨까요?
한마디로, 클립보드에서 가져오는 데이터가 어떤건지 확인이 필요해보입니다.
// 이 코드는 통과하고 문제가 생기는건가요?
if (data.GetDataPresent(DataFormats.Bitmap))
2개의 좋아요
@김예건 앗 맞습니다. 그 부분도 통과하고 bitmap, img 변수에도 null이 아닌 인스턴스가 다 채워지지만 이미지가 실제 이미지가 없는 것 같아요.
한번 그렇게 해보겠습니다!
감사합니다.
1개의 좋아요
동일한 코드와 다음의 유사한 코드로 테스트한 결과 동일한 문제점이 발견되었습니다.
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
base.OnPreviewKeyDown(e);
if (e.Key == Key.V && (Keyboard.Modifiers
& ModifierKeys.Control) == ModifierKeys.Control)
{
if (Clipboard.ContainsImage() == true)
{
var imageSource = Clipboard.GetImage();
image.Source = imageSource;
}
}
}
다음의 글을 참고하면 도움이 될 것 같습니다.
Wrestling with Clipboard Images in WPF - Rick Strahl’s Web Log (west-wind.com)
3개의 좋아요
김예건
5
@jamesnet214 Clipboard 에 저장되어 있는 이미지 타입을 제대로 추론하지 못하는 거 같네요. @dimohy 제공해주신 글 잘 읽었습니다 ㅎㅎ
2개의 좋아요
rkttu
6
프로그래밍 언어에 대한 질문이 아닌 Windows Forms 질문이어서 카테고리를 변경해드립니다.
1개의 좋아요