Пишу такой код, но изображение не появляется на Image1. В чем может быть проблем? Code: uses IdHTTP, Jpeg, ... TNewThread = class(TThread) private protected procedure Execute; override; end; var Form1: TForm1; thr:TNewThread; implementation {$R *.dfm} procedure TNewThread.Execute; var z,r,x: Integer; http: TIdHttp; ms: TMemoryStream; jpeg: TJpegImage; begin http := TIdHTTP.Create(nil); ms := TMemoryStream.Create; jpeg := TJpegImage.Create; BMP := TBItmap.Create(); http.Get('тут моя ссылка на фото.jpg, ms); ms.Position := 0; jpeg.LoadFromStream(ms); Form1.Image1.Picture.Graphic := jpeg; BMP.Assign(Form1.Image1.Picture.Graphic); x:=0 for z:=0 to BMP.Width do for r:=0 to BMP.Height do if BMP.Canvas.Pixels[z,r]=clBlack then begin x:=x+1; end; Form1.Memo2.Lines.Add(x) jpeg.Free; ms.Free; http.Free; BMP.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin thr:=TNewThread.Create(True); thr.FreeOnTerminate:=True; thr.Priority:=tpNormal; thr.Resume; end;
пробуй так через synhronize и... вариант сравнения пикселей Code: function PixelCountFromColor(Bitmap: TBitmap; Color: TColor; MaxDelta: Integer = 0): Integer; function IsTheColor(AColor: TColor): Boolean; var I: Integer; begin Result := True; for I := 1 to 3 do Result := Result and (Abs(TWordDynArray(AColor)[I] - TWorDynArray(Color)) < MaxDelta); end; var I, J: Integer; begin Result := 0; with Bitmap do for I := 0 to Bitmap.Width -1 do for J := 0 to Bitmap.Heigh -1 do if IsTheColor(Bitmap.Canvas.Pixel[I, J]) then Inc(Result); end; function PixelCountFromColorJPGStream(Stream: TStream; Color: TColor; MaxDelta: Integer = 0): Integer; begin with TJPGImage.Create do try Bitmap.LoadFromStream(Stream); Result := PixelCountFromColor(Bitmap, Color, MaxDelta); finally Free; end; end;
аа... вы, наверное, грузите не тот формат (напр JPG вместо PNG). чтобы IDE автоматически подключило нужные библиотеки нужно вручную (до компиляции) вставить изображение в TImage