UserControl.OnPaint() 메서드에서 JpegBitmapDecoder에서 반환 된 BitmapFrame을 사용할 수 있습니까? Systems.Windows.Forms 라이브러리에서 사용하는 GDI +보다 Systems.Windows.Media.Imaging에서 JPEG 디코딩의 성능이 훨씬 우수하다고 들었습니다. 그러나 내 응용 프로그램은 이미 Systems.Windows.Forms 라이브러리로 작성되었으며 모든 것을 변경하고 싶지 않습니다. 내가 필요로하는 것은 JPEG 프레임을 압축 해제하고 OnPaint() 메소드로 그릴 수있는보다 빠른 방법입니다.Systems.Windows.Forms.UserControl에서 JpegBitmapDecoder를 사용하는 방법
0
A
답변
0
나는 대답을 직접 알아 냈다. 다음은 샘플 코드입니다.
JpegBitmapDecoder decoder = new JpegBitmapDecoder(pixelStream, BitmapCreateOptions.None, BitmapCacheOption.None);
BitmapFrame frame = decoder.Frames[0];
frame.CopyPixels(pixelBuffer, stride, 0);
pixelBuffer는 사전 할당 된 바이트 배열입니다. 그리고 나서 그것을 사용하여 OnPaint()에서 비트 맵을 생성 할 수 있습니다.
0
다음 참조 추가 할 Windows.Forms 프로젝트에서 사용하려면
- 수 WindowsBase.dll
- PresentationCore.DLL
- System.Xaml.DLL을
이 메소드를 호출 :
protected static Bitmap JpegToBitmap(Stream jpg)
{
JpegBitmapDecoder ldDecoder = new JpegBitmapDecoder(jpg, BitmapCreateOptions.None, BitmapCacheOption.None);
BitmapFrame lfFrame = ldDecoder.Frames[0];
Bitmap lbmpBitmap = new Bitmap(lfFrame.PixelWidth, lfFrame.PixelHeight);
Rectangle lrRect = new Rectangle(0, 0, lbmpBitmap.Width, lbmpBitmap.Height);
BitmapData lbdData = lbmpBitmap.LockBits(lrRect, ImageLockMode.WriteOnly, (lfFrame.Format.BitsPerPixel == 24 ? PixelFormat.Format24bppRgb : PixelFormat.Format32bppArgb));
lfFrame.CopyPixels(System.Windows.Int32Rect.Empty, lbdData.Scan0, lbdData.Height * lbdData.Stride, lbdData.Stride);
lbmpBitmap.UnlockBits(lbdData);
return lbmpBitmap;
}
관련 문제
- 1. WPF - Byte []에서 JpegBitmapDecoder를 사용하여 BitmapSource로 파일 변환
- 2. 카운트를 사용하는 SQL 하위 쿼리를 사용하는 방법
- 3. dijit.Calendar를 팝업으로 사용하는 대신 직접 사용하는 방법
- 4. GdkPixBuf를 사용하는 방법?
- 5. 자바에서 JSpeex를 사용하는 방법
- 6. TestComplete에서 CVS를 사용하는 방법?
- 7. 코드에서 IHardwareService를 사용하는 방법?
- 8. Lucene.Net에서 동의어를 사용하는 방법
- 9. JQuery에서 아약스를 사용하는 방법
- 10. java.util.Timer - 제대로 사용하는 방법?
- 11. GridView 이벤트를 사용하는 방법
- 12. OnKeyboardActionListener를 사용하는 방법?
- 13. 아이폰에서 XMLRPC를 사용하는 방법?
- 14. ViewGroup에서 addView를 사용하는 방법?
- 15. QLPreviewPanel 사용하는 방법?
- 16. ViewController - 올바르게 사용하는 방법?
- 17. NSPR을 사용하는 방법?
- 18. Flexjson JSONDeserializer를 사용하는 방법?
- 19. MemoryPoolMXBean을 사용하는 방법
- 20. wcf에서 MessageParameterAttribute를 사용하는 방법
- 21. SqlBulkCopyColumnMappingCollection을 사용하는 방법?
- 22. Django에서 Matplotlib을 사용하는 방법?
- 23. 자바 API를 사용하는 방법?
- 24. Java에서 socket을 사용하는 방법
- 25. AutomationProperties.Name을 사용하는 방법?
- 26. Apache에서 ASPX를 사용하는 방법
- 27. matplotlib.pyplot.imshow에서 'extent'를 사용하는 방법
- 28. 펄 예외를 사용하는 방법?
- 29. html 요소를 사용하는 방법
- 30. EXTJS4에서 Ext.define을 사용하는 방법