를 사용 MemoryStream
하여 이미지를 바이트 배열로 바꾸려고하는데 이미지를 복구하면 이미지가 다르게 보입니다.
Form
문제를 보여주는 간단한 앱을 만들었습니다 . 이 예에서는 Google 크롬 아이콘을 사용하고 있습니다.
var process = Process.GetProcessById(3876); // found pid manually
var image = Icon.ExtractAssociatedIcon(process.MainModule.FileName).ToBitmap();
pictureBox1.Image = image;
byte[] imageBytes;
using (var ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Bmp);
imageBytes = ms.ToArray();
}
using (var ms = new MemoryStream(imageBytes))
{
pictureBox2.Image = (Bitmap) Image.FromStream(ms);
}
결과:
내가 여기서 뭘 놓치고 있는지 아십니까?
업데이트 다음 코드를 사용하여 적절한 바이트를 얻을 수있었습니다.
var converter = new ImageConverter();
var imageBytes = (byte[]) converter.ConvertTo(image, typeof(byte[]));
그래도 메모리 스트림에 무슨 일이 일어나고 있는지 알고 싶습니다 ..
아이콘은 복잡 합니다. 투명한 부분이 포함되어 있으면 BMP 또는 JPG로 변환하는 것이 거의 항상 나쁘게 끝나는 것처럼 보입니다 . 또한 ImageConverter
BMP 변환없이 코드가 수행하는 작업을 거의 수행 할 필요 가 없습니다.
var process = Process.GetProcessById(844); // found pid manually
var image = Icon.ExtractAssociatedIcon(process.MainModule.FileName).ToBitmap();
pb1.Image = image;
byte[] imageBytes;
using (var ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Png); // PNG for transparency
ms.Position = 0;
pb2.Image = (Bitmap)Image.FromStream(ms);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다