Images demo
Submitted by eLenka on 4 August, 2010 - 15:38

The example of embedding images of various formats (bmp, jpg, gif, png) to SWF.
Source archive: images.zip (1.67Mb)
Sample works
Some sample source:
procedure TForm2.RGClick(Sender: TObject); var Movie: TFlashMovie; img: TFlashImage; fn: string; sh: TFlashShape; ilx, ily: integer; PB: ^Byte; XC, YC: integer; {$IFDEF GIF} GIF: TGIFImage; {$ENDIF} {$IFDEF PNG} PNG: TPngObject; ZMem, Mem: TMemoryStream; Pal: TChunkPLTE; PNGC: TRGBQuad; Trans: TChunkTRNS; PNGP, PNGA: Pointer; DW: DWord; {$ENDIF} begin Screen.Cursor := crHourGlass; Movie := TFlashMovie.Create(0, 0, 450*twips, 350*twips, 10); Movie.Compressed := true; Movie.SystemCoord := scPix; sh := Movie.AddLine(0, 0, 450, 350); sh.SetLineStyle(1, swfRGB(clRed)); Movie.PlaceObject(sh, 0); case RGImgType.ItemIndex of 0: fn := '32.bmp'; 1: fn := '24.bmp'; 2: fn := '16.bmp'; 3: fn := '8.bmp'; 4: fn := 'gr.bmp'; 5: fn := '24.jpg'; 6..8: fn := ''; end; img := Movie.AddImage(fn); case RGImgType.ItemIndex of 6: begin {$IFDEF GIF} GIF := TGIFImage.Create; GIF.LoadFromFile('8.gif'); img.LoadDataFromHandle(GIF.Bitmap.Handle); if GIF.IsTransparent then IMG.SetAlphaColor( SWFRGBA(GIF.BackgroundColor, 0)); GIF.Free; {$ENDIF} end; {$IFDEF PNG} 7: begin PNG := TPngObject.Create; PNG.LoadFromFile('8.png'); Pal := TChunkPLTE( PNG.Chunks.ItemFromClass(TChunkPLTE)); Trans := TChunkTRNS( PNG.Chunks.ItemFromClass(TChunkTRNS)); Mem := TMemoryStream.Create; Mem.SetSize(4 * Pal.Count + PNG.Width * PNG.Height); for ilx := 0 to Pal.Count - 1 do begin PNGC := Pal.Item[ilx]; if Trans.PaletteValues[ilx] = 0 then begin Mem.Write(Trans.PaletteValues[ilx], 1); Mem.Write(Trans.PaletteValues[ilx], 1); Mem.Write(Trans.PaletteValues[ilx], 1); end else begin Mem.Write(PNGC.rgbRed, 1); Mem.Write(PNGC.rgbGreen, 1); Mem.Write(PNGC.rgbBlue, 1); end; Mem.Write(Trans.PaletteValues[ilx], 1); end; For ily := 0 to png.Height - 1 do begin PNGP := png.Scanline[ily]; Mem.Write(PNGP^, PNG.Width); end; Mem.Position := 0; ZMem := TMemoryStream.Create; with TCompressionStream.Create(clDefault, ZMem) do begin CopyFrom(Mem, Mem.Size); free; end; IMG.LoadDataFromNativeStream(ZMem, false, Png.Width, Png.Height, BMP_8bit, Pal.Count, true); ZMem.Free; Mem.Free; PNG.Free; end; 8:begin PNG := TPngObject.Create; PNG.LoadFromFile('32.png'); Mem := TMemoryStream.Create; Mem.SetSize(PNG.Width * PNG.Height * 4); DW := 0; For ily := 0 to png.Height - 1 do begin PNGP := png.Scanline[ily]; PNGA := png.AlphaScanline[ily]; For ilx := 0 to png.Width - 1 do begin Mem.Write(pByteArray(PNGA)^[ilx], 1); if pByteArray(PNGA)^[ilx] = 0 then Mem.Write(DW, 3) else With pRGBLine(PNGP)^[ilx] do begin Mem.Write(rgbtRed, 1); Mem.Write(rgbtGreen, 1); Mem.Write(rgbtBlue, 1); end; end; end; Mem.Position := 0; ZMem := TMemoryStream.Create; with TCompressionStream.Create(clDefault, ZMem) do begin CopyFrom(Mem, Mem.Size); free; end; IMG.LoadDataFromNativeStream(ZMem, false, Png.Width, Png.Height, BMP_32bitWork, 0, true); ZMem.Free; Mem.Free; PNG.Free; end; {$ENDIF} end; if RGAlpha.Enabled then case RGAlpha.ItemIndex of 0:; 1:img.LoadAlphaDataFromFile('mask.bmp'); 2:begin XC := img.Width div 2; YC := img.Height div 2; if img.AsJPEG then begin img.MakeAlphaLayer; PB := img.AlphaData.Memory; For ily := img.Height - 1 downto 0 do For ilx := img.Width - 1 downto 0 do begin PB^ := 255 - Round(220 * ((Hypot( XC - ilx, YC - ily) / (YC - 20)))); inc(PB); end; end else begin For ily := img.Height - 1 downto 0 do For ilx := img.Width - 1 downto 0 do img.AlphaPixel[ilx, ily] := 255 - Round(220 * ((Hypot( XC - ilx, YC - ily) / (YC - 20)))); end; end; 3: for ilx:= 70 to 140 do img.SetAlphaIndex(ilx, 0); end; sh := Movie.AddRectangle(0, 0, 400, 300); sh.SetImageFill(img, fmTile {fmClip} {fmFit}); Movie.PlaceObject(sh, 1).SetTranslate(25, 25); Movie.ShowFrame; Movie.MakeStream; Movie.SaveToFile(demoName); Movie.Free; Player.Movie := tmpName; Screen.Cursor := crDefault; Player.Movie := demoName; end;