Exemplo n.º 1
0
void BlockStream::SetSize(int64 size)
{
	if(IsError() || !IsOpen()) return;
	int64 pos = GetPos();
	Flush();
	Seek(0);
	SetStreamSize(size);
	streamsize = size;
	Seek(pos < size ? pos : size);
}
Exemplo n.º 2
0
void BlockStream::Seek(int64 apos) {
	if(IsError()) return;
	LLOG("Seek " << apos);
	if(style & STRM_WRITE) {
		SetPos(apos);
		if(apos > streamsize) {
			SetStreamSize(apos);
			streamsize = apos;
		}
	}
	else {
		if(apos > streamsize)
			apos = streamsize;
		SetPos(apos);
	}
}
Exemplo n.º 3
0
BOOL DecodeUCI(MEMORY_STREAM *pStream)
{
    UCIInfo uci;
    PBYTE pbBuffer, pbRaw;
    Int32 Stride;
    Large_Integer NewSize;
    SBitMapHeader header;

    if ((*(PULONG)pStream->pbBuffer & 0xFFFFFF) != TAG3('UCI'))
        return False;

    if (UCIDecodeEx(pStream->lpBuffer, pStream->Size, &uci, False) < 0)
        return False;

    InitBitmapHeader(&header, uci.Width, uci.Height, uci.BitsPerPixel, &Stride);
    NewSize.QuadPart = header.dwFileSize;
    SetStreamSize(pStream, NewSize);

    pbBuffer = pStream->pbBuffer;
    *(SBitMapHeader *)pbBuffer = header;

    pbBuffer += sizeof(header);
    pbBuffer += (uci.Height - 1) * Stride;
    pbRaw = uci.pbBuffer;

    for (LONG h = 0; h != uci.Height; ++h)
    {
        CopyMemory(pbBuffer, pbRaw, uci.Stride);
        pbBuffer -= Stride;
        pbRaw += uci.Stride;
    }

    UCIFreeEx(&uci);

    return True;
}