Friday, April 19, 2019

Sanos OS in 500 KB

http://www.jbox.dk/sanos/index.htm

http://docwiki.embarcadero.com/CodeExamples/XE2/en/FMXTBitmapScanLine_(Delphi)

http://www.marcocantu.com/delphipowerbook/GraphicsinDelphi_md6.pdf

https://www.swissdelphicenter.ch/en/showcode.php?id=2403

http://delphidabbler.com/tips/147

https://www.swissdelphicenter.ch/en/showcode.php?id=1896

http://www.efg2.com/Lab/ImageProcessing/Scanline.htm

https://www.cnblogs.com/shangdawei/archive/2013/05/06/3063750.html

http://edn.embarcadero.com/article/29173

http://delphi.xcjc.net/viewthread.php?tid=48929

http://wiki.lazarus.freepascal.org/Fast_direct_pixel_access

http://www.delphiforfun.org/Programs/Delphi_Techniques/BitmapChunks.htm

https://www.slusalica.net/blokatori.html

http://www.daniel-schwamm.de/index.php?pg=delphi-tutorials/picofpics

https://www.tek-tips.com/viewthread.cfm?qid=1626211

http://www.intitec.com/varios/Delphi_al_limite.pdf


procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
  jpg: TJpegImage;
  scale: Double;
begin
  if opendialog1.execute then
  begin
    jpg := TJpegImage.Create;
    try
      jpg.Loadfromfile(opendialog1.filename);
      if jpg.Height > jpg.Width then
        scale := 50 / jpg.Height
      else
        scale := 50 / jpg.Width;
      bmp := TBitmap.Create;
      try
        {Create thumbnail bitmap, keep pictures aspect ratio}
        bmp.Width := Round(jpg.Width * scale);
        bmp.Height:= Round(jpg.Height * scale);
        bmp.Canvas.StretchDraw(bmp.Canvas.Cliprect, jpg);
        {Draw thumbnail as control}
        Self.Canvas.Draw(100, 10, bmp);
        {Convert back to JPEG and save to file}
        jpg.Assign(bmp);
        jpg.SaveToFile(
          ChangeFileext(opendialog1.filename, '_thumb.JPG')
        );
      finally
        bmp.free;
      end;
    finally
      jpg.free;
    end;
  end;

end;



//-------------------------------------------------------------------------//


http://mc-computing.com/languages/delphi/images.html

http://www.swissdelphicenter.ch/de/demodownload.php?id=1945

procedure TForm1.btnBrowseClick(Sender: TObject);
var
  jpg: TJPEGImage;
  bmp: TBitmap;
begin
  OpenPicturedialog1.InitialDir := FindImageFolder(true);
  if OpenPictureDialog1.Execute then
  begin
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

    if Image1.Picture.Graphic is TJPEGImage then
    begin
      if TJPEGImage(Image1.Picture.Graphic).Grayscale then
      begin
        Image2.Picture.Assign(Image1.Picture.Graphic);
      end else
      begin
        jpg := TJPEGImage.Create;
        try
          jpg.Assign(Image1.Picture.Graphic);
          jpg.Grayscale := True;
          Image2.Picture.Assign(jpg);
        finally
          jpg.Free;
        end;
      end;
    end else
    begin
      bmp := TBitmap.Create;
      try
        bmp.PixelFormat := pf32bit;
        bmp.Assign(Image1.Picture.Graphic);
        ...
        Image2.Picture.Assign(bmp);
      finally
        bmp.Free;
      end;
    end;
  end;
end;


//----------------------------------------------------------//


http://edn.embarcadero.com/article/40052

http://delphidabbler.com/tips/21

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Graphics_TBitmap_ScanLine.html


//----------------------------------------------------------------------//

{
This example shows how to draw directly to a Bitmap.  It
loads a bitmap from a file and then copies it to another
bitmap twice it's size.  Then the two bitmaps are
displayed on the form canvas.
}
procedure TForm1.Button1Click(Sender: TObject);
type
  TRGBTripleArray = ARRAY[Word] of TRGBTriple;
  pRGBTripleArray = ^TRGBTripleArray; // use a PByteArray for pf8bit color
var
  x,y : Integer;
  bx, by : Integer;
  BitMap, BigBitMap : TBitMap;
  P, bigP : pRGBTripleArray;
  pixForm, bigpixForm : TPixelFormat;
begin
  BitMap := TBitMap.create;
  BigBitMap := TBitMap.create;
  try
    BitMap.LoadFromFile('littlefac.bmp');
    pixForm := BitMap.PixelFormat;
    bigpixForm := BigBitMap.PixelFormat;
    BitMap.PixelFormat := pf24bit;
    BigBitMap.PixelFormat := pf24bit;
    BigBitMap.Height := BitMap.Height * 2;
    BigBitMap.Width := BitMap.Width * 2;
    for y := 0 to BitMap.Height - 1 do
    begin
      P := BitMap.ScanLine[y];
      for x := 0 to BitMap.Width - 1 do
      begin
        bx := x * 2;
        by := y * 2;
        bigP := BigBitMap.ScanLine[by];
        bigP[bx] := P[x];
        bigP[bx + 1] := P[x];
        bigP := BigBitMap.ScanLine[by + 1];
        bigP[bx] := P[x];
        bigP[bx + 1] := P[x];
      end;
    end;
    Canvas.Draw(0, 0, BitMap);
    Canvas.Draw(200, 200, BigBitMap);
  finally
    BitMap.Free;
    BigBitMap.Free;
  end;
end;


//-------------------------------------------//


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


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


//-------------------------------------------------//

https://www.swissdelphicenter.ch/en/showcode.php?id=1812

http://www.davdata.nl/math/drawing1.html

procedure SZRotateBmp90(Src, Dest: TBitmap);
var
x, y : integer;
dY : array of PDWORD; // Array for destination scanline
sH, dH: integer; // Height variables
P : PDWORD; // Source pointer
begin
if Src.PixelFormat<>pf32bit then
Src.PixelFormat := pf32bit;
if Dest.PixelFormat<>pf32bit then
Dest.PixelFormat := pf32bit;
try
Dest.Width := Src.Height;
Dest.Height := Src.Width;
sH:=Src.Height-1;
dH:=Dest.Height-1;
// Initialize dynamic array
SetLength(DY,dH+1);
// Save pointers to array for acceleration
for y := 0 to dH do
DY[y] := Dest.ScanLine[y];
// Copy Src horizontal lines to be Dest vertical by +90 degree
for y := 0 to sH do
begin
P:=Src.ScanLine[y];
for x := dH downto 0 do
begin
Dy[x]^:=P^;
inc(Dy[x]);
inc(P);
end;
end;
finally
SetLength(DY,0);
end;
end;
procedure SZRotateBmp270(Src, Dest: TBitmap);
var
x, y : integer;
dY : array of PDWORD; // Array for destination scanline
sH, dH: integer; // Height variables
P : PDWORD; // Source pixel pointer
begin
if Src.PixelFormat<>pf32bit then
Src.PixelFormat := pf32bit;
if Dest.PixelFormat<>pf32bit then
Dest.PixelFormat := pf32bit;
try
Dest.Width := Src.Height;
Dest.Height := Src.Width;
sH:=Src.Height-1;
dH:=Dest.Height-1;
// Initialize dynamic array
SetLength(DY,dH+1);
// Save pointers to array for acceleration
for y := 0 to dH do
DY[y] := Dest.ScanLine[y];
// Copy Src horizontal lines to be Dest vertical by +270 degree
for y := sh downto 0 do
begin
P:=Src.ScanLine[y];
for x := 0 to dH do
begin
Dy[x]^:=P^;
inc(Dy[x]);
inc(P);
end;
end;
finally
SetLength(DY,0);
end;
end;

//---------------------------------------------//

http://www.daniel-schwamm.de/index.php?pg=delphi-tutorials/picofpics
http://www.intitec.com/varios/Delphi_al_limite.pdf






No comments:

Post a Comment

Коментар: