Domino 9 und frühere Versionen > ND7: Entwicklung

Größe von eingebetteten Bildern ermitteln

(1/4) > >>

rar:
Hallo ihr Zwischenweihnachtenundneujahrforumaktiven,

kennt ihr zufällig eine Möglichkeit mir der ich die Größe von eingebetteten Bildern in einem RTF ermitteln kann? Ähnlich wie notesEmbeddedObject.FileSize

lG
-daniel

pram:
Dies funktioniert über DXL und ist nicht unbedingt einfach. (Ein anderer Weg wäre mir nicht bekannt, zumindest in LS. Ggf. könnte man aber den HTTP-Task "missbrauchen")

Wie man Bilder exportiert kannst du dir hier ansehen.
http://www.openntf.org/Projects/codebin/codebin.nsf/0/A089BEEADCA0A1A9862573000052B474
Wenn du zus. noch die Abmessungen willst, brauchst du die Spezifikation von GIF/JPG, diese findest du z.B. auf www.wotsit.org

Gruß
Roland

eknori:
DXL ist eine Möglichkeit; C-API eine andere.

Habe mal ein kleines Programm zusmmengebaut, das die CD REcords eines Richtext Feldes ausliest und auflistet. Die gesuchten Daten stecken entweder in der struct CD_IMAGEHEADER oder man addiert einfach die Recordlängen von CD_IMAGESEGMENT.

Das "Dos" Fenster zeigt die Ausgabe meines Programms, zur Kontrolle habe ich die Daten auch mal mit NotesPeek dargestellt.

Bevor jetzt die Frage aufkommt; nein, mit LS2CAPI kann man da nix machen, da Lotusscript keine Callbacks unterstützt.

eknori:
mit ein paar Zeilen Code mehr bekomme ich jetzt die Grösse aus dem CD_IMAGEHEADER geliefert

eknori:
und hier der ( abgespeckte ) Quelltext:


--- Code: ---#include <stdio.h>
#include <string.h>
#include <global.h>
#include <nsfdb.h>
#include <nsfnote.h>
#include <oleods.h>

/* Prototypes */
STATUS LNPUBLIC ProcessOneCDRecord(
  char   *RecordPtr,
  WORD    RecordType,
  DWORD   RecordLength,
  void   *p_ptr_void );
void CleanUp(
DBHANDLE db_handle,
NOTEHANDLE note_handle);

void ProcessImageHeader(
char *RecordPtr,
DWORD RecordLength,  
WORD RecordType );

int main(int argc, char *argv[])
{
char db_filename[]="rt.nsf";
DBHANDLE db_handle;
NOTEHANDLE note_handle;
STATUS error = NOERROR;
char itemname[] ="Body";
DWORD NoteID = 2294;
BLOCKID item_blockid;
BLOCKID value_blockid;
WORD value_datatype;
DWORD value_len;

if (error = NotesInitExtended (argc, argv))
{ printf("\n Unable to initialize Notes.\n");
return (1); }

/*Open Database*/
if (error = NSFDbOpen (db_filename, &db_handle))
{ printf("\n Unable to open database.\n");
NotesTerm();
return (1); }

/*Open Note*/
if (error = NSFNoteOpen (db_handle, NoteID, 0, &note_handle))
{ printf("\n Unable to open note.\n");
NotesTerm();
return (1); }

if (error = NSFItemInfo (
note_handle,
itemname,
strlen(itemname),
&item_blockid,
&value_datatype,
&value_blockid,
&value_len))
{
printf("\n Unable to get note-info.\n");
CleanUp (db_handle, note_handle);
return (1);
}

if (error = EnumCompositeBuffer(
value_blockid,
value_len,
ProcessOneCDRecord,
NULL ) )
{
CleanUp(db_handle, note_handle);
return(0);
}

if (error = NSFDbClose (db_handle))
return (1);

NotesTerm();
return (0);
}

/*************************************************************************
FUNCTION:   CleanUp
**************************************************************************/
void CleanUp(DBHANDLE db_handle, NOTEHANDLE note_handle)
{
NSFDbClose (db_handle);
NSFNoteClose (note_handle);
NotesTerm();
}

/************************************************************************
FUNCTION:   ProcessOneCDRecord
*************************************************************************/
STATUS LNPUBLIC ProcessOneCDRecord(
  char   *RecordPtr,
  WORD RecordType,
  DWORD RecordLength,
  void *p_ptr_void )
{
switch (RecordType)
{
case SIG_CD_IMAGEHEADER:

ProcessImageHeader( RecordPtr, RecordLength, RecordType );
break;
}
return(NOERROR);
}

/*************************************************************************
FUNCTION:   ProcessImageHeader
**************************************************************************/

void ProcessImageHeader( char *RecordPtr, DWORD RecordLength,  WORD RecordType )
{
char far * p = RecordPtr;
char ImgType[4];
CDIMAGEHEADER cdImgageHeader;

ODSReadMemory( &p, _CDIMAGEHEADER, &cdImgageHeader, 1 );
printf("\n");
printf("Embedded Image Groesse: %d Bytes\n", cdImgageHeader.ImageDataSize);
printf("Embedded Image Breite: %d Pixel\n", cdImgageHeader.Width);
printf("Embedded Image Hoehe: %d Pixel\n", cdImgageHeader.Height);

switch (cdImgageHeader.ImageType)

{
case CDIMAGETYPE_GIF:
strcpy (ImgType,"GIF");
break;

case CDIMAGETYPE_JPEG:
strcpy (ImgType,"JPG");
break;

case CDIMAGETYPE_BMP:
strcpy (ImgType,"BMP");
break;
}

printf("Embedded Image Type: %s \n", ImgType);
return;
}
--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln