След стандартни методи го зареждат по-строг имидж. Стандарт - това е как? LoadFromFile?" /> След стандартни методи го зареждат по-строг имидж. Стандарт - това е как? LoadFromFile?" />

ПредишенСледващото

Как да промените размера на растерна графика в паметта?

По-добър задача "Draw" по-подробно.

> След стандартни методи го зареждат по-строг имидж.

Стандарт - това е как? LoadFromFile?
Ако отговорът е да - тогава всички тези инсталационни размери и други неща за кучетата.
Няма никакъв смисъл да изберете Bitmap преди да го заредите от файл.

процедура TForm1.onCtreate (подателя TObject.);
започвам
растерни: = Tbitmap.Create;
bitmap.Pixelformat: = pf24bit;
bitmap.Height: = 200;
bitmap.Width: = 300;
bitmap.LoadfromFile (D: / My Folder / Img_001.bmp);
Canvas.Draw (0,0, растерни);
приключи;

Тогава максимизиране на прозорец на цял екран, както и в процеса onResize, че трябва да промените размера на Bitmap (skrech процедура за кандидатстване е възможно!). Имам нужда bitmar с голям размер (размер на екрана):

и нека само да рисувам върху ИТ площади линия и т.н., тогава ще трябва да се увеличи размера на растерна графика е натоварването на паметта naimengey на

Вижте това:
единица Unit1;
интерфейс
употреби
# XA0; Windows, съобщения, SysUtils, варианти, Курсове, графики, управление, контролните форми,
# XA0; диалози;

тип
# XA0; TForm1 = клас (TForm)
# XA0; # XA0; процедура FormCreate (Sender: TObject);
# XA0; # XA0; процедура FormResize (Sender: TObject);
# XA0; # XA0; процедура FormPaint (Sender: TObject);
# XA0; # XA0; процедура FormClose (Sender: TObject; Var действие: TCloseAction);
# XA0; частен
# XA0; # XA0;
# XA0; обществен
# XA0; # XA0; BmpOrig, BmpTmp: TBitmap;
# XA0; # XA0;
# XA0; край;

Var
# XA0; Form1: TForm1;

процедура TForm1.FormCreate (Sender: TObject);
започвам
# XA0; BmpOrig: = TBitMap.Create;
# XA0; BmpOrig.LoadFromFile ( "D: \ My Folder \ Img_001.bmp");
приключи;

процедура TForm1.FormResize (Sender: TObject);
започвам
# XA0; опитате
# XA0; ако не целеви (BmpTmp) след BmpTmp: = TBitMap.Create;
# XA0; BmpTmp.Width: = Ширина DIV 2;
# XA0; BmpTmp.Height: = височина DIV 2;
# XA0; BmpTmp.Canvas.StretchDraw (BmpTmp.Canvas.ClipRect, BmpOrig);
# XA0; Анулиране;
# XA0 изключение
# XA0; ако целеви (BmpTmp) след FreeAndNil (BmpTmp);
# XA0; край;
приключи;

процедура TForm1.FormPaint (Sender: TObject);
започвам
# XA0; Canvas.Draw (10, 10, BmpTmp);
приключи;

процедура TForm1.FormClose (Sender: TObject; Var действие: TCloseAction);
започвам
# XA0; ако целеви (BmpTmp) след FreeAndNil (BmpTmp);
# XA0; ако целеви (BmpOrig) след FreeAndNil (BmpOrig);
приключи;

край.
И отново.

> Процедура TForm1.onCtreate (подателя TObject.);
> започне
> Bitmap: = Tbitmap.Create;

> Bitmap.Pixelformat: = pf24bit;
> Bitmap.Height: = 200;
> Bitmap.Width: = 300;
Това е всичко, след падането:
> Bitmap.LoadfromFile (D: / ми папка / Img_001.bmp);
> Canvas.Draw (0,0, растерни);
> Край;

Да, Бог да премахне от този bitmap.LoadfromFile. Vyavodim просто lyuoy изготвяне naprmier от Scanline. и тогава ще трябва да се простират bitmar целия екран, но оставят на чертежа, използвайки метод Scanline, например, вместо да използват процедура StretchDraw. Ето един въпрос за нищо. Как да промените размера на растерна графика, без създаване на нов размер на екрана, тъй като в този случай той яде куп памет. Благодаря.

> [6] Dr. Андрю # XA0; (29.08.07 18:48)
> Ето един въпрос за нищо. Как да промените размера на растерна графика, без да създават
> Нови размери на екрана,

Ами аз не знам. Казах ти пример хвърли промяна, без да прави своя плетени.
Тук вместо BmpTmp.Canvas.StretchDraw (BmpTmp.Canvas.ClipRect, BmpOrig);
Напишете метод, основан Scanline и това е всичко.

И това се храни в теб, защото си направил на всички в OnResize "д създават, но не и унищожени.
Т.е. това е

> Ако растерна графика <> нула след това
> # XA0; bitmap.Free;

не работите, и растерна графика за създаване на нов, стар (т.е.. паметта, заемана от него) не е освободен.

> И това яде в теб, защото си направил на всички в OnResize "д
> Създаване но не унищожен.
> Т.е. това е
>
>> ако растерна графика <> нула след това
>> # XA0; bitmap.Free;
>
> Вие не работят, и растерна графика за създаване на нов, стар (т.е..
> Памет, заемана от него) не е освободен.

Т.е. малко погрешно, но фактът, че

> Bitmap.Free;

тя ще работи, след като и на всички, като променлива растерна графика не nilitsya. и след това просто. приключи [7]

Извинете. Нечетно, в крайна [7] и [8] вече се бърка. Сега аз се чудех. Аз пиша :)

промени в унищожаването не се предадоха staogo растерна графика

Въпреки това. Ето го:

Var растерна графика. Tbitmap; // глобална променлива.

процедура TForm1.onCtreate (подателя TObject.);
започвам
# XA0; растерни: = Tbitmap.Create;
# XA0; bitmap.LoadfromFile (D: / My Folder / Img_001.bmp);
приключи;

процедура TForm1.onResize (подателя TObject.);
започвам
# XA0; ако растерна графика <> нула след bitmap.Free;
# XA0; растерни: = Tbitmap.Create;
# XA0; bitmap.LoadfromFile (D: / My Folder / Img_001.bmp);
приключи;

Не течове не трябва да бъде спирачка - да. Вижте други места изтичане.
Но "не е правилна" код. Виж ми например в [5] има не множествена създаване / изтриване.

> [10] Dr. Андрю # XA0; (29.08.07 20:00)

?

RASkov. Благодаря ви, но ние не говорим за LoadfromFile. Бог да благослови sney - да го забравя. Трябва да промените размера на boshaya спестявания страна растерни памет. Това е въпрос konrektny вместо процедура polkemika за качване на файлове.

> [12] Dr. Андрю # XA0; (29.08.07 20:30)

Но аз не съм за LoadfromFile :) Той беше там така. например в темата.

процедура TForm1.FormPaint (Sender: TObject);
започвам
Canvas.StretchDraw (ClientRect, OrgBMP);
приключи;

процедура TForm1.FormCreate (Sender: TObject);
започвам
DoubleBuffered: = True;
OrgBMP: = TBitmap.Create;
OrgBMP.LoadFromFile ( "C: \ pp.bmp");
приключи;

процедура TForm1.FormDestroy (Sender: TObject);
започвам
OrgBMP.Free
приключи;

процедура TForm1.FormResize (Sender: TObject);
започвам
пребоядисване;
приключи;

Не е като StretchDraw, sozdovat растерни deloy неговия метод за uvilichenie. растерна графика памет, със сигурност ще го направя.
Това е възможно чрез SetPixel, canvas.Pixels всички vytekayuschime забавя.

RASkov - метод SetWidth (височина) на TBitmap - но какво е това? и където в растерни такива методи?
Павия - това не е за товарене или разтоварване, както и да промените размера на всяко растерна графика за икономично използване на паметта.


> [15] Dr. Андрю # XA0; (29.08.07 20:53)
> SetWidth (височина) метод на TBitmap - но какво е това?

Това е, когато Ширина имота (Височина) се задава нова стойност, а след това стартирайте го защитени (защитени) методи.

Принцип. Да, тук и не се нуждае от втора растерна графика. Аз дори уморени от този с размери :). само един [14], в която в началото на оригиналните качване на снимки и мащаб (дисплея), колкото искате върху платното. и не е нужно да променяте никакви измерения.

И това, което за него всеки път, когато създавате, изтривате. След като настроите и променяте размера.

Var
BMP, TMP: TBitmap;
NewWidth, NewHeight: Integer;
започвам
NewWidth: = 1000;
NewHeight: = 1000;

orgbmp.Assign (BMP); - не е необходимо
Просто работи с BMP

> Д-р Андрю
Можете ли да обясните по-, което ви трябва нещо. )

Пишете на TBitmapInfoHeader.biWidth нова стойност, а не на пара. - със сигурност забелязах. Но ако по ирония на съдбата нещо в тази връзка, можете да се сетите?

> [21] Dr. Андрю # XA0; (29.08.07 21:46)
> Но ако иронично нещо в тази връзка, можете да се сетите?

Възможна. Само вече е измислил - TBitmap
:)
Но ако ще опише подробно какво е и какво трябва, а след това можете да отговорите.
Особено на [21] няма да бъде в състояние да помогне.


> Но ако иронично нещо в тази връзка, можете да се сетите?

Искате ли да се построи тухлена къща без тухли?

Писах на вас. Да си модул за четене / запис BMP. И чете частично.

Това е кодът създават растерна графика, достатъчно знания право да я добавите:

TMBitmap = клас
# XA0; частен
# XA0; # XA0;
# XA0; # XA0; # XA0; FLineSize: цяло число;
# XA0; # XA0; # XA0; BM. THandle;
# XA0; # XA0; # XA0; процедура Разпределяне (SX, SY: число);
# XA0; обществен
# XA0; # XA0;
# XA0; # XA0; имот дръжка. THandle прочетете BM;

# XA0; # XA0; конструктор Създаване (ширина, височина число.);
# XA0; # XA0; деструктор унищожи; отменят;

# XA0; # XA0; процедура LoadFromFile (Конст FileName: низ);
# XA0; край;

тип
# XA0; TarrRGBTriple = масив [байт] на TRGBTriple;
# XA0; ParrRGBTriple = ^ TarrRGBTriple;

конструктор TMBitmap.Create (ширина, височина число.);
започвам
# XA0; наследил Създаване;
# XA0; Разпределяне (ширина, височина);
приключи;

деструктор TMBitmap.Destroy;
започвам
# XA0; наследствено;
приключи;


процедура TMBitmap.Allocate (SX, SY: число);
Var DC: HDC;
# XA0; # XA0; PB: Стрелката;
# XA0; # XA0; BI: tagBITMAPINFO;
започвам
# XA0; ако BM<>0, тогава DeleteObject (ВМ);
# XA0; BM: = 0; # XA0; PB: = нула;
# XA0; fillchar (BI, sizeof (BI), 0);
# XA0; с BI.bmiHeader правя
# XA0; започне
# XA0; # XA0; biSize: = sizeof (BI.bmiHeader);
# XA0; # XA0; biWidth: = SX;
# XA0; # XA0; biHeight: = SY;
# XA0; # XA0; биплани: = 1;
# XA0; # XA0; biBitCount: = 24;
# XA0; # XA0; biCompression: = BI_RGB;
# XA0; # XA0; biSizeImage: = 0;
# XA0; # XA0; biXPelsPerMeter: = 0;
# XA0; # XA0; biYPelsPerMeter: = 0;
# XA0; # XA0; biClrUsed: = 0;
# XA0; # XA0; biClrImportant: = 0;

# XA0; # XA0; FLineSize: = (biWidth + 1) * 3 и (-1 SHL 2);

# XA0; # XA0; ако (biWidth или biHeight)<>0 след това
# XA0; # XA0; започвам
# XA0; # XA0; # XA0; DC: = CreateDC ( "ДИСПЛЕЙ" нула, нула, нула);
# XA0; # XA0; # XA0; BM: = CreateDIBSection (DC, BI, DIB_RGB_COLORS, показалеца (РВ), 0, 0);
# XA0; # XA0; # XA0; DeleteDC (DC);
# XA0; # XA0; # XA0; ако BM = 0, тогава // грешка ( "грешка създаване DIB");
# XA0; # XA0; приключи;
# XA0; край;
приключи;

# XA0; # XA0; # XA0; # XA0 продължение J: = 0 до BI.bmiHeader.biHeight-1 направи
# XA0; # XA0; # XA0; # XA0; # XA0, защото: = 0 до BI.bmiHeader.biWidth-1 направи
# XA0; # XA0; # XA0; # XA0; # XA0;
# XA0; # XA0; # XA0; # XA0; # XA0; //Pixels[i,j]^.Tr:=ParrRGBTriple(PF+j*FLineSize+Ofs)^[i];
# XA0; # XA0; # XA0; накрая
# XA0; # XA0; # XA0; # XA0; UnmapViewOfFile (PF);
# XA0; # XA0; # XA0; край;
# XA0; # XA0; накрая
# XA0; # XA0; # XA0; CloseHandle (HM);
# XA0; # XA0; край;
# XA0; накрая
# XA0; # XA0; FileClose (HF);
# XA0; край;
приключи;

създаване на растерна графика може да бъде (черна кутия):

процедура TForm1.FormCreate (Sender: TObject);
започвам
# XA0; BMP: = TMBitmap.Create (40, 20);
приключи;

но за да се възползва от него или да го изтеглите (особено необходимостта да преминава през) нищо не е невъзможно. Как мога да променя този код да се работи с него като с обикновен растерна графика. След процедура за сваляне LoadFromfile заинтересованата menit всички. Благодарим Ви!

И каква е TBitmap не е доволен?
Поток, просто прочетете в буфера. Освен това, за да се разбере заглавието. поле Малко преспи през SetDIBits

И това е възможно малък пример за това как да се коригира по-горе код? Благодаря.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!