印刷イメージをボカす方法は?

このQ&Aのポイント
  • 出来上がった印刷イメージをボカす方法について教えてください。
  • .NETのC++で印刷プログラムを組んでおり、StartPageとEndPageの間で文字やイメージを書き込んでいます。
  • EndPageの直前で作成した印刷イメージ(文字、画像の全て)をハーフトーンにボカす方法があれば、ご指導願います。
回答を見る
  • ベストアンサー

出来上がった印刷イメージをボカす方法???

.NETのC++を使用して印刷プログラムを組んでいます 定石通りに CreateDC StartDoc StartPage ・ ・ (1) ・ ・ EndPage  (2) EndDoc DeleteDC としております StartPageからEndPageの間の(1)の部分でベタベタと文字やイメージを書込んでいます 主題】 ⇒ 全てを書込んだ(2)の直前で作上げた印刷イメージ(文字、画像の全て)をハーフトーンにボカしたのです (1)の部分は複雑でもうこれ以上手を加えられません 各々のTextOut等のAPIの呼出し方法を修正せず、EndPageの直前で印刷イメージを一括してボカす方法があればご指導願います ??? 便利なAPIはありませんか ???

質問者が選んだベストアンサー

  • ベストアンサー
  • Layle
  • ベストアンサー率75% (6/8)
回答No.1

描画した後にボカすのは難しいのではないかと思います。 パッと思いつく方法としては、プリンタDCの代わりにプリンタ並みの解像度のメモリDCを作成し、メモリDCに全部描画させた後にハーフトーン加工した上で、プリンタDCにBltしてはどうでしょうか? ただ、メモリDCに対する描画になるので、線や文字はプリンタに直接描画した場合よりもクォリティが落ちてしまうと思いますが…。

sato-may
質問者

お礼

ありがとうございます 教えて頂いた方法でトライしてみます 今後とも宜しくお願い申し上げます

関連するQ&A

  • UNICODE指定のプロジェクトで関数Wの呼出し?

    .NET VC++で簡単な印刷プログラムを作りました hdc = CreateDC(TEXT("EPMJ3"), TEXT("Canon MP280 series Printer"), NULL, NULL);・・・(1) StartDoc(hdc, &docinfo);                           ・・・(2) StartPage(hdc); TextOut (hdc, 10, 200,L"テスト印刷の1行目です。", 12);           ・・・(3) TextOutW(hdc, 10, 100,L"テスト印刷の2行目です。", 12);           ・・・(4)  EndPage(hdc); EndDoc(hdc); DeleteDC(hdc); プロジェクトの文字コードはUNICODEを指定しております (1)はCreateDocW関数 (2)はStartDocW関数が呼ばれます (3)は当然TextOutW関数になるだろうと思っていたら、TextOutA関数が呼ばれいます 試しに(4)のように直接TextOutW関数を指定してみたら、これも結果に於いてTextOutA関数が呼ばれています    【以上の事柄はAPIフックを仕掛けて調べました】 なぜ私のコンパイラはUNICODE用のTextOut関数を呼出してくれないのですか????

  • 印刷範囲を規定するAPI?

    以下のような機能を持つAPIがあると耳にしたことがあります 色々と調べましたが見付けられません もしご存じであればお教え願います 探しているAPIの名前を仮に APIxxx とします BOOL APIxxx(hdc, int Xpoint, int Ypoint); hdc はプリンターのディバイスコンテキスト Xpoint、Ypoint は (0, 0)を原点とするプリンタ印刷領域の座標です まず印刷領域に textout(hdc,~) Rectangle(hdc,~) などのAPIを使用して印刷イメージを組立てます この後、今の主題である APIxxxを発すると (0, 0)~(Xpoint, Ypoint)の四角形以外の印刷データは無視され、Endpage APIを出して印刷開始しても実際に印刷されるのは(0, 0)~(Xpoint, Ypoint)の四角形範囲だけとなる 四角形以外の残りの部分は白紙状態で印刷されます このような機能を持つAPIxxxを探しています うろ覚えであるので説明に誤りがある可能性が相当あります 類似のAPIでも結構です 似たような機能のAPIをご存知でしたら教えてください 補足】この APIxxxは Excelの印刷範囲を指定操作 印刷するセルを選択 ⇒ ページレイアウト ⇒ 印刷範囲 ⇒ 印刷範囲の設定 で印刷セルの範囲を指定する時にも使用されているとも聞いたことがあるような気がします

  • プリンタBMP領域のサイズは?

    プリンタと同じメモリDCを作り、そこに書き込んだものをBitBltでコピーして印刷します ← サンプルのコードを参照させて頂きましたので多分間違えは無いと思います ところが確保すべきBMP領域(プリンタのサイズ)が分りません ?????????の箇所に設定すべき定数は何処を参照すれば良いのでしょうか? 困っております、ぜひご指導願います HDC hdc; DOCINFO docinfo; memset(&docinfo, 0, sizeof(DOCINFO)); docinfo.cbSize = sizeof(DOCINFO); docinfo.lpszDocName = L"testprint"; hdc = CreateDC(L"EPMJ3", L"Canon MP280 series Printer", NULL, NULL); StartDoc(hdc, &docinfo); StartPage(hdc); HDC hdcMem = CreateCompatibleDC (hdc); int Xsize = ???????????????? int Ysize = ???????????????? HBITMAP hDrawBmp =CreateCompatibleBitmap(hdc,Xsize,Ysize); SelectObject (hdcMem,hDrawBmp); TextOut(hdcMem, 0, 0 , L"プリンタのBMP領域の大きさは何処で分りますか?", 100); BitBlt(hdc, 0, 0,Xsize, Ysize, hdcMem, 0, 0, SRCCOPY); EndPage(hdc);

  • プリンターであるか否かの判断?

    特殊な目的の為、文字列変数Deviceを受取りその内容がプリンターを示すものであれば、APIのCreatDCでプリンターのHDCを作成します そしてそのプリンターのHDCを使用してStartDoc、StartPage、Textout等の一連の印刷動作をしたいと思います それには先ず文字列変数Deviceの内容がプリンターを示しているか? を判別しなくてはなりません 色々調べましたら WINSPOOL である場合はプリンターです 内容が NULL(空白)であればプリンターと判断すべきらしいです また内容が "ディスプレイ" ならば当然除外します しかしこんな判定法で宜しいのでしょうか? 特に文字列変数Deviceの内容が、コントロールパネル⇒デバイスとプリンター によって表示される Canon MP280 series Printer などの具体的なプリンター名称であった場合不安です 文字列変数Deviceの内容がプリンターを示しているか否かを判定するAPIなどはありませんが? また他の手段で簡単に判別する方法をご存知でしたら教えて下さい 宜しくお願い申し上げます

  • プログラムを実行して不具合の出たプリンタを直したい

    よろしくお願いします。 『印刷をするプログラム』を書いて実行した結果、 PCからのスキャン、プリンタ本体での、スキャン、コピーが出来なくなりました。 チェックディスク、システムの復元、ドライバーの入れ替え、などをしたのですが直りません。 多分、自作プログラムの実行により『プリンタ』か、『PC』のプログラムに、なんらかの異常が出たと思うのですが、プログラムを直せば良いのか、リカバリするのか、修復する方法が見つかりません。 詳しい方、アドバイスをよろしくお願いします。 自作のメモ帳にコーディングしたソースです。 //印刷関数 int MyPrint(HWND hWnd) { int i; PRINTDLG pd; DOCINFO di; TEXTMETRIC tm; char *lpszBuf = TEXT("ここが印刷される"); memset(&pd, 0, sizeof(PRINTDLG)); //PRINTDLG構造体の定義 pd.lStructSize = sizeof(PRINTDLG); pd.hwndOwner = hWnd; pd.hDevMode = NULL; pd.hDevNames = NULL; pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC | PD_NOPAGENUMS | PD_NOSELECTION | PD_HIDEPRINTTOFILE; pd.nMinPage = 1; pd.nMaxPage = 1; pd.nFromPage = 1; pd.nToPage = 1; pd.nCopies = 1; if(PrintDlg(&pd) == 0) return -1; memset(&di, 0, sizeof(DOCINFO)); //DOCINFO構造体の定義 di.cbSize = sizeof(DOCINFO); di.lpszDocName = TEXT("テスト"); StartDoc(pd.hDC, &di); //印刷ジョブ StartPage(pd.hDC); GetTextMetrics(pd.hDC, &tm); for(i = 0; i < 5; i++){ //< 50印刷部数 SetTextColor(pd.hDC, RGB(0, 0, 0)); TextOut(pd.hDC, 5, 5 + (tm.tmHeight * i + 20), lpszBuf, (int)strlen(lpszBuf)); /*for(i = 0; i < 5; i++){ SetTextColor(pd.hDC, RGB(255, 0, 0)); TextOut(pd.hDC, 5, 5 + (tm.tmHeight * i + 20), lpszBuf, (int)strlen(lpszBuf));*/ } EndPage(pd.hDC); EndDoc(pd.hDC); DeleteDC(pd.hDC); return 0; }

  • 賢い印刷APIへの対応法は???

    A.....~.....a東京都B,,,,,~,,,,,b という文字列を印刷した場合、文字列途中にある東京都の印刷位置を知りたいと思います 印刷した文字列が1行である場合には A~aまでの文字列をGetTextExtentPoint32に入れて印刷長を調べ、印刷基点であるAの位置に加算すれば東京都の位置が判明します ここまでは分かりました ところが文字列をクリッピング領域に出力し、文字列が複数行に渡った際の算出法が分かりません GetTextExtentPoint32からもらった印刷長を クリッピング領域の横幅値で除算して 商が行数(Y位置) 余りが文字のX位置 と考えてテストしてみました 結果はOKの場合もありますがNGも多々あります NGの現象は次のようにして発生します 印刷APIが賢くて見た目が良いように整形してしまいます A.....~... ..a ←ここに印刷APIが改行を入れてしまう 東京都B,,,, ,,,,~,,,,,b aの後ろにはまだ余裕があるのですが、東京都の直前で改行してしまうのです 見た目は向上しましたが私の計算式の想定外です 印刷APIの美的判断を予測出来ません どのように対応すれば良いでしょうか? ヒントだけでもご指導頂ければ幸いです 追伸】 これまで数回これに関連する質問をさせて頂き、皆様の温かいご支援で何とかここまで到達出来ました 誠にありがとうございました 改めて御礼申し上げます

  • C++/CLIで印刷する画像が表示されない

    filenameで指定したbmpファイルを印刷させるプログラムを作っているのですが、 どうやっても指定したファイル名のアドレスの画像が表示されなくて困っています。 どうやったら良いのでしょうか?? bool printFile(char *filename) { PRINTDLG pd; DOCINFO di; HWND hWnd; HDC hBuffer; static HBITMAP hBitmap; //プリンタの設定 memset(&pd, 0, sizeof(PRINTDLG)); pd.lStructSize = sizeof(PRINTDLG); pd.hwndOwner = NULL; pd.hDevMode = NULL; pd.hDevNames = NULL; pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC | PD_NOPAGENUMS | PD_NOSELECTION | PD_HIDEPRINTTOFILE| PD_RETURNDEFAULT; pd.nCopies = 1; pd.nFromPage = 1; pd.nToPage = 1; pd.nMinPage = 1; pd.nMaxPage = 1; memset(&di, 0, sizeof(DOCINFO)); di.cbSize = sizeof(DOCINFO); di.lpszDocName = filename; //印刷を実行 if (PrintDlg(&pd)==TRUE) { StartDoc(pd.hDC, &di); StartPage(pd.hDC); //描画を実行 int lnWidth = 2000; int lnHeight = 5000; HDC hMemDC = CreateCompatibleDC(pd.hDC); HBITMAP hBitmap = CreateCompatibleBitmap(pd.hDC,lnWidth,lnHeight); HBITMAP Obj = (HBITMAP)SelectObject(hMemDC,hBitmap); int iRet = GetDeviceCaps(hMemDC,RASTERCAPS); // コピー iRet = BitBlt(hMemDC,0,0,lnWidth,lnHeight,pd.hDC,0,0,SRCCOPY); EndPage(pd.hDC); EndDoc(pd.hDC); DeleteDC(pd.hDC); return true; } return false; }

  • ホームページの印刷が文字のみになる

    ホームページを印刷したら全て文字のみになるページがあります。見たまま印刷したいのですが「背景の色とイメージを印刷する」にチェックは関係ありませんでした。詳しくないのですが、どうもhtmlやcssのような気がします。誰か詳しい方教えて下さい。宜しくお願いします。

  • 画像が印刷されず文字だけが印刷されてしまいます。

    ペイントで描いた絵をWord2010に挿入して印刷しようとしたのですが、 文字はちゃんと印刷されるのに絵の部分だけ何故か印刷できません。 『[表示] メニューの [印刷オプション] で [背景の色とイメージを印刷する] チェック ボックスをオンにし、[OK] をクリック。』この作業もしてみたのですが、 それでも絵の印刷ができません。どなたか対処方法をご存じでないでしょうか。 ちなみに、名刺を作ろうと思ったので用紙を名刺サイズに設定しています。 また、挿入した画像は色つきで文字は黒。 文字の後ろに絵が来るように画像は「背景」に設定しています。 これらの設定も何か関係があるのでしょうか?どなたか、ご回答を宜しくお願いします。

  • 難しい漢字の印刷

    以下の環境で、印刷に関する問題が起こっています。 ------------------------------------ OS:Windows 98 Word:2000 プリンタ:NEC MultiWriter 2130 ------------------------------------ 以前、上記環境で、例えば森鴎外の「鴎」の字が難しいほう("メ"の部分が"品"となっている字)で印刷すると、その文字だけ印刷が出来ないという問題がありました。これについては、プリンタのプロパティにて「特殊文字をそのまま印刷する。」という箇所を有効にすることで印刷されるようになりましたが、その設定を有効にすると、今度は"鴎"の字以降の文章が印刷されなくなってしまいました。 (イメージ) 画面上: 私は森鴎外です。 印刷上: 私は森鴎      (※"外です。"の部分が印刷されない) 同じファイルでもWindows XP, Word 2003の環境では問題はありませんでした(同じプリンタで印刷)。 おそらく、難しい「鴎」の字が特殊文字(外字?)であることや、それに関連して文字コード上の問題があるのではないかと考えているのですが、明確な原因がつかめずにいます。 上記問題について、ご教授下さい。よろしくお願い致します。

専門家に質問してみよう