Форум: "Media";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизПечать картинки Найти похожие ветки
← →
Darlock (2003-07-22 16:49) [0]Всем привет.
Считываю картинку из фала (JPG на 1 МБ) вывожу на печать - каринка на весь лист. Ее же печатаю из фотошопа - картина 5 на 5 см. В чем прикол? я так подозреваю что в разрешении картинки, но как мне быть что бы она и у меня печаталась 5 на 5. Спасибо
← →
alextov (2003-07-22 17:09) [1]А каким образом ты выводишь ее на печать?
← →
Anatoly Podgoretsky (2003-07-22 17:15) [2]Фотошоп наверно масштабирует! Тебе тоже никто не мешает.
← →
Darlock (2003-07-22 17:46) [3]Спасибо за ответы, но:
2alextov
Printer.Canvas.Draw
Anatoly Podgoretsky
В том же ACDSee я вижу что разрешение 300х300, где посмотреть какое разрешение у TImage я не знаю, кроме того если у фотошопа получается ОЧЕНЬ качественная картинка, то у меня при выводе на печать через Pinter.Canvas.StretchDraw качество ОЧЕНЬ сильно ухудшается... Кроме того ИМХО JPEG не вектр, а растр - значит маштабировать его можно только с потерей качества, а у фотошопа этого не заметно...
Еще раз спасибо за внимание.
← →
BOA_KAA (2003-07-22 18:03) [4]
procedure TfmMain.mmPrintClick(Sender: TObject);
var
Info: PBitmapInfo;
InfoSize, ImageSize: DWord;
Image: Pointer;
begin
if not dgPrint.Execute then Exit;
Printer.BeginDoc;
GetDIBSizes(imMain.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info:=AllocMem(InfoSize);
try
Image:=AllocMem(ImageSize);
try
GetDIB(imMain.Picture.Bitmap.Handle, 0, Info^, Image^);
StretchDIBits(Printer.Canvas.Handle,
0, 0, Printer.PageWidth, Printer.PageHeight,
0, 0, imMain.Width, imMain.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
( Info, InfoSize)
procedure TfmMain.mmPrintClick(Sender: TObject);
var
Info: PBitmapInfo;
InfoSize, ImageSize: DWord;
Image: Pointer;
begin
if not dgPrint.Execute then Exit;
Printer.BeginDoc;
GetDIBSizes(imMain.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info:=AllocMem(InfoSize);
try
Image:=AllocMem(ImageSize);
try
GetDIB(imMain.Picture.Bitmap.Handle, 0, Info^, Image^);
StretchDIBits(Printer.Canvas.Handle,
0, 0, Printer.PageWidth, Printer.PageHeight,
0, 0, imMain.Width, imMain.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
Printer.EndDoc;
imMain.Picture.Graphic);
end;
Масшабируй уже сам :-)
← →
Darlock (2003-07-23 12:24) [5]2BOA_KAA
Хм... Что-то я не совсем понял то что вы тут написали, чем этот кусок кода отличается от Printer.Canvas.StretchDraw? Или здесь ужатие идет без потери качества?
← →
Darlock (2003-07-23 12:31) [6]2BOA_KAA
Неусмотрел параметры ширины принтера и длины, действительно картинка выводится в нормальном размере, как и в фотошопе, только черно-белая, надеюсь это как-то можно поправить....
Спасибо
← →
BOA_KAA (2003-07-23 13:03) [7]Нецветная? А принтер-то цветной? :-)
Кстати, предпоследняя строчка случайно попала
← →
Darlock (2003-07-31 16:37) [8]2BOA_KAA: Все таки что-то тут не так метод описаный вами в моей интерпретации выглядит так:
GetDIBSizes(Image1.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
try
Image := AllocMem(ImageSize);
try
GetDIB(Image1.Picture.Bitmap.Handle, 0, Info^, Image^);
Caption := IntToStr(Printer.PageWidth);
( Printer.Canvas.Handle,
0, 0, Image1.Picture.BitMap.Width*2, Image1.Picture.BitMap.Height*2,
0, 0, Image1.Picture.Width, Image1.Picture.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY) 2BOA_KAA: Все таки что-то тут не так метод описаный вами в моей интерпретации выглядит так:
GetDIBSizes(Image1.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
try
Image := AllocMem(ImageSize);
try
GetDIB(Image1.Picture.Bitmap.Handle, 0, Info^, Image^);
Caption := IntToStr(Printer.PageWidth);
StretchDIBits(Printer.Canvas.Handle,
0, 0, Image1.Picture.BitMap.Width*2, Image1.Picture.BitMap.Height*2,
0, 0, Image1.Picture.Width, Image1.Picture.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
...
На одном принтере он печатаеи реальный размер картинки, а на другом РОВНО в 2 раза меньше, на остальных не пробывал, мне и это не сильно ясно..
Кто-то скажет как напечатать картинку с ее истинными размерами??
Хелп плз.
Или ссылок на понятийный уровень, я просто не сильно понимаю как связать пиксели изображения с ее истинным размером, а тем более с принтером...
← →
BOA_KAA (2003-07-31 18:31) [9]Итак,
> Кто-то скажет как напечатать картинку с ее истинными размерами??
Что понимается под "истинным размером картинки"???
> Image1.Picture.BitMap.Width*2, Image1.Picture.BitMap.Height*2,
Справочку по StretchDIBits прочитайте, pls.
StretchDIBits(Printer.Canvas.Handle,
0, 0, Printer.PageWidth, Printer.PageHeight, // Здесь идет масштабирование
0, 0, imMain.Width, imMain.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
Если масштабирования не надо или надо не на весь лист, или посередине листа напечатать, или еще как нибудь поизвращаться надо просто нормально вычислить координаты угла прямоуголька рисунка на принтере.
В Вашем случае Image1.Picture.BitMap.Width, Image1.Picture.BitMap.Height. Отцентровать, надеюсь проблемы не составит. У Вас все едет именно в этой строчке. Разрешение разных принтеров разное => делайте выводы.
← →
Darlock (2003-07-31 19:02) [10]>>Что понимается под "истинным размером картинки"???
Размер картинки с учетом разрешающей способности, моя картинка имеет размер в пикселях где-то 600х1300, а в см (при віводе на принтер) размер должен быть где-то 3х5.
>>Справочку по StretchDIBits прочитайте, pls.
Прочитал еще после первого вашего примера и как мне казалось понял суть - печать DIP Битмапа в указаную облать - что дает вохможность маштабировать. В иоем сучае маштабировать не надо, надо просто напечатать картинку с ее истиными размерами.
>>Если масштабирования не надо...
В моем примсере проставленна удвоенная величина - дабы посмотреть эффект работы на принтере на котором StretchDIBits выводило на принтер изображение в 2 раза меньшее чем должно быть.
Я так понимаю надо еще какой-то коэфициент откуда-то считать, вроде бы в Envision Image Library что-то наковырял... Щас попробую...
← →
BOA_KAA (2003-07-31 19:30) [11]Наконец-то добрались до чего-то :-)
Тогда так.
- Узнаём размер картинки, который должен получиться в см, мм, дюймах или пр.
- Узнаем сколько это занимает в пикселях принтера (см. http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622422&n=18)
- Масшабируем до нужного размера StretchDIBits, как уже обсудили.
Надеюсь, теперь все должно быть ясно. Удачи!
← →
Darlock (2003-08-01 10:39) [12]Ок, примерно так я себе и представлял, спасибо, но 1 пункт - как его решить...
← →
BOA_KAA (2003-08-01 10:54) [13]Это нужно задавать исходя из условий.
Хочешь ты фотку 3Х5 - так и задавай.
← →
Darlock (2003-08-01 12:57) [14]2BOA_KAA: Вся фишка в том что формат фотки уже задан в самом изображении и именно таким он идолжен быть, т.с. original size, а не в том что бы я его задвал в программе. Я тут в сорцах Envision library посмотрел - не такое это уже и тривиальное задание оказалось..
:)))
← →
[lamer]Barmaglot (2003-08-01 13:08) [15]Ну чуть переставь...
1. Узнаешь сколько размер твоей картинки в пикселях.
2.Узнаем сколько это занимает в пикселях принтера (см. http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622422&n=18)
3. Масшабируем до нужного размера StretchDIBits, как уже обсудили.
← →
BOA_KAA (2003-08-01 13:10) [16]Извини, не догнал: где задан размер фотки?
Партизан! Из тебя информацию надо по байту вытягивать :-)
← →
Darlock (2003-08-01 16:07) [17]Извиняюсь за скупость информации - это не от жадности, а от того что я думал ее будет достаточно. Значитца так:
2[lamer]Barmaglot: StretchDIBits - вполне бы меня устроил если бы не одно "НО". Насколько мне известно существует такое понятие как разрешение и если разрешение картинки не совпадает с разрешением принтера, то при использовании этого метода имеем рассогласование выводимой картинки с ее Original Size (OS).
>>Извини, не догнал: где задан размер фотки?
Я его задавал в Фотошопе. Как я понимаю Пиксели по соотв. оси / разрешение по соотв оси - это и будет размер в дюймах - его можно перевести в мм. Если я правильно понимаю именно по обратной приведенной мной схеме действует фотошоп когда просит внести размер нового изобраения.
Как я понимаю суть проблемы сводится к тому что бы определить разрешение картинки, тогда:
1. Определить разрешение картинки.
2. Определить разрешение принтера.
3. Определить коефициент между DPI принтера и DPI изображения, как я понимаю - это и есть тот коеф который будет использоватья при маштабировании функцией StretchDIBits.
← →
BOA_KAA (2003-08-01 16:13) [18]> Как я понимаю суть проблемы сводится к тому что бы определить
> разрешение картинки
Я, вроде, о том и говорил :-)
Так ты разобрался или нет?
← →
Darlock (2003-08-01 16:56) [19]Неа, как определить разрешение картинки, а не отношение пикселей картинки к пикселям принтера?
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c