2010-06-17 6 views
2

이미지를 바이트 배열로 변환하고 다음 코드를 사용하여 텍스트 파일에 저장합니다. 나는 그들을 성공적으로 검색하고있다.C# - 이미지의 고품질 바이트 배열 변환

내 관심사는 검색된 이미지의 품질이 기대에 미치지 못하는 것입니다. 더 나은 바이트 배열로 변환 및 검색 할 수있는 방법이 있나요? 나는 우주 개념에 대해 걱정하지 않는다.

의견을 말하십시오.

string plaintextStoringLocation = @"D:\ImageSource\Cha5.txt"; 
    string bmpSourceLocation = @"D:\ImageSource\Cha50.bmp"; 

    ////Read image 
    Image sourceImg = Image.FromFile(bmpSourceLocation); 

    ////Convert to Byte[] 
    byte[] clearByteArray = ImageToByteArray(sourceImg); 


    ////Store it for future use (in plain text form) 
    StoreToLocation(clearByteArray, plaintextStoringLocation); 

    //Read from binary 
    byte[] retirevedImageBytes = ReadByteArrayFromFile(plaintextStoringLocation); 

    //Retrieve from Byte[] 
    Image destinationImg = ByteArrayToImage(retirevedImageBytes); 

    //Display Image 
    pictureBox1.Image = destinationImg; 

편집 : 그리고 솔루션입니다 - Base64

  //Plain Text Storing Location 
      string plaintextStoringLocation = @"D:\ImageSource\GirlInflower23.txt"; 
      string bmpSourceLocation = @"D:\ImageSource\GirlInflower1.bmp"; 

      ////Read image 
      Image sourceImg = Image.FromFile(bmpSourceLocation); 


      string base64StringOfIMage = ImageToBase64(sourceImg, ImageFormat.Bmp); 

      byte[] byteOfString = Convert.FromBase64String(base64StringOfIMage); 


      StoreToLocation(byteOfString, plaintextStoringLocation); 

      byte[] retrievedBytesForStrimngForImage = ReadByteArrayFromFile(plaintextStoringLocation); 


      MemoryStream memStream = new MemoryStream(retrievedBytesForStrimngForImage); 
      //memStream.Read(); 

      Image retrievedImg = Image.FromStream(memStream); 
      pictureBox1.Image = retrievedImg; 
+1

ImageToByteArray, ReadByteArrayFromFile 및 ByteArrayToImage 란 무엇입니까? 자신이 작성한 코드입니까? –

+0

'byte []'로 변환 할 때 파일에 쓰거나 읽는 것과 같은 인코딩을 사용하고 있습니까? – Oded

답변

2

예, 완전히 무손실 스토리지를 얻을 수 있습니다 사용합니다. 원래 BMP 형식으로 저장하면 문제가 없습니다. 난 당신이 바이너리 문자가 손상됩니다 몇 가지 프로토콜을 통해 보내려고하기 때문에 텍스트로 변환 가정합니다.

무엇을하시는 대신 Convert.ToBase64String을 사용해보십시오.

+0

예. 이 문제를 해결하는 것은 Base64입니다. – Lijo

1

이 조각에 문제가 없었습니다 ... 시도해보십시오. 좋은 결과가 나온다면 이미지 -> 바이트 [] 또는 바이트 [] -> 이미지 코드에있는 문제입니다.

Image srcImage; 
Image destImage; 

// load an image 
srcImage = Image.FromFile(filename); 

// save the image via stream -> byte[] 
using(MemoryStream stream = new MemoryStream()){ 
    image.Save(stream, ImageFormat.xxx); 
    byte[] saveArray = stream.ToArray(); 
    /*..... strore saveArray......*/ 
} 

// rehydrate 
byte[] loadArray = /*...get byte array from storage...*/ 

using(MemoryStream stream = new MemeoryStream(loadArray)){ 
    destImage = Image.FromStream(stream); 
} 

pictureBox.Image = dstImage; 

// don't forget...dispose of any Image/Stream objects 
관련 문제