Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C Builder: buffer->stream kako?

[es] :: C/C++ programiranje :: C Builder: buffer->stream kako?

[ Pregleda: 3110 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.113.*



+4 Profil

icon C Builder: buffer->stream kako?23.11.2005. u 13:59 - pre 224 meseci

Koristim neke klase za pristup bazama podataka,napravim konekciju i tako dalje
i onda napravim upit koji u rezultatu sadrzi BLOB binarne podatke.Predhodno sam
napravio BLOB objekat u koji su ti podaci upisani metodom Get:

Code:

char buffer[2048];
st->Get(1,b);  //Prva kolona rezultata je BLOB,st je SQL upit
b->Read(buffer,2048);  //Sadrzaj BLOB-a se upisuje u buffer tipa char


Zatim treba sliku (ikonica .ico) prikazati u mehanizmu Image (TImage),preko
stream-a,to izgleda ovako:

Code:

Image->Picture->Icon->LoadFromStream(stream);
//Hvala Bogu da ne moze ovako: Image->Picture->Icon->LoadFromStream(buffer);

Isto vazi i za ucitavanje bitmape:
Code:

Image->Picture->Bitmap->LoadFromStream(stream);

Postoji klasa TMemoryStream preko koje sam pokusao da nesto uradim:
Code:

TMemoryStream* ms = new TMemoryStream();
ms->WriteBuffer(&buffer,2048); //upisivanje iz buffera u stream(?)
Image->Picture->Icon->LoadFromStream(ms);

Ovo se kompajlira bez problema, ali se nista ne dogadja na mehanizmu Image.

Zna li neko kako se sadrzaj buffer-a stavlja na stream?
Ag + Na -> Xe
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.ptt.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: C Builder: buffer->stream kako?23.11.2005. u 16:02 - pre 224 meseci
Nisam bas siguran da si dobro napravio BLOB, ali ako to zanemarimo,
odokativnom metodom, probaj ovako:

Umesto:
Citat:

TMemoryStream* ms = new TMemoryStream();
ms->WriteBuffer(&buffer,2048); //upisivanje iz buffera u stream(?)
Image->Picture->Icon->LoadFromStream(ms);


Probaj:

Code:

TMemoryStream* ms = new TMemoryStream();
ms->WriteBuffer( buffer, 2048 );

ms->Position = 0; // <--- VRATI NA POČETAK

Image->Picture->Icon->LoadFromStream( ms );
delete ms;


 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.ptt.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: C Builder: buffer->stream kako?23.11.2005. u 16:11 - pre 224 meseci
Dakle, trebalo bi nešto ovako /NETESTIRANO !!!/ :

Code:

TMemoryStream *ms = new TMemoryStream(); 
TBlobStream *NekiBlobStream = Tabela->CreateBlobStream( Tabela->FieldByName("Slika"), bmRead ); 

NekiBlobStream->Position = 0; // <-- SLIČNO KAO U PRETHODNOM SLUČAJU !!! 

ms->LoadFromStream( NekiBlobStream ); 

// ... ovde nešto radiš sa "ms", tj:

ms->Position = 0; // <-- MISLIM DA NE TREBA OVAJ RED KADA SE UČITAVA SA LoadFromStream, MADA NE ŠKODI !!! 

Image->Picture->Icon->LoadFromStream( ms );

// ... ili ...

Image->Picture->LoadFromStream( ms );

delete NekiBlobStream; 
delete ms; 


... valjda.


[Ovu poruku je menjao X Files dana 23.11.2005. u 17:14 GMT+1]
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.126.*



+4 Profil

icon Re: C Builder: buffer->stream kako?23.11.2005. u 19:08 - pre 224 meseci
Radi.
Code:

TMemoryStream* ms = new TMemoryStream();
ms->WriteBuffer( buffer, 2048 );

ms->Position = 0; // <--- VRATI NA POČETAK

Image->Picture->Icon->LoadFromStream( ms );
delete ms;

ms->WriteBuffer=0; je kritican deo.
To mi nikad ne bi palo napamet,puno hvala.

Da li se i .png/.jpg slike mogu prikazivati isto kao bitmapa?
Ag + Na -> Xe
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.ptt.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: C Builder: buffer->stream kako?23.11.2005. u 19:27 - pre 224 meseci
Citat:

ms->WriteBuffer=0; je kritican deo.
To mi nikad ne bi palo napamet, puno hvala.

Iskustvo :)

Citat:

Da li se i .png/.jpg slike mogu prikazivati isto kao bitmapa?


Za JPG:
Code:

// ...
#include <jpeg.hpp> //<--- OBAVEZNO!!!
// ...
Image1->Picture->LoadFromFile( "C:\\slika.jpg" );
// ...


Mislim da PNG niti GIF ne mogu u verziji BCB6 nativno da se prikažu. Treba
posebna komponenta za njih. Ima ih na netu besplatnih...

 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.113.*



+4 Profil

icon Re: C Builder: buffer->stream kako?23.11.2005. u 23:37 - pre 224 meseci
Ispravka, mislio sam da kazem da je :
Code:

ms->Position = 0;

kritican deo :)
Sto se tice JPEG,mislio sam ustvari na pretvaranje jpeg slike iz bafera u
stream pomocu dekompresije u bitmap,znaci da uradim sa jpeg slikom isto sto i sa ikonicama, ne znam da li to moze da se uradi sa TJPEG klasom.
Pozdrav!

[Ovu poruku je menjao Mr. Rejn dana 24.11.2005. u 00:45 GMT+1]
Ag + Na -> Xe
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.vdial.verat.net.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: C Builder: buffer->stream kako?24.11.2005. u 14:13 - pre 224 meseci
Citat:

Sto se tice JPEG,mislio sam ustvari na pretvaranje jpeg slike iz bafera u
stream pomocu dekompresije u bitmap, znaci da uradim sa jpeg slikom isto
sto i sa ikonicama, ne znam da li to moze da se uradi sa TJPEG klasom.


Ne znam sta da ti kazem - probaj pa javi!

U medjuvremenu /netestirano/:

JPG to BMP

Code:

#include <jpeg.hpp>

AnsiString FileName = "myhome.jpg";
TJPEGImage *JPEGImage = new TJPEGImage;
JPEGImage->LoadFromFile ( FileName );
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
Bitmap->Assign ( JPEGImage );
Bitmap->SaveToFile ( ChangeFileExt ( FileName, ".bmp" ) );
delete Bitmap;
delete JPEGImage;


BMP to JPG

Code:

Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->LoadFromFile("my_bitmap.bmp");
TJPEGImage *jpg = new TJPEGImage();
jpg->Assign(bmp);
jpg->SaveToFile("my_jpg.jpg");
delete jpg;
delete bmp;


[Ovu poruku je menjao X Files dana 24.11.2005. u 15:14 GMT+1]
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.113.*



+4 Profil

icon Re: C Builder: buffer->stream kako?26.11.2005. u 00:09 - pre 223 meseci
Mozes li jos da mi kazes kako da dobijem lokalnu IP adresu, tj.
adresu racunara na kome se izvrsava program kada je ovaj na mrezi?
(ali bez upotrebe onih TCP i Socket komponenti).
Ag + Na -> Xe
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: C Builder: buffer->stream kako?26.11.2005. u 08:14 - pre 223 meseci
Uvek otvori NOVU TEMU, kada pitanje nije povezano sa naslovom.


Na primer ovako:
Code:

//...
#include "winsock.h"
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   WORD wVersionRequested;
   WSADATA wsaData;

   wVersionRequested = MAKEWORD(1, 1);
   WSAStartup(wVersionRequested, &wsaData);

   hostent *p;
   char s[128];
   char *p2;

   //Get the computer name
   gethostname(s, 128);
   p = gethostbyname(s);

   AnsiString HostName = AnsiString( p->h_name );

   //Get the IpAddress
   p2 = inet_ntoa(*((in_addr *)p->h_addr));

   AnsiString HostIP = AnsiString( p2 );

   // Results
   ShowMessage ( HostName );
   ShowMessage ( HostIP );

   WSACleanup();
}


[Ovu poruku je menjao X Files dana 26.11.2005. u 10:14 GMT+1]
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.126.*



+4 Profil

icon Re: C Builder: buffer->stream kako?26.11.2005. u 14:47 - pre 223 meseci
Radi sjajno.
Ko bi rekao koliko je uzimanje IP adrese zaguljeno?
U pravu si sto se tice pokretanja nove teme,hteo sam to
da izbegnem,ali se to kosi sa pravilima-mea culpa!
Hvala ti jos jednom,to bi bilo sve za sada.
Pozdrav!
Ag + Na -> Xe
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: C Builder: buffer->stream kako?01.12.2005. u 15:02 - pre 223 meseci
"zaguljeno" je zato sto ovaj program jako cesto nece raditi svoj posao - razlog je sto masina moze imati vise IP adresa, neke od njih mogu biti virtuelne, neke stvarne. U principu svaka mrezna karta moze imati do 8 IP adresa, moguce je da nove karte mogu imati i vise... Naravno, program radi ako zelis da uzmes prvu IP adresu koja postoji. :) Ako ti pak trebaju sve, onda trazi malo po ES-u, davno sam poslao kod koji radi onako kako treba...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: C Builder: buffer->stream kako?01.12.2005. u 19:42 - pre 223 meseci
Evo ovde mozes pogledati jos neke od nacina za uzimanje MAC adresa sa racunara
koji su prilagodjeni za Borland C++ Builder...

http://bdn.borland.com/article/0,1410,26040,00.html

... ipak, koliko se secam, ima nekih problema sa kodom koji je dat. Ako budes hteo
neko drugo resenje imam ih i ja u arsenalu barem jos par komada...

P.S.

Setih se jos jednog koda, koji sam nekada koristio kao blic proveru da li je moj ID razbijen. Zapravo vrsio sam ekstrakciju rezultata komandi ipconfig winipcfg u neki
fajl i njega naknadno parsovao.

Kod je pod komentarima jer sam ga davno penzionisao:

Code:

/*
AnsiString TryToGetMAC_REDIRECT()
{
   // Odredi TEMP direktorijum...
   char TempDir[ MAX_PATH +1 ];
   TempDir[ MAX_PATH ] = '\0';
   GetTempPath( MAX_PATH, TempDir );

   // Formiraj gde cemo smestiti KUKAVICIJI FAJL
   AnsiString KF = (AnsiString)TempDir + "nic.tmp";
   //AnsiString KF = ExtractFilePath(ParamStr(0)) + "nic.tmp";

   // Obrisi stari ako ga ima...
   DeleteFile( KF );

   // Formiraj argument ...
   AnsiString ARGV;

   // Odredi pravi argument...
   if ( IsWindows9X() == true )
   {
      ARGV = Format( "/c winipcfg.exe /all /batch %s", ARRAYOFCONST (( KF )) );
   }
   else
   {
      ARGV = Format( "/c ipconfig.exe /all > %s", ARRAYOFCONST (( KF )) );
   }


   // Startuje BATCH komandu
   int rez = (int)ShellExecute( Application->Handle,
                                "open",
                                "command.com",
                                ARGV.c_str(),
                                NULL,
                                SW_HIDE );
   if ( rez <= 32 )
   {
      ShowMessage("Internal Error!");
      return ( "!" );
   }


   // OVDE TREBA PETLJA DOK NE ZAVRSI...
   volatile bool postoji = false;
   for ( int m=GetTickCount(); ( GetTickCount() - m < 5000 ) && ( postoji == false ); )
   {
      postoji = FileExists( KF );
   }

   // Ako fajla ipak nema - vrati se!
   if ( FileExists( KF ) == false )
   {  ShowMessage("Nema fajla - a trebao je da bude!");
      return ( "!" );
   }


   // Odredi duzinu novog fajla
   int handle, flength = 0;
   if ( ( handle = open ( KF.c_str(), O_RDONLY | O_BINARY ) ) == -1 )
   {
      return ( "!" );
   }
   flength = filelength ( handle );
   close ( handle );


   // Probaj da otvoris fajl...
   FILE *p;
   p = fopen ( KF.c_str(), "r+b" );
   if ( !p )
   {
      return ( "!" );
   }

   char *buffer = new char[ flength + 1 ];

   if ( !buffer )
   {
      return ( "!" );
   }

   fread( buffer, flength, 1, p );
   fclose ( p );

   if ( DeleteFile( KF ) == false )
   {
      ShowMessage("Sada ne mogu da ga obrisem!");
   }

   for ( int i=0; i<flength; i++ )
   {
      if ( buffer[i+2 ] == '-' &&
           buffer[i+5 ] == '-' &&
           buffer[i+8 ] == '-' &&
           buffer[i+11] == '-' &&
           buffer[i+14] == '-' )
      {
         char broj[13];

         broj[0]  = buffer[i+0];
         broj[1]  = buffer[i+1];
         broj[2]  = buffer[i+3];
         broj[3]  = buffer[i+4];
         broj[4]  = buffer[i+6];
         broj[5]  = buffer[i+7];
         broj[6]  = buffer[i+9];
         broj[7]  = buffer[i+10];
         broj[8]  = buffer[i+12];
         broj[9]  = buffer[i+13];
         broj[10] = buffer[i+15];
         broj[11] = buffer[i+16];
         broj[12] = '\0';

         // ovo je modem
         if ( AnsiString( broj ) != "444553540000" )
         {
            delete [] buffer;
            ShowMessage( AnsiString ( broj ) );
            return ( AnsiString ( broj ) );
         }
      }

   }

   delete [] buffer;
   return ( C(IDS_SER_NICID_BLANK_NIC) );

}
*/


[Ovu poruku je menjao X Files dana 01.12.2005. u 20:48 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: C Builder: buffer->stream kako?

[ Pregleda: 3110 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.