|
님의 코드는 원본 비트맵 정보를 다른 곳에 저장하는 것이 아니라 수정하고 있습니다.
비트맵 내용을 다른 곳에 저장하고 싶으면 SaveToStream 맴버 메서드를 사용하세요.
가져올 때는 LoadFromStream을 사용하구요.
지금의 경우라면, 이 메서드의 매개변수에는 TMemoryStream의 인스턴스를 가리키는 포인터를 사용하면 되겠습니다.
한편, MyStream->WriteBuffer(ptr, sizeof(ptr)); 에서
sizeof(ptr)은 님이 원하는 값이 아닙니다.
포인터의 크기인 4가 나옵니다.
int iArr[1024];
int *p = new int[1024];
sizeof(iArr) => 1024
sizeof(p) => 4
그리고 아래와 같은 함수가 있을 때
GetSize(iArr) => 4
GetSize(p) => 4
int GetSize(int *buff)
{
return sizeof(buff);
}
짱구오빠 님이 쓰신 글 :
: JPEG 이미지를 TImage에 로드한 후 이미지 정보를
: BYTE* 버퍼에 저장하고 싶습니다. 잘 않되네요....
: 그리고 저장해둔 BYTE* 버퍼의 데이터를 TImage에 다시 뿌리고 싶습니다.
: 방법이 없을까요..물론 제가 모르고 있겠죠.
: 답변 부탁드립니다.
: 수고하십시오.
:
: 제가 코딩한 소스인데...ㅠㅠ
:
: Byte *ptr;
: try
: {
: for (int y = 0; y < pBitmap->Height; y++)
: {
: ptr = (Byte *)pBitmap->ScanLine[y];
: for (int x = 0; x < pBitmap->Width; x++) ptr[x] = (Byte)y;
: }
: Canvas->Draw(0,0,pBitmap);
: }
: catch (...)
: {
: ShowMessage("Could not load or alter bitmap");
: }
:
: delete pBitmap;
:
: TMemoryStream *MyStream = new TMemoryStream();
: MyStream->WriteBuffer(ptr, sizeof(ptr));
: Image1->Picture->Bitmap->LoadFromStream(MyStream);
: delete MyStream;
|