Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.84.25.165] |
|
Сообщ.
#1
,
|
|
|
Пытаюсь загрузить jpeg и сохранить только часть этого изображения в формат bmp. В итоге получаю пустой bit-файл. Как исправить?
uses ...jpeg; procedure TForm1.FormPaint(Sender: TObject); var bmp: TBitmap; bit: TBitmap; JPEG: TJPEGImage; q,w:TRect; begin bmp:=tbitmap.Create; bit:=tbitmap.Create; JPEG := TJPEGImage.Create; JPEG.LoadFromFile('cant.jpg'); Bmp.Assign(JPEG); q := Rect(225, 543, 352, 582); w := Rect(0, 0, 352-255, 582-543); bit.Width:=352-255; bit.Height:=582-543; bit.Canvas.CopyRect(w, bmp.Canvas, q); bit.savetofile('cant.bmp'); JPEG.free; bmp.Free; bit.Free; end; |
Сообщ.
#2
,
|
|
|
1) Зачем эти действия в обработчике рисования на форме. Эти действия стоит делать в обработчике клика по кнопке, а не при рисовании.
2) Для проверки успешности загрузки попробуйте сохранить bmp в файл 3) Убедитесь, что область Rect(225, 543, 352, 582) полностью в пределах изображения. Какие у него размеры? 4) Для проверки можно не сохранять файл на диск, а рисовать его на форме. На первый взгляд код должен работать нормально. |
Сообщ.
#3
,
|
|
|
Исправила проблему, надо было просто изменить координаты у Rect, а также Width и Height. Как через цикл разрезать картинку полностью и добавить фрагменты на холст?
Удалось только добавить один кадр, а мне нужно все, через один цикл. Я уже перепробовала изменять параметры Rect, не получается сдвинуть картинку и отобразить следующий кадр. procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; bit: TBitmap; JPEG: TJPEGImage; q,w:TRect; i,x,y: integer; begin bmp:=tbitmap.Create; bit:=tbitmap.Create; JPEG := TJPEGImage.Create; JPEG.LoadFromFile('cant.jpg'); Bmp.Assign(JPEG); //q := Rect(225, 543, 352, 582); //w := Rect(0, 0, 352-255, 582-543); //bit.Width:=352-255; //bit.Height:=582-543; for i:=0 to 15 do begin // mod 4 x:=i mod 4; y := (i div 4); q := Rect(0,0, 150, 150); w := Rect(0,0, 150, 150); bit.Width:=150; bit.Height:=150; bit.Canvas.CopyRect(w, bmp.Canvas, q); Canvas.Draw(150*x,150*y,bit); end; //bit.savetofile('cant.bmp'); JPEG.free; bmp.Free; bit.Free; end; |
Сообщ.
#4
,
|
|
|
w := Rect(0, 0, 150, 150); for i:=0 to 15 do begin x := 150 * (i mod 4); y := 150 * (i div 4); q := Rect(x, y, x + 150, y + 150); Canvas.CopyRect(w, bmp.Canvas, q); Sleep(1000); end; with Canvas do begin Pen.Color := clYellow; Pen.Width := 3; for i:=0 to 15 do begin x := i mod 4; y := i div 4; w := Rect(160 * x, 160 * y, 160 * x + 150, 160 * y + 150); Rectangle(w); // Обвел дополнительно каждый кадр желтой рамкой. CopyRect(w, bmp.Canvas, Rect(150 * x, 150 * y, 150 * x + 150, 150 * y + 150)); Sleep(1000); end; Pen.Width := 1; end; |
Сообщ.
#5
,
|
|
|
to macomics
перед Pen.Color и Pen.Width "Canvas." пропустил. , видимо в спешке. |
Сообщ.
#6
,
|
|
|
Точно. Спасибо. Исправил.
|