Arsip: Menampilkan image
                
                   more 19 years ago
                  
              coolmib
Halo semua...!!
Saya lagi coba buat program kecil u/ view gambar dari file image yg tdk umum (tdk standard). berhubung blm pernah main di graphic yach tdk tau
ada kesalahan dimana. Intinya di file tsb (face.epf) terdapat 2 frame gambar strukturnya bisa dibaca di dlm code. Permasalahannya gambarnya tdk sesuai dgn yg diinginkan (seharusnya) dibagian bawah saya sertakan 2 gbr yg seharusnya ditampilkan (blm diproses) dan 2 lagi setelah diproses. 
   Untuk tahap skg saya cuman ingin gbr yg ditampilkan sesuai dgn yg blm diproses. Ada yg bisa bantu koreksi?? 
                    
          
          
                     File EPF-nya bisa diambil disini  
Hasil dari Code di atas

                
unit ViewEPF;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type tEPFHeader = record
     frameCount     : word;
     canvasWidht    : Word;
     canvasHeight   : Word;
     UnknownVar     : Word;
     TocOffset      : integer;
end;
Type tFrameHdr = record
     left : word;
     top  : word;
     right : word;
     bottom : word;
     startOff : integer;
     EndOff : integer;
end;
var
  Form1: TForm1;
  imageFrame : array of tFrameHdr;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var dat : TFileStream ;
    test : tEPFHeader;
    appPath:String;
    frameCount,i,j,k : word;
    Bitmap : array of tBitmap;
    value  : byte;
begin
  appPath :=ExtractFilePath(ParamStr(0));
  if not (FileExists(AppPath + 'Face.epf')) then
     //missing
  else begin
     dat := TFileStream.Create(AppPath + 'Face.epf', fmOpenRead, fmShareDenyWrite);
     dat.Read(test.frameCount,2);
     frameCount:=test.frameCount;   
     setlength(imageFrame,frameCount);
     setlength(Bitmap,frameCount);
     dat.Read(test.canvasWidht,2);
     dat.Read(test.canvasHeight,2);
     dat.Read(test.UnknownVar,2);
     dat.Read(test.TocOffset,4);
     dat.Seek(test.TocOffset,soFromCurrent);
     for i := 0 to frameCount -1 do begin
         dat.Read(imageFrame[i].left,2);
         dat.Read(imageFrame[i].top,2);
         dat.Read(imageFrame[i].right,2);
         dat.Read(imageFrame[i].bottom,2);
         dat.Read(imageFrame[i].startOff,4);
         dat.Read(imageFrame[i].endOff,4);
     end;
     for i := 0 to frameCount -1 do begin
       bitmap[i] :=TBitmap.Create;
       Bitmap[i].Height := test.canvasHeight;
       Bitmap[i].Width  := test.canvasWidht;
       bitmap[i].Transparent := true;
       dat.Seek(imageframe[i].startOff+12,soFromBeginning);
       FOR j := 0 TO Bitmap[i].width-1 DO
       BEGIN
        FOR k := 0 TO Bitmap[i].Height -1 DO begin
         dat.read(value,1);
         bitmap[i].Canvas.Pixels[j,k]:=value; {Kemungkinan kesalahan di sini}
        end;
       END;
     end;
    Image1.Picture.Graphic :=Bitmap[0];
    Image2.Picture.Graphic :=Bitmap[1];
    for i:=0 to frameCount -1 do
    Bitmap[i].Free;  
    dat.Free;
  end;
end;
end.
                    
          
          
                     File EPF-nya bisa diambil disini  
Hasil dari Code di atas
                
                   more 19 years ago
                  
              coolmib
setelah trial error sekian lama, akhir ketemu... lsg gambar aslinya !!!!

                
unit ViewEPF;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type tEPFHeader = record
     frameCount     : word;
     canvasWidht    : Word;
     canvasHeight   : Word;
     UnknownVar     : Word;
     TocOffset      : integer;
end;
Type tFrameHdr = record
     left : word;
     top  : word;
     right : word;
     bottom : word;
     startOff : integer;
     EndOff : integer;
end;
type tPalleteColor = record
     red   : byte;
     green : byte;
     blue  : byte;
     alpha : byte;
end;
var
  Form1: TForm1;
  imageFrame : array of tFrameHdr;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var dat,dPal : TFileStream ;
    test : tEPFHeader;
    appPath:String;
    frameCount,i,j,k : word;
    Bitmap : array of tBitmap;
    value  : byte;
    tpc : array[0..255] of tPalleteColor;
begin
  appPath :=ExtractFilePath(ParamStr(0));
  if not (FileExists(AppPath + 'Face.epf')) then
     //missing
  else begin
     dat := TFileStream.Create(AppPath + 'Face.epf', fmOpenRead, fmShareDenyWrite);
     dpal:= TFileStream.Create(AppPath + 'Face.pal', fmOpenRead, fmShareDenyWrite);
     //load the pallete
     dpal.Seek(39,soBeginning); // 38 byte of header ??
     for i := 0 to 255 do begin
       dpal.Read(tpc[i].red,1);
       dpal.Read(tpc[i].green,1);
       dpal.Read(tpc[i].blue,1);
       dpal.Read(tpc[i].alpha,1);
     end;
     dat.Read(test.frameCount,2);
     frameCount:=test.frameCount;
     setlength(imageFrame,frameCount);
     setlength(Bitmap,frameCount);
     dat.Read(test.canvasWidht,2);
     dat.Read(test.canvasHeight,2);
     dat.Read(test.UnknownVar,2);
     dat.Read(test.TocOffset,4);
     dat.Seek(test.TocOffset,soFromCurrent);
     for i := 0 to frameCount -1 do begin
         dat.Read(imageFrame[i].left,2);
         dat.Read(imageFrame[i].top,2);
         dat.Read(imageFrame[i].right,2);
         dat.Read(imageFrame[i].bottom,2);
         dat.Read(imageFrame[i].startOff,4);
         dat.Read(imageFrame[i].endOff,4);
     end;
     for i := 0 to frameCount -1 do begin
       bitmap[i] :=TBitmap.Create;
       Bitmap[i].Height := test.canvasHeight;
       Bitmap[i].Width  := test.canvasWidht;
       bitmap[i].Transparent := true;
       Bitmap[i].PixelFormat := pf24bit;
       dat.Seek(imageframe[i].startOff+12,soFromBeginning);
       FOR j := 0 TO Bitmap[i].height-1 DO
       BEGIN
        FOR k := 0 TO Bitmap[i].Width -1 DO begin
         dat.read(value,1);
         bitmap[i].Canvas.Pixels[k,j]:=RGB(tpc[value].red,tpc[value].green,tpc[value].blue);
        end;
       END;
     end;
    Image1.Picture.Graphic :=Bitmap[0];
    Image2.Picture.Graphic :=Bitmap[1];
    for i:=0 to frameCount -1 do
    Bitmap[i].Free;  
    dat.Free;
    dpal.Free; 
  end;
end;
end.
                
                   more 19 years ago
                  
              LuriDarmawan
kuuullllll.....  :)
ga percuman deh ngasih space gratiss..
tp kalo bisa blog-nya diisi tentang delphi dong..
xixixiix....
semangat semangaattt...
                
                
                   more 19 years ago
                  
              coolmib
Kalo bedah file graphic dgn delphi bisa khan?? 
.... Tapi ternyata byk variantnya... Hrs pelajari lagi :(
                
                
                   more 19 years ago
                  
              DelphiExpert
Bedah ginjal aje bisa palagi bedah graphic xixixixi...
Kuul... kuul man... you're kuuuul kukukuk :D
Ternyata pake format EPF ya, hikhik... udah di benchmark pake metode Canvas.Pixel lambat ngga'?
Ngga' kerasa si kalo datanya imut, kalo gedhe huhuhu... lemoot...
Semangat... semangaaaaaattt hehehe
                
                
                   more 19 years ago
                  
              coolmib
Iya...dah kerasa nih lambatnya...padahal baru file ukuran 1MB, blom yg belasan MB... ada solusi lain ??
                
                
                   more 19 years ago
                  
              DelphiExpert
Solusi terbaik mungkin cari dulu library EPF, baca stream per block-frame (ngga' usah satu2 per RGB color info), lalu load pake lib EPF dari stream. 
Itu baru cepet :D
Semangat... semangaaatt... kukuk
                
                
                   more 19 years ago
                  
              coolmib
EPF yg satu ini beda... kalo ada librarynya mungkin harus minta dulu ke nexon atau nexus :p
Ngomong-ngomong si Zeal kok gak kelihatan yach?? apa dah kapok main dgn graphic  :lol:  :lol:  :lol:
                
                
                   more 19 years ago
                  
              ZeAL
ade ape nih name aye disebut-sebut...?? 
oww.. masale grapik-grapikan... solusi mudah dari aye ya udah aye bilang, per-piksel, dan uda pasti lambreta begondong... (kayak kode ente itu loh).
Kalo dimasupin alias dinongolin alias ditampilin gambarnye sekaligus, tumplek-plek, wah.. aye kagak tau tuh caranye... aye juga pengen tau malahan..
kerjaan aye lagi mepet banget nih waktunye.. dah 1 bulan blon aye beresin web kerjaan aye.. jadi umpame aye kagak nongol, maklumin aje yee....
okey, beibeh..
                
                
                   more 19 years ago
                  
              coolmib
Kalo seandainya kita tau nilai dari masing-masing variable RGB (Red, Green, Blue) plus nilai alpha.
Gimana cara u/ mengimplementasikan nilai alpha ke dlm pixel seperti code dibawah ini :
bitmap.Canvas.Pixels[k,j]:=RGB(apal.red,apal.green,apal.blue)
                more ...
              - Pages:
 - 1
 - 2
 
                    
                     reply  |
                     Report Obsolete
                  
                AI Forward
            
🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: 
https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 5 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 5 years ago - Archive
 - Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 13 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 13 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 13 years ago 
Random Topic
- Tigor's Antivirus (WORO-WORO)
by n3o_cybertech in Tutorial & Community Project more 18 years ago - aplikasi gak bisa dibongkar
by delphi_tikuzz in Enginering more 17 years ago - Bewara SQL Lagi...
by reminder2k1 in MsSQL more 17 years ago - Private server RO
by adhiet_cool7 in Games more 18 years ago - Jumlah Komponen dalam Form
by SnipSnip in Form Enhancement & Graphical Controls more 19 years ago - Perintah Explode
by Yudho in Hal umum tentang Pascal Indonesia more 19 years ago - baca excel sebagai table.
by Starboard in Tip n Trik Pemrograman more 20 years ago - [ASK]tanya code print
by Iansx in Tip n Trik Pemrograman more 18 years ago - nanya component
by yuan_carlos in Form Enhancement & Graphical Controls more 17 years ago - Menghitung Jumlah hari minggu
by grounders in Enginering more 20 years ago