Arsip: Menampilkan image

 
user 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??

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
user image
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.
user image
more 19 years ago

LuriDarmawan

kuuullllll..... :) ga percuman deh ngasih space gratiss.. tp kalo bisa blog-nya diisi tentang delphi dong.. xixixiix.... semangat semangaattt...
user image
more 19 years ago

coolmib

Kalo bedah file graphic dgn delphi bisa khan?? .... Tapi ternyata byk variantnya... Hrs pelajari lagi :(
user image
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
user image
more 19 years ago

coolmib

Iya...dah kerasa nih lambatnya...padahal baru file ukuran 1MB, blom yg belasan MB... ada solusi lain ??
user image
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
user image
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:
user image
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..
user image
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
Share to

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

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com