2015-01-30 5 views
-1

저는 vb.net 프레임 워크 4.5를 사용하고 있습니다. 제 3 자로부터 CSV 파일을받습니다. 한 블록에서 BMP 이미지입니다. 파일에서 문자열로 읽습니다.VB.net에서 문자열에서 비트 맵으로

이 BMP를 JPG로 변환하고 싶습니다. .net 프레임 워크에서 비트 맵 클래스에 대해 배웠습니다. 이것은 비트 맵을 나타내며 JPG 형식으로 저장할 수 있습니다. 그러나 비트 맵 클래스 생성자는 파일 이름을 매개 변수로 사용합니다. 그건 내가 원하는 것이 아니야. 문자열을 IO 메모리 스트림으로 변환하고 비트 맵 클래스로 읽으려고했으나 작동하지 않습니다.

다른 사람이 methodes/classes에 포인터를 사용하여이를 수행 할 수 있습니까?

+0

당신이 우리를 보여줄 수 무엇을 시도한거야? (특히, 비트 맵 클래스로 읽어들이는 스트림)? –

+0

데이터가 BMP 파일의 바이너리 형식으로되어 있습니까? 어쩌면 읽는 정보가 어떻게 든 분석되어야합니다. –

답변

0

게시물은 this입니다. 문자열이 이미지를 나타내는 유효한 바이트 문자열이라고 가정하면이 게시물에서 찾고있는 것을 제공해야합니다. 코드 예제는 C#이지만 VB.Net로 변환하기에 충분히 간단합니다.

1

문자열의 형식을 모르면 코드를 제공하기가 어렵습니다 ...

... 기본 64 인코딩 된 문자열 일 수 있습니다. 여기 PictureBox1에있는 이미지 이미지의 뒤쪽으로, 기본 64 문자열로 변환하고 PictureBox2에 배치되는 것을 보여주는 예입니다 : 여기

Image via Base 64 String

Dim oldMS As New System.IO.MemoryStream 
    PictureBox1.Image.Save(oldMS, System.Drawing.Imaging.ImageFormat.Jpeg) 
    Dim strData As String = Convert.ToBase64String(oldMS.ToArray) 

    Debug.Print(strData) 

    Dim bytes() As Byte = Convert.FromBase64String(strData) ' strData would come from your CSV file 
    Dim MS As New System.IO.MemoryStream(bytes) 
    Dim bmp As Image = Image.FromStream(MS) 
    PictureBox2.Image = bmp 

문자열이 모습처럼 :

/9j/4AAQSkZJRgABAQEAYABgAAD/4QBORXhpZgAATU0AKgAAAAgABAMBAAUAAAABAAAAPlEQAAEAAAABAQAAAFERAAQAAAABAAAAAFESAAQAAAABAAAAAAAAAAAAAYagAACxj//bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIACAAIAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOG8R69rvjTWdTvpbyVYoGYw24chVUdFUDjO0E++PeuS+13P/PxL/wB9muo8OXzrqF5YgxEmVp4lk4BZc5GexI5/4DjvWRrGkm3uZ5raJltwxJjPLQg9AfUe9ekopLQy5veszO+13P8Az8S/99mur8Pa9rngzW9OvIL6RklZfPt95KkHBKMDxnawPtn2rE0vTd08E91EzwlspAv358dh6D1J/Wr+sXcv261s5PKD+cLiVYjkBmxgbu5xzn/ax2FTJJqw09TFa4ktdVe4iOJI5iynHvXeeGYrDUDDNfTTJJGjTxWSRbmkReSqyZ4DYIww/wDr874v8I6t4a8QXVpdWkxjMjGGYISsik5BBHtWZaz6haxSQrFP5Mi7XUKQcexxx0FHM+X3WEopvU6XxAtlZ3V39keZyQJp7V02sFbBAaTPIGQMKBXJRzSXOqJNKcu8wZjj3qe7lv7pEiMM4hjAVEKk8D1Pc8n+mK0/CPhLVvEmv2tpaWk2zzFMszIQsag5JJ+naknaPvMdknof/9k= 
0

모든 영감을 주셔서 감사합니다. 이것이 내가 한 일이고 효과가있는 것입니다.

Dim bytes() As Byte 
Dim MS As System.IO.MemoryStream 
Dim ImageInStringFormat as string 
Dim NewImage As System.Drawing.Image 

bytes = Convert.FromBase64String(ImageInStringFormat) 
MS = New System.IO.MemoryStream(bytes) 
NewImage = System.Drawing.Image.FromStream(MS) 

NewImage.Save("c:\temp\try.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 

마지막으로, 사용중인 문자열이 유효한 Base64 문자열이 아닙니다. 문자열의 길이를 가져 와서 4로 나눌 수 있는지 확인하여이를 확인할 수 있습니다. 문자열의 끝 부분에서 4로 나눌 수있을 때까지 = 아닙니다.이 문자열은 유효한 Base64 문자열로 구워집니다.

0

파일 시스템에 저장하지 않고 해결책 :
나는이 질문의 답변 + 이것에 How to Convert System.Drawing.Image to Byte Array? 결합 : 나는 누군가가 :) 도움이되기를 바랍니다

Function ImageToString(ByVal Img As Image) 
    Dim ImgConverter As New ImageConverter() 
    Dim ImgBytes As Byte() = ImgConverter.ConvertTo(Img, GetType(Byte())) 
    Return Convert.ToBase64String(ImgBytes) 
End Function 

관련 문제