Memoryfile
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/09/2011 at 12:28, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 12/13
Platform: Windows ; Mac OSX ;
Language(s) : C++ ;---------
Hi,I have a base bitmap (jpeg) and a valid pointer to the memory to store.
How would one use "MemoryFileStruct" and "SetMemoryWriteMode" or should this be done differently?Jan
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 27/09/2011 at 06:00, xxxxxxxx wrote:
The MemoryFileStruct class is is only used to write/read to memory instead of files. It basically replaces a filename.
here an example that writes a line of characters and prints the retrieved data.
Bool MenuTest::Execute(BaseDocument *doc) { AutoAlloc<MemoryFileStruct> mfs; if (!mfs) return FALSE; Filename fn; fn.SetMemoryWriteMode(mfs); AutoAlloc<BaseFile> file; if (!file) return FALSE; if (!file->Open(fn, FILEOPEN_WRITE, FILEDIALOG_IGNOREOPEN, BYTEORDER_INTEL)) return FALSE; CHAR *line = "hello world!"; //write something to the memory file if (!file->WriteBytes(line, strlen(line))) return FALSE; void *testline = NULL; VLONG length = 0; //get the written data mfs->GetData(testline, length, FALSE); if (!testline) return FALSE; String str((CHAR* )testline); GePrint(str); return TRUE; }
cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 27/09/2011 at 08:55, xxxxxxxx wrote:
I see.
But my target is to save a freshly rendered preview in a base bitmap (jpeg) to an already initialized pointer in memory.
It seems to me that i cannot use the basefile in this case.What are my options? What is possible?
I need to do this in realtime and as fast as possible. A preview is good enough.1.Render directly in the memory already initialized?
2.Maybe by getting a handle to the jpeg data in the base bitmap? Can that be done?
3.Or a handle to the offscreen rendered preview? That is also a lot more efficient, because I would not need to force an extra render. .Jan
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/09/2011 at 02:53, xxxxxxxx wrote:
Do you mean viewport rendering?
Anyways, saving a JPG to memory seems to work as follows:
Bool MenuTest::Execute(BaseDocument *doc) { AutoAlloc<MemoryFileStruct> mfs; if (!mfs) return FALSE; Filename fn; fn.SetMemoryWriteMode(mfs); BaseBitmap *bmp = NULL; bmp = BaseBitmap::Alloc(); if (!bmp) return FALSE; BaseContainer bc; bc.SetLong(JPGSAVER_QUALITY, 80); void *mbmp = NULL; VLONG length = 0; if (bmp->Init(1024,512) != IMAGERESULT_OK) goto Error; bmp->Clear(255,0,0); if (bmp->Save(fn, FILTER_JPG, &bc, SAVEBIT_0) != IMAGERESULT_OK) goto Error; GePrint("saved"); //get the written data mfs->GetData(mbmp, length, FALSE); if (!mbmp) goto Error; // mbmp is the pointer to the JPG data GePrint(LongToString(length)); return TRUE; Error: BaseBitmap::Free(bmp); return FALSE; }
Hope that helps.
cheers,
Matthias