Показать сообщение отдельно
  #1  
Старый 04.09.2013, 01:47
Lavr!k Lavr!k вне форума
Прохожий
 
Регистрация: 07.07.2012
Сообщения: 5
Репутация: 10
По умолчанию Из массива в Bitmap (scanline)

Уважаемые господа!

Пожалуйста, подскажите, как вывести изображение из массива в Image, используя scanline? В настоящий момент для вывода пользуюсь Canvas.Pixels и всё меня устраивает, но хотелось бы ускорить вывод картинки, почему меня и заинтересовал scanline.
Почитал форумы, help, посмотрел примеры, но всё равно до конца не понял как с этим scanline'ом работать.

А задача следующая: есть двумерный массив яркостных характеристик (0..639, 0..359) и из него хочется сделать 24-битный битмап и вывести его в Image.

На одном форуме нашёл простой пример, который пытался подладить под себя и разобраться:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

TYPE
pRGBArray = ^TRGBArray;
TRGBArray = ARRAY[0..32767] OF TRGBTriple;

var
  x,y : Integer;
  BitMap : TBitMap;
  P:  pRGBArray;
begin
  BitMap:= TBitMap.create;
  BitMap.Pixelformat:=pf24bit;
  Bitmap.Height:=640;
  Bitmap.Width:=360;
    for y := 0 to 639 do
    begin
      P := BitMap.ScanLine[y];
      for x := 0 to 359 do
        P[x].rgbtBlue:= 50;
        P[x].rgbtGreen:=120;
        P[x].rgbtRed:=0;
    end;
    image1.Canvas.Draw(0,0,BitMap);
 end;
end.

Но в итоге закрашивается только часть Image, а сбоку появляется полоска.

Пожалуйста, подскажите где я не прав. Скорее всего ошибка с определителем, но именно в этом я и не могу разобраться (где и что пишется)
Заранее спасибо!

PS. Значения цвета точки (50,120,0) взял для примера. На деле там будут формулы перевода яркостной характеристики в сам цвет.
Ответить с цитированием