Jpeg ve gif dosyalari

Başlatan bunalmis, 22 Şubat 2010, 16:22:26

z

Bmp dosyalari okuyup resim uzerinde pixel bazinda okuma yazma yapabiliyoruz.

Jpeg dosyalari da okuyup goruntuleyebiliyoruz. Ancak X,Y koordinatindaki pixeli okumama izin verilmiyor.

Jpeg ve Gif dosya TImage icine aktarildiktan sonra her bir pixelin renk degerlerine nasil ulasabilirim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

Jpeg için şöyle bir örnek var:
var
  Form1:  TForm1;
  Images: TList;

procedure TForm1.Load_UIButtonClick(Sender: TObject);
var
 p1:TPicture;
 i:integer;
 str1, str2, str3:String;
 b1:TBitmap;
begin
  str1 :='E:\DelphiProjects\Images\Chab-01_';
  str3 := '.jpg';
  p1 := TPicture.Create;
  try
    images.Clear;

    for i := 1 to 9 do begin
      str2 := format('%2.2d', [i]);
      p1.LoadFromFile(str1+str2+str3); // E:\DelphiProjects\Images\Chab-01_03.JPG
      b1 := TBitmap.Create ;
      b1.Height := p1.Graphic.Height;  // Must set Height & Width
      b1.Width  := p1.Graphic.Width;
      b1.Canvas.Draw(0,0,p1.Graphic);
      images.Add(b1);
    end;

    Image1.Picture.Bitmap := b1;       // Just indicates that the loop is done

    Image_UIScrollBar.SetParams(1, 1, images.Count);
  finally
    p1.Free;
  end;
end;

Sanırım jpeg i p1 objesine yükledikten sonra pixel := b1.Canvas.Pixels[x1, y1] diye bitmap gibi pixelleri okunabilir.

Gif için ise biraz okumak gerek:
http://delphi.about.com/od/graphics/a/delphigif.htm

Gif image size için kolay okuma yöntemleri var ama giflerde animasyon özelliğine dikkat etmek gerekiyor.

Alıntı YapTOleGraphic provides a wrapper for OLEPRO32.DLL - a Microsoft dll that reads (and possibly writes) gif files. This code will display gif files on your form.

     Uses ..., axctrls;

     procedure TForm1.Open1Click(Sender: TObject);
     var
       f : TFileStream;
       graphic : TOleGraphic;
     begin
       if OpenDialog1.Execute then
       begin
         graphic := TOleGraphic.Create;  

         f := TFileStream.Create (OpenDialog1.FileName,
                                   fmOpenRead or fmShareDenyNone);
         try
           graphic.LoadFromStream(f);
           Image1.Picture.Assign(graphic);
         finally
           f.Free
         end
       end
     end;
http://mc-computing.com/Languages/Delphi/Images.html

z

Alıntı YapSanırım jpeg i p1 objesine yükledikten sonra pixel := b1.Canvas.Pixels[x1, y1] diye bitmap gibi pixelleri okunabilir.

Iste sorun burada. Bmp olsaydi boyle okuyabiliyorduk fakat jpg oldugunda bu komut hata veriyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

Matlab da cosinus transformation yaparak okurduk.
Herhangi bir ek component yada jpeg to bmp fonksiyonu gerekiyor ozaman.

Elimdekiler bunlar:
uses Jpeg;

procedure Bmp2Jpeg(const BmpFileName, JpgFileName: string);
var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  Bmp := TBitmap.Create;
  Jpg := TJPEGImage.Create;
  try
    Bmp.LoadFromFile(BmpFileName);
    Jpg.Assign(Bmp);
    Jpg.SaveToFile(JpgFileName);
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;

procedure Jpeg2Bmp(const BmpFileName, JpgFileName: string);
var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  Bmp := TBitmap.Create;
  Jpg := TJPEGImage.Create;
  try
    Jpg.LoadFromFile(JpgFileName);
    Bmp.Assign(Jpg);
    Bmp.SaveToFile(BmpFileName);
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;


uses
  JPEG;


procedure JPEGtoBMP(const FileName: TFileName);
var
  jpeg: TJPEGImage;
  bmp:  TBitmap;
begin
  jpeg := TJPEGImage.Create;
  try
    jpeg.CompressionQuality := 100; {Default Value}
    jpeg.LoadFromFile(FileName);
    bmp := TBitmap.Create;
    try
      bmp.Assign(jpeg);
      bmp.SaveTofile(ChangeFileExt(FileName, '.bmp'));
    finally
      bmp.Free
    end;
  finally
    jpeg.Free
  end;
end;


uses
  JPEG;

procedure JPEGtoBMP(const FileName: TFileName);
var
  jpeg: TJPEGImage;
  bmp:  TBitmap;
begin
  jpeg := TJPEGImage.Create;
  try
    jpeg.CompressionQuality := 100; {Default Value}
    jpeg.LoadFromFile(FileName);
    bmp := TBitmap.Create;
    try
      bmp.Assign(jpeg);
      bmp.SaveTofile(ChangeFileExt(FileName, '.bmp'));
    finally
      bmp.Free
    end;
  finally
    jpeg.Free
  end;
end;


uses JPEG;
...
var
 JPEGImage: TJPEGImage;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  JPEGImage:=TJPEGImage.Create;
  if OpenDialog1.Execute then
  begin
    JPEGImage.LoadFromFile(OpenDialog1.FileName);
    Image1.Canvas.Draw(0,0,JPEGImage);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  try
    Bitmap:=TBitmap.Create;
    with Bitmap do
    begin
      PixelFormat:=pf24bit;
      Height:=JPEGImage.Height;
      Width:=JPEGImage.Width;
      Canvas.Draw(0,0, JPEGImage);
    end;
    if SaveDialog1.Execute then
      Bitmap.SaveToFile(SaveDialog1.FileName);
    Label1.Caption:='Convertation finised';
  finally
    Bitmap.Free;
    JPEGImage.Free;
  end;
end;


Hepsi aşağı yukarı aynı zaten.